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

📄 os_flag.txt

📁 一个电力系统谐波检测的程序
💻 TXT
📖 第 1 页 / 共 5 页
字号:
000724  e1a00009          MOV      r0,r9                 ;453
000728  eaffff9d          B        |L1.1444|             ;453
                  |L1.1836|
00072c  e1a03006          MOV      r3,r6                 ;455
000730  e1a02005          MOV      r2,r5                 ;455
000734  e58d7000          STR      r7,[sp,#0]            ;455
000738  e28d1008          ADD      r1,sp,#8              ;455
00073c  e1a00004          MOV      r0,r4                 ;455
000740  ebfffffe          BL       OS_FlagBlock          ;455
000744  ef000003          SVC      0x3  ; formerly SWI   ;456
000748  ea000020          B        |L1.2000|             ;458
                  |L1.1868|
00074c  e1a00000          MOV      r0,r0                 ;460
000750  e1d400b8          LDRH     r0,[r4,#8]            ;461
000754  e1c50000          BIC      r0,r5,r0              ;461
000758  e1a0a800          LSL      r10,r0,#16            ;461
00075c  e1a0a82a          LSR      r10,r10,#16           ;461
000760  e35a0000          CMP      r10,#0                ;462
000764  0a00000a          BEQ      |L1.1940|             ;462
000768  e35b0001          CMP      r11,#1                ;463
00076c  1a000002          BNE      |L1.1916|             ;463
000770  e1d400b8          LDRH     r0,[r4,#8]            ;464
000774  e180000a          ORR      r0,r0,r10             ;464
000778  e1c400b8          STRH     r0,[r4,#8]            ;464
                  |L1.1916|
00077c  e1d490b8          LDRH     r9,[r4,#8]            ;466
000780  ef000003          SVC      0x3  ; formerly SWI   ;467
000784  e3a00000          MOV      r0,#0                 ;468
000788  e5c80000          STRB     r0,[r8,#0]            ;468
00078c  e1a00009          MOV      r0,r9                 ;469
000790  eaffff83          B        |L1.1444|             ;469
                  |L1.1940|
000794  e1a03006          MOV      r3,r6                 ;471
000798  e1a02005          MOV      r2,r5                 ;471
00079c  e58d7000          STR      r7,[sp,#0]            ;471
0007a0  e28d1008          ADD      r1,sp,#8              ;471
0007a4  e1a00004          MOV      r0,r4                 ;471
0007a8  ebfffffe          BL       OS_FlagBlock          ;471
0007ac  ef000003          SVC      0x3  ; formerly SWI   ;472
0007b0  ea000006          B        |L1.2000|             ;474
                  |L1.1972|
0007b4  e1a00000          MOV      r0,r0                 ;477
0007b8  ef000003          SVC      0x3  ; formerly SWI   ;478
0007bc  e3a09000          MOV      r9,#0                 ;479
0007c0  e3a00097          MOV      r0,#0x97              ;480
0007c4  e5c80000          STRB     r0,[r8,#0]            ;480
0007c8  e1a00009          MOV      r0,r9                 ;481
0007cc  eaffff74          B        |L1.1444|             ;481
                  |L1.2000|
0007d0  e1a00000          MOV      r0,r0                 ;425
0007d4  ebfffffe          BL       OS_Sched              ;483
0007d8  ef000002          SVC      0x2  ; formerly SWI   ;484
0007dc  e59f0384          LDR      r0,|L1.2920|          ;485
0007e0  e5900000          LDR      r0,[r0,#0]            ;485  ; OSTCBCur
0007e4  e5d0002c          LDRB     r0,[r0,#0x2c]         ;485
0007e8  e3100020          TST      r0,#0x20              ;485
0007ec  0a00000a          BEQ      |L1.2076|             ;485
0007f0  e28d0008          ADD      r0,sp,#8              ;486
0007f4  ebfffffe          BL       OS_FlagUnlink         ;486
0007f8  e3a00000          MOV      r0,#0                 ;487
0007fc  e59f1364          LDR      r1,|L1.2920|          ;487
000800  e5911000          LDR      r1,[r1,#0]            ;487  ; OSTCBCur
000804  e5c1002c          STRB     r0,[r1,#0x2c]         ;487
000808  ef000003          SVC      0x3  ; formerly SWI   ;488
00080c  e3a09000          MOV      r9,#0                 ;489
000810  e3a0000a          MOV      r0,#0xa               ;490
000814  e5c80000          STRB     r0,[r8,#0]            ;490
000818  ea000021          B        |L1.2212|             ;490
                  |L1.2076|
00081c  e35b0001          CMP      r11,#1                ;492
000820  1a00001b          BNE      |L1.2196|             ;492
000824  e3560000          CMP      r6,#0                 ;493
000828  0a00000f          BEQ      |L1.2156|             ;493
00082c  e3560001          CMP      r6,#1                 ;493
000830  0a00000f          BEQ      |L1.2164|             ;493
000834  e3560002          CMP      r6,#2                 ;493
000838  0a000002          BEQ      |L1.2120|             ;493
00083c  e3560003          CMP      r6,#3                 ;493
000840  1a000012          BNE      |L1.2192|             ;493
000844  ea000001          B        |L1.2128|             ;493
                  |L1.2120|
000848  e1a00000          MOV      r0,r0                 ;494
00084c  e1a00000          MOV      r0,r0                 ;495
                  |L1.2128|
000850  e1d400b8          LDRH     r0,[r4,#8]            ;496
000854  e59f130c          LDR      r1,|L1.2920|          ;496
000858  e5911000          LDR      r1,[r1,#0]            ;496  ; OSTCBCur
00085c  e1d112b8          LDRH     r1,[r1,#0x28]         ;496
000860  e1c00001          BIC      r0,r0,r1              ;496
000864  e1c400b8          STRH     r0,[r4,#8]            ;496
000868  ea000008          B        |L1.2192|             ;497
                  |L1.2156|
00086c  e1a00000          MOV      r0,r0                 ;500
000870  e1a00000          MOV      r0,r0                 ;501
                  |L1.2164|
000874  e1d400b8          LDRH     r0,[r4,#8]            ;502
000878  e59f12e8          LDR      r1,|L1.2920|          ;502
00087c  e5911000          LDR      r1,[r1,#0]            ;502  ; OSTCBCur
000880  e1d112b8          LDRH     r1,[r1,#0x28]         ;502
000884  e1800001          ORR      r0,r0,r1              ;502
000888  e1c400b8          STRH     r0,[r4,#8]            ;502
00088c  e1a00000          MOV      r0,r0                 ;503
                  |L1.2192|
000890  e1a00000          MOV      r0,r0                 ;497
                  |L1.2196|
000894  e1d490b8          LDRH     r9,[r4,#8]            ;507
000898  ef000003          SVC      0x3  ; formerly SWI   ;508
00089c  e3a00000          MOV      r0,#0                 ;509
0008a0  e5c80000          STRB     r0,[r8,#0]            ;509
                  |L1.2212|
0008a4  e1a00009          MOV      r0,r9                 ;511
0008a8  eaffff3d          B        |L1.1444|             ;511
                          ENDP

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

⌨️ 快捷键说明

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