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

📄 os_flag.txt

📁 一个电力系统谐波检测的程序
💻 TXT
📖 第 1 页 / 共 5 页
字号:
;;;294                     OSFlagFreeList       = pgrp;
;;;295                     OS_EXIT_CRITICAL();
;;;296                     *err                 = OS_NO_ERR;
;;;297                     return ((OS_FLAG_GRP *)0);                /* Event Flag Group has been deleted        */
;;;298                 } else {
;;;299                     OS_EXIT_CRITICAL();
;;;300                     *err                 = OS_ERR_TASK_WAITING;
;;;301                     return (pgrp);
;;;302                 }
;;;303    
;;;304            case OS_DEL_ALWAYS:                                /* Always delete the event flag group       */
;;;305                 pnode = (OS_FLAG_NODE *)pgrp->OSFlagWaitList;
;;;306                 while (pnode != (OS_FLAG_NODE *)0) {          /* Ready ALL tasks waiting for flags        */
;;;307                     OS_FlagTaskRdy(pnode, (OS_FLAGS)0);
;;;308                     pnode = (OS_FLAG_NODE *)pnode->OSFlagNodeNext;
;;;309                 }
;;;310                 pgrp->OSFlagType     = OS_EVENT_TYPE_UNUSED;
;;;311                 pgrp->OSFlagWaitList = (void *)OSFlagFreeList;/* Return group to free list                */
;;;312                 OSFlagFreeList       = pgrp;
;;;313                 OS_EXIT_CRITICAL();
;;;314                 if (tasks_waiting == TRUE) {                  /* Reschedule only if task(s) were waiting  */
;;;315                     OS_Sched();                               /* Find highest priority task ready to run  */
;;;316                 }
;;;317                 *err = OS_NO_ERR;
;;;318                 return ((OS_FLAG_GRP *)0);                    /* Event Flag Group has been deleted        */
;;;319    
;;;320            default:
;;;321                 OS_EXIT_CRITICAL();
;;;322                 *err = OS_ERR_INVALID_OPT;
;;;323                 return (pgrp);
;;;324        }
;;;325    }
000364  e12fff1e          BX       lr
                  |L1.872|
