⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 os_flag.txt

📁 在KEIL下成功使用UCOS-II嵌入式操作系统
💻 TXT
📖 第 1 页 / 共 5 页
字号:
                  |L1.1420|
00058c  e28dd01c          ADD      sp,sp,#0x1c
;;;392        }
;;;393    #if OS_ARG_CHK_EN > 0
;;;394        if (pgrp == (OS_FLAG_GRP *)0) {                        /* Validate 'pgrp'                          */
;;;395            *err = OS_FLAG_INVALID_PGRP;
;;;396            return ((OS_FLAGS)0);
;;;397        }
;;;398        if (pgrp->OSFlagType != OS_EVENT_TYPE_FLAG) {          /* Validate event block type                */
;;;399            *err = OS_ERR_EVENT_TYPE;
;;;400            return ((OS_FLAGS)0);
;;;401        }
;;;402    #endif
;;;403        if (wait_type & OS_FLAG_CONSUME) {                     /* See if we need to consume the flags      */
;;;404            wait_type &= ~OS_FLAG_CONSUME;
;;;405            consume    = TRUE;
;;;406        } else {
;;;407            consume    = FALSE;
;;;408        }
;;;409    /*$PAGE*/
;;;410        OS_ENTER_CRITICAL();
;;;411        switch (wait_type) {
;;;412            case OS_FLAG_WAIT_SET_ALL:                         /* See if all required flags are set        */
;;;413                 flags_rdy = pgrp->OSFlagFlags & flags;        /* Extract only the bits we want            */
;;;414                 if (flags_rdy == flags) {                     /* Must match ALL the bits that we want     */
;;;415                     if (consume == TRUE) {                    /* See if we need to consume the flags      */
;;;416                         pgrp->OSFlagFlags &= ~flags_rdy;      /* Clear ONLY the flags that we wanted      */
;;;417                     }
;;;418                     flags_cur = pgrp->OSFlagFlags;            /* Will return the state of the group       */
;;;419                     OS_EXIT_CRITICAL();                       /* Yes, condition met, return to caller     */
;;;420                     *err      = OS_NO_ERR;
;;;421                     return (flags_cur);
;;;422                 } else {                                      /* Block task until events occur or timeout */
;;;423                     OS_FlagBlock(pgrp, &node, flags, wait_type, timeout); 
;;;424                     OS_EXIT_CRITICAL();
;;;425                 }
;;;426                 break;
;;;427    
;;;428            case OS_FLAG_WAIT_SET_ANY:
;;;429                 flags_rdy = pgrp->OSFlagFlags & flags;        /* Extract only the bits we want            */
;;;430                 if (flags_rdy != (OS_FLAGS)0) {               /* See if any flag set                      */
;;;431                     if (consume == TRUE) {                    /* See if we need to consume the flags      */
;;;432                         pgrp->OSFlagFlags &= ~flags_rdy;      /* Clear ONLY the flags that we got         */
;;;433                     }
;;;434                     flags_cur = pgrp->OSFlagFlags;            /* Will return the state of the group       */
;;;435                     OS_EXIT_CRITICAL();                       /* Yes, condition met, return to caller     */
;;;436                     *err      = OS_NO_ERR;
;;;437                     return (flags_cur);
;;;438                 } else {                                      /* Block task until events occur or timeout */
;;;439                     OS_FlagBlock(pgrp, &node, flags, wait_type, timeout); 
;;;440                     OS_EXIT_CRITICAL();
;;;441                 }
;;;442                 break;
;;;443    
;;;444    #if OS_FLAG_WAIT_CLR_EN > 0
;;;445            case OS_FLAG_WAIT_CLR_ALL:                         /* See if all required flags are cleared    */
;;;446                 flags_rdy = ~pgrp->OSFlagFlags & flags;       /* Extract only the bits we want            */
;;;447                 if (flags_rdy == flags) {                     /* Must match ALL the bits that we want     */
;;;448                     if (consume == TRUE) {                    /* See if we need to consume the flags      */
;;;449                         pgrp->OSFlagFlags |= flags_rdy;       /* Set ONLY the flags that we wanted        */
;;;450                     }
;;;451                     flags_cur = pgrp->OSFlagFlags;            /* Will return the state of the group       */
;;;452                     OS_EXIT_CRITICAL();                       /* Yes, condition met, return to caller     */
;;;453                     *err      = OS_NO_ERR;
;;;454                     return (flags_cur);
;;;455                 } else {                                      /* Block task until events occur or timeout */
;;;456                     OS_FlagBlock(pgrp, &node, flags, wait_type, timeout); 
;;;457                     OS_EXIT_CRITICAL();
;;;458                 }
;;;459                 break;
;;;460    
;;;461            case OS_FLAG_WAIT_CLR_ANY:
;;;462                 flags_rdy = ~pgrp->OSFlagFlags & flags;       /* Extract only the bits we want            */
;;;463                 if (flags_rdy != (OS_FLAGS)0) {               /* See if any flag cleared                  */
;;;464                     if (consume == TRUE) {                    /* See if we need to consume the flags      */
;;;465                         pgrp->OSFlagFlags |= flags_rdy;       /* Set ONLY the flags that we got           */
;;;466                     }
;;;467                     flags_cur = pgrp->OSFlagFlags;            /* Will return the state of the group       */
;;;468                     OS_EXIT_CRITICAL();                       /* Yes, condition met, return to caller     */
;;;469                     *err      = OS_NO_ERR;
;;;470                     return (flags_cur);
;;;471                 } else {                                      /* Block task until events occur or timeout */
;;;472                     OS_FlagBlock(pgrp, &node, flags, wait_type, timeout); 
;;;473                     OS_EXIT_CRITICAL();
;;;474                 }
;;;475                 break;
;;;476    #endif
;;;477    
;;;478            default:
;;;479                 OS_EXIT_CRITICAL();
;;;480                 flags_cur = (OS_FLAGS)0;
;;;481                 *err      = OS_FLAG_ERR_WAIT_TYPE;
;;;482                 return (flags_cur);
;;;483        }
;;;484        OS_Sched();                                            /* Find next HPT ready to run               */
;;;485        OS_ENTER_CRITICAL();
;;;486        if (OSTCBCur->OSTCBStat & OS_STAT_FLAG) {              /* Have we timed-out?                       */
;;;487            OS_FlagUnlink(&node);
;;;488            OSTCBCur->OSTCBStat = OS_STAT_RDY;                 /* Yes, make task ready-to-run              */
;;;489            OS_EXIT_CRITICAL();
;;;490            flags_cur           = (OS_FLAGS)0;
;;;491            *err                = OS_TIMEOUT;                  /* Indicate that we timed-out waiting       */
;;;492        } else {
;;;493            if (consume == TRUE) {                             /* See if we need to consume the flags      */
;;;494                switch (wait_type) {
;;;495                    case OS_FLAG_WAIT_SET_ALL:
;;;496                    case OS_FLAG_WAIT_SET_ANY:                 /* Clear ONLY the flags we got              */
;;;497                         pgrp->OSFlagFlags &= ~OSTCBCur->OSTCBFlagsRdy;
;;;498                         break;
;;;499                         
;;;500    #if OS_FLAG_WAIT_CLR_EN > 0
;;;501                    case OS_FLAG_WAIT_CLR_ALL:
;;;502                    case OS_FLAG_WAIT_CLR_ANY:                 /* Set   ONLY the flags we got              */
;;;503                         pgrp->OSFlagFlags |= OSTCBCur->OSTCBFlagsRdy;
;;;504                         break;
;;;505    #endif
;;;506                }
;;;507            }
;;;508            flags_cur = pgrp->OSFlagFlags;
;;;509            OS_EXIT_CRITICAL();
;;;510            *err      = OS_NO_ERR;                             /* Event(s) must have occurred              */
;;;511        }
;;;512        return (flags_cur);
;;;513    }
000590  e8bd8ff0          POP      {r4-r11,pc}
                  |L1.1428|
