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

📄 os_flag.txt

📁 在KEIL下成功使用UCOS-II嵌入式操作系统
💻 TXT
📖 第 1 页 / 共 5 页
字号:
00070c  eaffff9e          B        |L1.1420|             ;454
                  |L1.1808|
000710  e1a03006          MOV      r3,r6                 ;456
000714  e1a02005          MOV      r2,r5                 ;456
000718  e58d7000          STR      r7,[sp,#0]            ;456
00071c  e28d1008          ADD      r1,sp,#8              ;456
000720  e1a00004          MOV      r0,r4                 ;456
000724  ebfffffe          BL       OS_FlagBlock          ;456
000728  ef000003          SVC      0x3  ; formerly SWI   ;457
00072c  ea000020          B        |L1.1972|             ;459
                  |L1.1840|
000730  e1a00000          MOV      r0,r0                 ;461
000734  e1d400b8          LDRH     r0,[r4,#8]            ;462
000738  e1c50000          BIC      r0,r5,r0              ;462
00073c  e1a0a800          LSL      r10,r0,#16            ;462
000740  e1a0a82a          LSR      r10,r10,#16           ;462
000744  e35a0000          CMP      r10,#0                ;463
000748  0a00000a          BEQ      |L1.1912|             ;463
00074c  e35b0001          CMP      r11,#1                ;464
000750  1a000002          BNE      |L1.1888|             ;464
000754  e1d400b8          LDRH     r0,[r4,#8]            ;465
000758  e180000a          ORR      r0,r0,r10             ;465
00075c  e1c400b8          STRH     r0,[r4,#8]            ;465
                  |L1.1888|
000760  e1d490b8          LDRH     r9,[r4,#8]            ;467
000764  ef000003          SVC      0x3  ; formerly SWI   ;468
000768  e3a00000          MOV      r0,#0                 ;469
00076c  e5c80000          STRB     r0,[r8,#0]            ;469
000770  e1a00009          MOV      r0,r9                 ;470
000774  eaffff84          B        |L1.1420|             ;470
                  |L1.1912|
000778  e1a03006          MOV      r3,r6                 ;472
00077c  e1a02005          MOV      r2,r5                 ;472
000780  e58d7000          STR      r7,[sp,#0]            ;472
000784  e28d1008          ADD      r1,sp,#8              ;472
000788  e1a00004          MOV      r0,r4                 ;472
00078c  ebfffffe          BL       OS_FlagBlock          ;472
000790  ef000003          SVC      0x3  ; formerly SWI   ;473
000794  ea000006          B        |L1.1972|             ;475
                  |L1.1944|
000798  e1a00000          MOV      r0,r0                 ;478
00079c  ef000003          SVC      0x3  ; formerly SWI   ;479
0007a0  e3a09000          MOV      r9,#0                 ;480
0007a4  e3a00097          MOV      r0,#0x97              ;481
0007a8  e5c80000          STRB     r0,[r8,#0]            ;481
0007ac  e1a00009          MOV      r0,r9                 ;482
0007b0  eaffff75          B        |L1.1420|             ;482
                  |L1.1972|
0007b4  e1a00000          MOV      r0,r0                 ;426
0007b8  ebfffffe          BL       OS_Sched              ;484
0007bc  ef000002          SVC      0x2  ; formerly SWI   ;485
0007c0  e59f037c          LDR      r0,|L1.2884|          ;486
0007c4  e5900000          LDR      r0,[r0,#0]            ;486  ; OSTCBCur
0007c8  e5d0001c          LDRB     r0,[r0,#0x1c]         ;486
0007cc  e3100020          TST      r0,#0x20              ;486
0007d0  0a00000a          BEQ      |L1.2048|             ;486
0007d4  e28d0008          ADD      r0,sp,#8              ;487
0007d8  ebfffffe          BL       OS_FlagUnlink         ;487
0007dc  e3a00000          MOV      r0,#0                 ;488
0007e0  e59f135c          LDR      r1,|L1.2884|          ;488
0007e4  e5911000          LDR      r1,[r1,#0]            ;488  ; OSTCBCur
0007e8  e5c1001c          STRB     r0,[r1,#0x1c]         ;488
0007ec  ef000003          SVC      0x3  ; formerly SWI   ;489
0007f0  e3a09000          MOV      r9,#0                 ;490
0007f4  e3a0000a          MOV      r0,#0xa               ;491
0007f8  e5c80000          STRB     r0,[r8,#0]            ;491
0007fc  ea000021          B        |L1.2184|             ;491
                  |L1.2048|
000800  e35b0001          CMP      r11,#1                ;493
000804  1a00001b          BNE      |L1.2168|             ;493
000808  e3560000          CMP      r6,#0                 ;494
00080c  0a00000f          BEQ      |L1.2128|             ;494
000810  e3560001          CMP      r6,#1                 ;494
000814  0a00000f          BEQ      |L1.2136|             ;494
000818  e3560002          CMP      r6,#2                 ;494
00081c  0a000002          BEQ      |L1.2092|             ;494
000820  e3560003          CMP      r6,#3                 ;494
000824  1a000012          BNE      |L1.2164|             ;494
000828  ea000001          B        |L1.2100|             ;494
                  |L1.2092|
00082c  e1a00000          MOV      r0,r0                 ;495
000830  e1a00000          MOV      r0,r0                 ;496
                  |L1.2100|
000834  e1d400b8          LDRH     r0,[r4,#8]            ;497
000838  e59f1304          LDR      r1,|L1.2884|          ;497
00083c  e5911000          LDR      r1,[r1,#0]            ;497  ; OSTCBCur
000840  e1d111b8          LDRH     r1,[r1,#0x18]         ;497
000844  e1c00001          BIC      r0,r0,r1              ;497
000848  e1c400b8          STRH     r0,[r4,#8]            ;497
00084c  ea000008          B        |L1.2164|             ;498
                  |L1.2128|
000850  e1a00000          MOV      r0,r0                 ;501
000854  e1a00000          MOV      r0,r0                 ;502
                  |L1.2136|
000858  e1d400b8          LDRH     r0,[r4,#8]            ;503
00085c  e59f12e0          LDR      r1,|L1.2884|          ;503
000860  e5911000          LDR      r1,[r1,#0]            ;503  ; OSTCBCur
000864  e1d111b8          LDRH     r1,[r1,#0x18]         ;503
000868  e1800001          ORR      r0,r0,r1              ;503
00086c  e1c400b8          STRH     r0,[r4,#8]            ;503
000870  e1a00000          MOV      r0,r0                 ;504
                  |L1.2164|
000874  e1a00000          MOV      r0,r0                 ;498
                  |L1.2168|
000878  e1d490b8          LDRH     r9,[r4,#8]            ;508
00087c  ef000003          SVC      0x3  ; formerly SWI   ;509
000880  e3a00000          MOV      r0,#0                 ;510
000884  e5c80000          STRB     r0,[r8,#0]            ;510
                  |L1.2184|
000888  e1a00009          MOV      r0,r9                 ;512
00088c  eaffff3e          B        |L1.1420|             ;512
                          ENDP

                  OSFlagPost PROC
;;;556    OS_FLAGS  OSFlagPost (OS_FLAG_GRP *pgrp, OS_FLAGS flags, INT8U opt, INT8U *err)
;;;557    {
000890  e92d5ff0          PUSH     {r4-r12,lr}
000894  e1a04000          MOV      r4,r0
000898  e1a05001          MOV      r5,r1
00089c  e1a06002          MOV      r6,r2
0008a0  e1a07003          MOV      r7,r3
;;;558    #if OS_CRITICAL_METHOD == 3                          /* Allocate storage for CPU status register       */
;;;559        OS_CPU_SR     cpu_sr;
;;;560    #endif    
;;;561        OS_FLAG_NODE *pnode;
;;;562        BOOLEAN       sched;
;;;563        OS_FLAGS      flags_cur;
;;;564        OS_FLAGS      flags_rdy;
;;;565    
;;;566    
;;;567    #if OS_ARG_CHK_EN > 0
;;;568        if (pgrp == (OS_FLAG_GRP *)0) {                  /* Validate 'pgrp'                                */
0008a4  e3540000          CMP      r4,#0
0008a8  1a000003          BNE      |L1.2236|
;;;569            *err = OS_FLAG_INVALID_PGRP;
0008ac  e3a00096          MOV      r0,#0x96
0008b0  e5c70000          STRB     r0,[r7,#0]
;;;570            return ((OS_FLAGS)0);
0008b4  e3a00000          MOV      r0,#0
;;;571        }
;;;572        if (pgrp->OSFlagType != OS_EVENT_TYPE_FLAG) {    /* Make sure we are pointing to an event flag grp */
;;;573            *err = OS_ERR_EVENT_TYPE;
;;;574            return ((OS_FLAGS)0);
;;;575        }
;;;576    #endif
;;;577    /*$PAGE*/
;;;578        OS_ENTER_CRITICAL();
;;;579        switch (opt) {
;;;580            case OS_FLAG_CLR:
;;;581                 pgrp->OSFlagFlags &= ~flags;            /* Clear the flags specified in the group         */
;;;582                 break;
;;;583                 
;;;584            case OS_FLAG_SET:
;;;585                 pgrp->OSFlagFlags |=  flags;            /* Set   the flags specified in the group         */
;;;586                 break;
;;;587              
;;;588            default:
;;;589                 OS_EXIT_CRITICAL();                     /* INVALID option                                 */
;;;590                 *err = OS_FLAG_INVALID_OPT;
;;;591                 return ((OS_FLAGS)0);
;;;592        }
;;;593        sched = FALSE;                                   /* Indicate that we don't need rescheduling       */
;;;594        pnode = pgrp->OSFlagWaitList;                
;;;595        while (pnode != (OS_FLAG_NODE *)0) {             /* Go through all tasks waiting on event flag(s)  */
;;;596            switch (pnode->OSFlagNodeWaitType) {
;;;597                case OS_FLAG_WAIT_SET_ALL:               /* See if all req. flags are set for current node */
;;;598                     flags_rdy = pgrp->OSFlagFlags & pnode->OSFlagNodeFlags;
;;;599                     if (flags_rdy == pnode->OSFlagNodeFlags) {     
;;;600                         if (OS_FlagTaskRdy(pnode, flags_rdy) == TRUE) { /* Make task RTR, event(s) Rx'd   */
;;;601                             sched = TRUE;                               /* When done we will reschedule   */
;;;602                         }
;;;603                     }
;;;604                     break;
;;;605    
;;;606                case OS_FLAG_WAIT_SET_ANY:               /* See if any flag set                            */
;;;607                     flags_rdy = pgrp->OSFlagFlags & pnode->OSFlagNodeFlags;
;;;608                     if (flags_rdy != (OS_FLAGS)0) {    
;;;609                         if (OS_FlagTaskRdy(pnode, flags_rdy) == TRUE) { /* Make task RTR, event(s) Rx'd   */
;;;610                             sched = TRUE;                               /* When done we will reschedule   */
;;;611                         }
;;;612                     }
;;;613                     break;
;;;614    
;;;615    #if OS_FLAG_WAIT_CLR_EN > 0
;;;616                case OS_FLAG_WAIT_CLR_ALL:               /* See if all req. flags are set for current node */
;;;617                     flags_rdy = ~pgrp->OSFlagFlags & pnode->OSFlagNodeFlags;
;;;618                     if (flags_rdy == pnode->OSFlagNodeFlags) {     
;;;619                         if (OS_FlagTaskRdy(pnode, flags_rdy) == TRUE) { /* Make task RTR, event(s) Rx'd   */
;;;620                             sched = TRUE;                               /* When done we will reschedule   */
;;;621                         }
;;;622                     }
;;;623                     break;
;;;624    
;;;625                case OS_FLAG_WAIT_CLR_ANY:               /* See if any flag set                            */
;;;626                     flags_rdy = ~pgrp->OSFlagFlags & pnode->OSFlagNodeFlags;
;;;627                     if (flags_rdy != (OS_FLAGS)0) {    
;;;628                         if (OS_FlagTaskRdy(pnode, flags_rdy) == TRUE) { /* Make task RTR, event(s) Rx'd   */
;;;629                             sched = TRUE;                               /* When done we will reschedule   */
;;;630                         }
;;;631                     }
;;;632                     break;
;;;633    #endif                 
;;;634            }
;;;635            pnode = pnode->OSFlagNodeNext;               /* Point to next task waiting for event flag(s)   */
;;;636        }
;;;637        OS_EXIT_CRITICAL();
;;;638        if (sched == TRUE) {
;;;639            OS_Sched();
;;;640        }
;;;641        OS_ENTER_CRITICAL();
;;;642        flags_cur = pgrp->OSFlagFlags;
;;;643        OS_EXIT_CRITICAL();
;;;644        *err      = OS_NO_ERR;
;;;645        return (flags_cur);
;;;646    }
                  |L1.2232|
0008b8  e8bd9ff0          POP      {r4-r12,pc}
                  |L1.2236|
0008bc  e5d40000          LDRB     r0,[r4,#0]            ;572
0008c0  e3500005          CMP      r0,#5                 ;572
0008c4  0a000003          BEQ      |L1.2264|             ;572
0008c8  e3a00001          MOV      r0,#1                 ;573
0008cc  e5c70000          STRB     r0,[r7,#0]            ;573
0008d0  e3a00000          MOV      r0,#0                 ;574
0008d4  eafffff7          B        |L1.2232|             ;574
                  |L1.2264|
0008d8  ef000002          SVC      0x2  ; formerly SWI   ;578
0008dc  e3560000          CMP      r6,#0                 ;579
0008e0  0a000002          BEQ      |L1.2288|             ;579
0008e4  e3560001          CMP      r6,#1                 ;579
0008e8  1a00000a          BNE      |L1.2328|      

⌨️ 快捷键说明

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