000368  e3540000          CMP      r4,#0                 ;274
00036c  1a000003          BNE      |L1.896|              ;274
000370  e3a00096          MOV      r0,#0x96              ;275
000374  e5c60000          STRB     r0,[r6,#0]            ;275
000378  e1a00004          MOV      r0,r4                 ;276
00037c  eafffff7          B        |L1.864|              ;276
                  |L1.896|
000380  e5d40000          LDRB     r0,[r4,#0]            ;278
000384  e3500005          CMP      r0,#5                 ;278
000388  0a000003          BEQ      |L1.924|              ;278
00038c  e3a00001          MOV      r0,#1                 ;279
000390  e5c60000          STRB     r0,[r6,#0]            ;279
000394  e1a00004          MOV      r0,r4                 ;280
000398  eafffff0          B        |L1.864|              ;280
                  |L1.924|
00039c  ef000002          SVC      0x2  ; formerly SWI   ;283
0003a0  e5940004          LDR      r0,[r4,#4]            ;284
0003a4  e3500000          CMP      r0,#0                 ;284
0003a8  0a000001          BEQ      |L1.948|              ;284
0003ac  e3a07001          MOV      r7,#1                 ;285
0003b0  ea000000          B        |L1.952|              ;285
                  |L1.948|
0003b4  e3a07000          MOV      r7,#0                 ;287
                  |L1.952|
0003b8  e3550000          CMP      r5,#0                 ;289
0003bc  0a000002          BEQ      |L1.972|              ;289
0003c0  e3550001          CMP      r5,#1                 ;289
0003c4  1a00002a          BNE      |L1.1140|             ;289
0003c8  ea000012          B        |L1.1048|             ;289
                  |L1.972|
0003cc  e1a00000          MOV      r0,r0                 ;290
0003d0  e3570000          CMP      r7,#0                 ;291
0003d4  1a00000a          BNE      |L1.1028|             ;291
0003d8  e3a00000          MOV      r0,#0                 ;292
0003dc  e5c40000          STRB     r0,[r4,#0]            ;292
0003e0  e59f0774          LDR      r0,|L1.2908|          ;293
0003e4  e5900000          LDR      r0,[r0,#0]            ;293  ; OSFlagFreeList
0003e8  e5840004          STR      r0,[r4,#4]            ;293
0003ec  e59f0768          LDR      r0,|L1.2908|          ;294
0003f0  e5804000          STR      r4,[r0,#0]            ;294  ; OSFlagFreeList
0003f4  ef000003          SVC      0x3  ; formerly SWI   ;295
0003f8  e3a00000          MOV      r0,#0                 ;296
0003fc  e5c60000          STRB     r0,[r6,#0]            ;296
000400  eaffffd6          B        |L1.864|              ;297
                  |L1.1028|
000404  ef000003          SVC      0x3  ; formerly SWI   ;299
000408  e3a00008          MOV      r0,#8                 ;300
00040c  e5c60000          STRB     r0,[r6,#0]            ;300
000410  e1a00004          MOV      r0,r4                 ;301
000414  eaffffd1          B        |L1.864|              ;301
                  |L1.1048|
000418  e1a00000          MOV      r0,r0                 ;304
00041c  e5948004          LDR      r8,[r4,#4]            ;305
000420  ea000003          B        |L1.1076|             ;306
                  |L1.1060|
000424  e3a01000          MOV      r1,#0                 ;307
000428  e1a00008          MOV      r0,r8                 ;307
00042c  ebfffffe          BL       OS_FlagTaskRdy        ;307
000430  e5988000          LDR      r8,[r8,#0]            ;308
                  |L1.1076|
000434  e3580000          CMP      r8,#0                 ;306
000438  1afffff9          BNE      |L1.1060|             ;306
00043c  e3a00000          MOV      r0,#0                 ;310
000440  e5c40000          STRB     r0,[r4,#0]            ;310
000444  e59f0710          LDR      r0,|L1.2908|          ;311
000448  e5900000          LDR      r0,[r0,#0]            ;311  ; OSFlagFreeList
00044c  e5840004          STR      r0,[r4,#4]            ;311
000450  e59f0704          LDR      r0,|L1.2908|          ;312
000454  e5804000          STR      r4,[r0,#0]            ;312  ; OSFlagFreeList
000458  ef000003          SVC      0x3  ; formerly SWI   ;313
00045c  e3570001          CMP      r7,#1                 ;314
000460  1a000000          BNE      |L1.1128|             ;314
000464  ebfffffe          BL       OS_Sched              ;315
                  |L1.1128|
000468  e3a00000          MOV      r0,#0                 ;317
00046c  e5c60000          STRB     r0,[r6,#0]            ;317
000470  eaffffba          B        |L1.864|              ;318
                  |L1.1140|
000474  e1a00000          MOV      r0,r0                 ;320
000478  ef000003          SVC      0x3  ; formerly SWI   ;321
00047c  e3a00007          MOV      r0,#7                 ;322
000480  e5c60000          STRB     r0,[r6,#0]            ;322
000484  e1a00004          MOV      r0,r4                 ;323
000488  eaffffb4          B        |L1.864|              ;323
                          ENDP

                  OS_FlagBlock PROC
;;;731    static  void  OS_FlagBlock (OS_FLAG_GRP *pgrp, OS_FLAG_NODE *pnode, OS_FLAGS flags, INT8U wait_type, INT16U timeout)
;;;732    {
00048c  e92d4070          PUSH     {r4-r6,lr}
000490  e59dc010          LDR      r12,[sp,#0x10]
;;;733        OS_FLAG_NODE  *pnode_next;
;;;734    
;;;735    
;;;736        OSTCBCur->OSTCBStat      |= OS_STAT_FLAG;
000494  e59f46cc          LDR      r4,|L1.2920|
000498  e5944000          LDR      r4,[r4,#0]  ; OSTCBCur
00049c  e5d4402c          LDRB     r4,[r4,#0x2c]
0004a0  e3844020          ORR      r4,r4,#0x20
0004a4  e59f56bc          LDR      r5,|L1.2920|
0004a8  e5955000          LDR      r5,[r5,#0]  ; OSTCBCur
0004ac  e5c5402c          STRB     r4,[r5,#0x2c]
;;;737        OSTCBCur->OSTCBDly        = timeout;              /* Store timeout in task's TCB                   */
0004b0  e59f46b0          LDR      r4,|L1.2920|
0004b4  e5944000          LDR      r4,[r4,#0]  ; OSTCBCur
0004b8  e1c4c2ba          STRH     r12,[r4,#0x2a]
;;;738    #if OS_TASK_DEL_EN > 0
;;;739        OSTCBCur->OSTCBFlagNode   = pnode;                /* TCB to link to node                           */
0004bc  e59f46a4          LDR      r4,|L1.2920|
0004c0  e5944000          LDR      r4,[r4,#0]  ; OSTCBCur
0004c4  e5841024          STR      r1,[r4,#0x24]
;;;740    #endif
;;;741        pnode->OSFlagNodeFlags    = flags;                /* Save the flags that we need to wait for       */
0004c8  e1c121b0          STRH     r2,[r1,#0x10]
;;;742        pnode->OSFlagNodeWaitType = wait_type;            /* Save the type of wait we are doing            */
0004cc  e5c13012          STRB     r3,[r1,#0x12]
;;;743        pnode->OSFlagNodeTCB      = (void *)OSTCBCur;     /* Link to task's TCB                            */
0004d0  e59f4690          LDR      r4,|L1.2920|
0004d4  e5944000          LDR      r4,[r4,#0]  ; OSTCBCur
0004d8  e5814008          STR      r4,[r1,#8]
;;;744        pnode->OSFlagNodeNext     = pgrp->OSFlagWaitList; /* Add node at beginning of event flag wait list */
0004dc  e5904004          LDR      r4,[r0,#4]
0004e0  e5814000          STR      r4,[r1,#0]
;;;745        pnode->OSFlagNodePrev     = (void *)0;
0004e4  e3a04000          MOV      r4,#0
0004e8  e5814004          STR      r4,[r1,#4]
;;;746        pnode->OSFlagNodeFlagGrp  = (void *)pgrp;         /* Link to Event Flag Group                      */
0004ec  e581000c          STR      r0,[r1,#0xc]
;;;747        pnode_next                = (OS_FLAG_NODE *)pgrp->OSFlagWaitList;
0004f0  e590e004          LDR      lr,[r0,#4]
;;;748        if (pnode_next != (void *)0) {                    /* Is this the first NODE to insert?             */
0004f4  e35e0000          CMP      lr,#0
0004f8  0a000000          BEQ      |L1.1280|
;;;749            pnode_next->OSFlagNodePrev = pnode;           /* No, link in doubly linked list                */
0004fc  e58e1004          STR      r1,[lr,#4]
;;;750        }
;;;751        pgrp->OSFlagWaitList = (void *)pnode;
                  |L1.1280|
000500  e5801004          STR      r1,[r0,#4]
;;;752                                                          /* Suspend current task until flag(s) received   */
;;;753        if ((OSRdyTbl[OSTCBCur->OSTCBY] &= ~OSTCBCur->OSTCBBitX) == 0) {
000504  e59f465c          LDR      r4,|L1.2920|
000508  e5944000          LDR      r4,[r4,#0]  ; OSTCBCur
00050c  e5d4402f          LDRB     r4,[r4,#0x2f]
000510  e59f564c          LDR      r5,|L1.2916|
000514  e7d54004          LDRB     r4,[r5,r4]
000518  e59f5648          LDR      r5,|L1.2920|
00051c  e5955000          LDR      r5,[r5,#0]  ; OSTCBCur
000520  e5d55030          LDRB     r5,[r5,#0x30]
000524  e1c44005          BIC      r4,r4,r5
000528  e21440ff          ANDS     r4,r4,#0xff
00052c  e59f5634          LDR      r5,|L1.2920|
000530  e5955000          LDR      r5,[r5,#0]  ; OSTCBCur
000534  e5d5502f          LDRB     r5,[r5,#0x2f]
000538  e59f6624          LDR      r6,|L1.2916|
00053c  e7c64005          STRB     r4,[r6,r5]
000540  1a000007          BNE      |L1.1380|
;;;754            OSRdyGrp &= ~OSTCBCur->OSTCBBitY;
000544  e59f461c          LDR      r4,|L1.2920|
000548  e5944000          LDR      r4,[r4,#0]  ; OSTCBCur
00054c  e5d44031          LDRB     r4,[r4,#0x31]
000550  e59f5608          LDR      r5,|L1.2912|
000554  e5d55000          LDRB     r5,[r5,#0]  ; OSRdyGrp
000558  e1c54004          BIC      r4,r5,r4
00055c  e59f55fc          LDR      r5,|L1.2912|
000560  e5c54000          STRB     r4,[r5,#0]  ; OSRdyGrp
;;;755        }
;;;756    }
                  |L1.1380|
000564  e8bd4070          POP      {r4-r6,lr}
000568  e12fff1e          BX       lr
                          ENDP

                  OSFlagPend PROC
;;;377    OS_FLAGS  OSFlagPend (OS_FLAG_GRP *pgrp, OS_FLAGS flags, INT8U wait_type, INT16U timeout, INT8U *err)
;;;378    {
00056c  e92d4ff0          PUSH     {r4-r11,lr}
000570  e24dd01c          SUB      sp,sp,#0x1c
000574  e1a04000          MOV      r4,r0
000578  e1a05001          MOV      r5,r1
00057c  e1a06002          MOV      r6,r2
000580  e1a07003          MOV      r7,r3
000584  e59d8040          LDR      r8,[sp,#0x40]
;;;379    #if OS_CRITICAL_METHOD == 3                                /* Allocate storage for CPU status register */
;;;380        OS_CPU_SR     cpu_sr;
;;;381    #endif
;;;382        OS_FLAG_NODE  node;
;;;383        OS_FLAGS      flags_cur;
;;;384        OS_FLAGS      flags_rdy;
;;;385        BOOLEAN       consume;
;;;386    
;;;387    
;;;388        if (OSIntNesting > 0) {                                /* See if called from ISR ...               */
000588  e59f05c8          LDR      r0,|L1.2904|
00058c  e5d00000          LDRB     r0,[r0,#0]  ; OSIntNesting
000590  e3500000          CMP      r0,#0
000594  da000005          BLE      |L1.1456|
;;;389            *err = OS_ERR_PEND_ISR;                            /* ... can't PEND from an ISR               */
000598  e3a00002          MOV      r0,#2
00059c  e5c80000          STRB     r0,[r8,#0]

⌨️ 快捷键说明

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