000594  e3540000          CMP      r4,#0                 ;394
000598  1a000003          BNE      |L1.1452|             ;394
00059c  e3a00096          MOV      r0,#0x96              ;395
0005a0  e5c80000          STRB     r0,[r8,#0]            ;395
0005a4  e3a00000          MOV      r0,#0                 ;396
0005a8  eafffff7          B        |L1.1420|             ;396
                  |L1.1452|
0005ac  e5d40000          LDRB     r0,[r4,#0]            ;398
0005b0  e3500005          CMP      r0,#5                 ;398
0005b4  0a000003          BEQ      |L1.1480|             ;398
0005b8  e3a00001          MOV      r0,#1                 ;399
0005bc  e5c80000          STRB     r0,[r8,#0]            ;399
0005c0  e3a00000          MOV      r0,#0                 ;400
0005c4  eafffff0          B        |L1.1420|             ;400
                  |L1.1480|
0005c8  e3160080          TST      r6,#0x80              ;403
0005cc  0a000002          BEQ      |L1.1500|             ;403
0005d0  e3c66080          BIC      r6,r6,#0x80           ;404
0005d4  e3a0b001          MOV      r11,#1                ;405
0005d8  ea000000          B        |L1.1504|             ;405
                  |L1.1500|
0005dc  e3a0b000          MOV      r11,#0                ;407
                  |L1.1504|
0005e0  ef000002          SVC      0x2  ; formerly SWI   ;410
0005e4  e3560000          CMP      r6,#0                 ;411
0005e8  0a000036          BEQ      |L1.1736|             ;411
0005ec  e3560001          CMP      r6,#1                 ;411
0005f0  0a00004e          BEQ      |L1.1840|             ;411
0005f4  e3560002          CMP      r6,#2                 ;411
0005f8  0a000002          BEQ      |L1.1544|             ;411
0005fc  e3560003          CMP      r6,#3                 ;411
000600  1a000064          BNE      |L1.1944|             ;411
000604  ea000017          B        |L1.1640|             ;411
                  |L1.1544|
000608  e1a00000          MOV      r0,r0                 ;412
00060c  e1d400b8          LDRH     r0,[r4,#8]            ;413
000610  e000a005          AND      r10,r0,r5             ;413
000614  e15a0005          CMP      r10,r5                ;414
000618  1a00000a          BNE      |L1.1608|             ;414
00061c  e35b0001          CMP      r11,#1                ;415
000620  1a000002          BNE      |L1.1584|             ;415
000624  e1d400b8          LDRH     r0,[r4,#8]            ;416
000628  e1c0000a          BIC      r0,r0,r10             ;416
00062c  e1c400b8          STRH     r0,[r4,#8]            ;416
                  |L1.1584|
000630  e1d490b8          LDRH     r9,[r4,#8]            ;418
000634  ef000003          SVC      0x3  ; formerly SWI   ;419
000638  e3a00000          MOV      r0,#0                 ;420
00063c  e5c80000          STRB     r0,[r8,#0]            ;420
000640  e1a00009          MOV      r0,r9                 ;421
000644  eaffffd0          B        |L1.1420|             ;421
                  |L1.1608|
000648  e1a03006          MOV      r3,r6                 ;423
00064c  e1a02005          MOV      r2,r5                 ;423
000650  e58d7000          STR      r7,[sp,#0]            ;423
000654  e28d1008          ADD      r1,sp,#8              ;423
000658  e1a00004          MOV      r0,r4                 ;423
00065c  ebfffffe          BL       OS_FlagBlock          ;423
000660  ef000003          SVC      0x3  ; formerly SWI   ;424
000664  ea000052          B        |L1.1972|             ;426
                  |L1.1640|
000668  e1a00000          MOV      r0,r0                 ;428
00066c  e1d400b8          LDRH     r0,[r4,#8]            ;429
000670  e000a005          AND      r10,r0,r5             ;429
000674  e35a0000          CMP      r10,#0                ;430
000678  0a00000a          BEQ      |L1.1704|             ;430
00067c  e35b0001          CMP      r11,#1                ;431
000680  1a000002          BNE      |L1.1680|             ;431
000684  e1d400b8          LDRH     r0,[r4,#8]            ;432
000688  e1c0000a          BIC      r0,r0,r10             ;432
00068c  e1c400b8          STRH     r0,[r4,#8]            ;432
                  |L1.1680|
000690  e1d490b8          LDRH     r9,[r4,#8]            ;434
000694  ef000003          SVC      0x3  ; formerly SWI   ;435
000698  e3a00000          MOV      r0,#0                 ;436
00069c  e5c80000          STRB     r0,[r8,#0]            ;436
0006a0  e1a00009          MOV      r0,r9                 ;437
0006a4  eaffffb8          B        |L1.1420|             ;437
                  |L1.1704|
0006a8  e1a03006          MOV      r3,r6                 ;439
0006ac  e1a02005          MOV      r2,r5                 ;439
0006b0  e58d7000          STR      r7,[sp,#0]            ;439
0006b4  e28d1008          ADD      r1,sp,#8              ;439
0006b8  e1a00004          MOV      r0,r4                 ;439
0006bc  ebfffffe          BL       OS_FlagBlock          ;439
0006c0  ef000003          SVC      0x3  ; formerly SWI   ;440
0006c4  ea00003a          B        |L1.1972|             ;442
                  |L1.1736|
0006c8  e1a00000          MOV      r0,r0                 ;445
0006cc  e1d400b8          LDRH     r0,[r4,#8]            ;446
0006d0  e1c50000          BIC      r0,r5,r0              ;446
0006d4  e1a0a800          LSL      r10,r0,#16            ;446
0006d8  e1a0a82a          LSR      r10,r10,#16           ;446
0006dc  e15a0005          CMP      r10,r5                ;447
0006e0  1a00000a          BNE      |L1.1808|             ;447
0006e4  e35b0001          CMP      r11,#1                ;448
0006e8  1a000002          BNE      |L1.1784|             ;448
0006ec  e1d400b8          LDRH     r0,[r4,#8]            ;449
0006f0  e180000a          ORR      r0,r0,r10             ;449
0006f4  e1c400b8          STRH     r0,[r4,#8]            ;449
                  |L1.1784|
0006f8  e1d490b8          LDRH     r9,[r4,#8]            ;451
0006fc  ef000003          SVC      0x3  ; formerly SWI   ;452
000700  e3a00000          MOV      r0,#0                 ;453
000704  e5c80000          STRB     r0,[r8,#0]            ;453
000708  e1a00009          MOV      r0,r9                 ;454

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -