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

📄 os_task.txt

📁 一个电力系统谐波检测的程序
💻 TXT
📖 第 1 页 / 共 5 页
字号:
;;;367        OS_FLAG_NODE *pnode;
;;;368    #endif
;;;369        OS_TCB       *ptcb;
;;;370     //   BOOLEAN       self;
;;;371    
;;;372    
;;;373    
;;;374        if (OSIntNesting > 0) {                                     /* See if trying to delete from ISR    */
0003e8  e59f0588          LDR      r0,|L1.2424|
0003ec  e5d00000          LDRB     r0,[r0,#0]  ; OSIntNesting
0003f0  e3500000          CMP      r0,#0
0003f4  da000002          BLE      |L1.1028|
;;;375            return (OS_TASK_DEL_ISR);
0003f8  e3a0003f          MOV      r0,#0x3f
                  |L1.1020|
0003fc  e8bd41f0          POP      {r4-r8,lr}
;;;376        }
;;;377    #if OS_ARG_CHK_EN > 0
;;;378        if (prio == OS_IDLE_PRIO) {                                 /* Not allowed to delete idle task     */
;;;379            return (OS_TASK_DEL_IDLE);
;;;380        }
;;;381        if (prio >= OS_LOWEST_PRIO && prio != OS_PRIO_SELF) {       /* Task priority valid ?               */
;;;382            return (OS_PRIO_INVALID);
;;;383        }
;;;384    #endif
;;;385        OS_ENTER_CRITICAL();
;;;386        if (prio == OS_PRIO_SELF) {                                 /* See if requesting to delete self    */
;;;387            prio = OSTCBCur->OSTCBPrio;                             /* Set priority to delete to current   */
;;;388        }
;;;389        ptcb = OSTCBPrioTbl[prio];
;;;390        if (ptcb != (OS_TCB *)0) {                                       /* Task to delete must exist      */
;;;391            if ((OSRdyTbl[ptcb->OSTCBY] &= ~ptcb->OSTCBBitX) == 0x00) {  /* Make task not ready            */
;;;392                OSRdyGrp &= ~ptcb->OSTCBBitY;
;;;393            }
;;;394    #if OS_EVENT_EN > 0
;;;395            pevent = ptcb->OSTCBEventPtr;
;;;396            if (pevent != (OS_EVENT *)0) {                          /* If task is waiting on event         */
;;;397                if ((pevent->OSEventTbl[ptcb->OSTCBY] &= ~ptcb->OSTCBBitX) == 0) { /* ... remove task from */
;;;398                    pevent->OSEventGrp &= ~ptcb->OSTCBBitY;                        /* ... event ctrl block */
;;;399                }
;;;400            }
;;;401    #endif
;;;402    #if (OS_VERSION >= 251) && (OS_FLAG_EN > 0) && (OS_MAX_FLAGS > 0)
;;;403            pnode = ptcb->OSTCBFlagNode;
;;;404            if (pnode != (OS_FLAG_NODE *)0) {                       /* If task is waiting on event flag    */
;;;405                OS_FlagUnlink(pnode);                               /* Remove from wait list               */
;;;406            }
;;;407    #endif
;;;408            ptcb->OSTCBDly  = 0;                                    /* Prevent OSTimeTick() from updating  */
;;;409            ptcb->OSTCBStat = OS_STAT_RDY;                          /* Prevent task from being resumed     */
;;;410            if (OSLockNesting < 255) {
;;;411                OSLockNesting++;
;;;412            }
;;;413            OS_EXIT_CRITICAL();                                     /* Enabling INT. ignores next instruc. */
;;;414            OS_Dummy();                                             /* ... Dummy ensures that INTs will be */
;;;415            OS_ENTER_CRITICAL();                                    /* ... disabled HERE!                  */
;;;416            if (OSLockNesting > 0) {
;;;417                OSLockNesting--;
;;;418            }
;;;419            OSTaskDelHook(ptcb);                                    /* Call user defined hook              */
;;;420            OSTaskCtr--;                                            /* One less task being managed         */
;;;421            OSTCBPrioTbl[prio] = (OS_TCB *)0;                       /* Clear old priority entry            */
;;;422            if (ptcb->OSTCBPrev == (OS_TCB *)0) {                   /* Remove from TCB chain               */
;;;423                ptcb->OSTCBNext->OSTCBPrev = (OS_TCB *)0;
;;;424                OSTCBList                  = ptcb->OSTCBNext;
;;;425            } else {
;;;426                ptcb->OSTCBPrev->OSTCBNext = ptcb->OSTCBNext;
;;;427                ptcb->OSTCBNext->OSTCBPrev = ptcb->OSTCBPrev;
;;;428            }
;;;429            ptcb->OSTCBNext = OSTCBFreeList;                        /* Return TCB to free TCB list         */
;;;430            OSTCBFreeList   = ptcb;
;;;431            OS_EXIT_CRITICAL();
;;;432            OS_Sched();                                             /* Find new highest priority task      */
;;;433            return (OS_NO_ERR);
;;;434        }
;;;435        OS_EXIT_CRITICAL();
;;;436        return (OS_TASK_DEL_ERR);
;;;437    }
000400  e12fff1e          BX       lr
                  |L1.1028|
000404  e354000c          CMP      r4,#0xc               ;378
000408  1a000001          BNE      |L1.1044|             ;378
00040c  e3a0003d          MOV      r0,#0x3d              ;379
000410  eafffff9          B        |L1.1020|             ;379
                  |L1.1044|
000414  e354000c          CMP      r4,#0xc               ;381
000418  ba000003          BLT      |L1.1068|             ;381
00041c  e35400ff          CMP      r4,#0xff              ;381
000420  0a000001          BEQ      |L1.1068|             ;381
000424  e3a0002a          MOV      r0,#0x2a              ;382
000428  eafffff3          B        |L1.1020|             ;382
                  |L1.1068|
00042c  ef000002          SVC      0x2  ; formerly SWI   ;385
000430  e35400ff          CMP      r4,#0xff              ;386
000434  1a000002          BNE      |L1.1092|             ;386
000438  e59f0524          LDR      r0,|L1.2404|          ;387
00043c  e5900000          LDR      r0,[r0,#0]            ;387  ; OSTCBCur
000440  e5d0402d          LDRB     r4,[r0,#0x2d]         ;387
                  |L1.1092|
000444  e59f0510          LDR      r0,|L1.2396|          ;389
000448  e7906104          LDR      r6,[r0,r4,LSL #2]     ;389
00044c  e3560000          CMP      r6,#0                 ;390
000450  0a000060          BEQ      |L1.1496|             ;390
000454  e5d6002f          LDRB     r0,[r6,#0x2f]         ;391
000458  e59f1508          LDR      r1,|L1.2408|          ;391
00045c  e7d10000          LDRB     r0,[r1,r0]            ;391
000460  e5d61030          LDRB     r1,[r6,#0x30]         ;391
000464  e1c00001          BIC      r0,r0,r1              ;391
000468  e21000ff          ANDS     r0,r0,#0xff           ;391
00046c  e5d6102f          LDRB     r1,[r6,#0x2f]         ;391
000470  e59f24f0          LDR      r2,|L1.2408|          ;391
000474  e7c20001          STRB     r0,[r2,r1]            ;391
000478  1a000005          BNE      |L1.1172|             ;391
00047c  e5d60031          LDRB     r0,[r6,#0x31]         ;392
000480  e59f14e4          LDR      r1,|L1.2412|          ;392
000484  e5d11000          LDRB     r1,[r1,#0]            ;392  ; OSRdyGrp
000488  e1c10000          BIC      r0,r1,r0              ;392
00048c  e59f14d8          LDR      r1,|L1.2412|          ;392
000490  e5c10000          STRB     r0,[r1,#0]            ;392  ; OSRdyGrp
                  |L1.1172|
000494  e596501c          LDR      r5,[r6,#0x1c]         ;395
000498  e3550000          CMP      r5,#0                 ;396
00049c  0a00000d          BEQ      |L1.1240|             ;396
0004a0  e5d6002f          LDRB     r0,[r6,#0x2f]         ;397
0004a4  e2851008          ADD      r1,r5,#8              ;397
0004a8  e7d10000          LDRB     r0,[r1,r0]            ;397
0004ac  e5d61030          LDRB     r1,[r6,#0x30]         ;397
0004b0  e1c00001          BIC      r0,r0,r1              ;397
0004b4  e21000ff          ANDS     r0,r0,#0xff           ;397
0004b8  e5d6102f          LDRB     r1,[r6,#0x2f]         ;397
0004bc  e2852008          ADD      r2,r5,#8              ;397
0004c0  e7c20001          STRB     r0,[r2,r1]            ;397
0004c4  1a000003          BNE      |L1.1240|             ;397
0004c8  e5d50001          LDRB     r0,[r5,#1]            ;398
0004cc  e5d61031          LDRB     r1,[r6,#0x31]         ;398
0004d0  e1c00001          BIC      r0,r0,r1              ;398
0004d4  e5c50001          STRB     r0,[r5,#1]            ;398
                  |L1.1240|
0004d8  e5967024          LDR      r7,[r6,#0x24]         ;403
0004dc  e3570000          CMP      r7,#0                 ;404
0004e0  0a000001          BEQ      |L1.1260|             ;404
0004e4  e1a00007          MOV      r0,r7                 ;405
0004e8  ebfffffe          BL       OS_FlagUnlink         ;405
                  |L1.1260|
0004ec  e3a00000          MOV      r0,#0                 ;408
0004f0  e1c602ba          STRH     r0,[r6,#0x2a]         ;408
0004f4  e5c6002c          STRB     r0,[r6,#0x2c]         ;409
0004f8  e59f047c          LDR      r0,|L1.2428|          ;410
0004fc  e5d00000          LDRB     r0,[r0,#0]            ;410  ; OSLockNesting
000500  e35000ff          CMP      r0,#0xff              ;410
000504  aa000004          BGE      |L1.1308|             ;410
000508  e59f046c          LDR      r0,|L1.2428|          ;411
00050c  e5d00000          LDRB     r0,[r0,#0]            ;411  ; OSLockNesting
000510  e2800001          ADD      r0,r0,#1              ;411
000514  e59f1460          LDR      r1,|L1.2428|          ;411
000518  e5c10000          STRB     r0,[r1,#0]            ;411  ; OSLockNesting
                  |L1.1308|
00051c  ef000003          SVC      0x3  ; formerly SWI   ;413
000520  ebfffffe          BL       OS_Dummy              ;414
000524  ef000002          SVC      0x2  ; formerly SWI   ;415
000528  e59f044c          LDR      r0,|L1.2428|          ;416
00052c  e5d00000          LDRB     r0,[r0,#0]            ;416  ; OSLockNesting
000530  e3500000          CMP      r0,#0                 ;416
000534  da000004          BLE      |L1.1356|             ;416
000538  e59f043c          LDR      r0,|L1.2428|          ;417
00053c  e5d00000          LDRB     r0,[r0,#0]            ;417  ; OSLockNesting
000540  e2400001          SUB      r0,r0,#1              ;417
000544  e59f1430          LDR      r1,|L1.2428|          ;417
000548  e5c10000          STRB     r0,[r1,#0]            ;417  ; OSLockNesting
                  |L1.1356|
00054c  e1a00006          MOV      r0,r6                 ;419
000550  ebfffffe          BL       OSTaskDelHook         ;419
000554  e59f0414          LDR      r0,|L1.2416|          ;420
000558  e5d00000          LDRB     r0,[r0,#0]            ;420  ; OSTaskCtr
00055c  e2400001          SUB      r0,r0,#1              ;420
000560  e59f1408          LDR      r1,|L1.2416|          ;420
000564  e5c10000          STRB     r0,[r1,#0]            ;420  ; OSTaskCtr
000568  e3a00000          MOV      r0,#0                 ;421
00056c  e59f13e8          LDR      r1,|L1.2396|          ;421
000570  e7810104          STR      r0,[r1,r4,LSL #2]     ;421
000574  e5960018          LDR      r0,[r6,#0x18]         ;422
000578  e3500000          CMP      r0,#0                 ;422
00057c  1a000006          BNE      |L1.1436|             ;422
000580  e3a00000          MOV      r0,#0                 ;423
000584  e5961014          LDR      r1,[r6,#0x14]         ;423
000588  e5810018          STR      r0,[r1,#0x18]         ;423
00058c  e59f13ec          LDR      r1,|L1.2432|          ;424
000590  e5960014          LDR      r0,[r6,#0x14]         ;424
000594  e5810000          STR      r0,[r1,#0]            ;424  ; OSTCBList
000598  ea000005          B        |L1.1460|             ;424
                  |L1.1436|
00059c  e2861014          ADD      r1,r6,#0x14           ;426
0005a0  e8910003          LDM      r1,{r0,r1}            ;426
0005a4  e5810014          STR      r0,[r1,#0x14]         ;426
0005a8  e5960018          LDR      r0,[r6,#0x18]         ;427
0005ac  e5961014          LDR      r1,[r6,#0x14]         ;427
0005b0  e5810018          STR      r0,[r1,#0x18]         ;427
                  |L1.1460|
0005b4  e59f03c8          LDR      r0,|L1.2436|          ;429
0005b8  e5900000          LDR      r0,[r0,#0]            ;429  ; OSTCBFreeList
0005bc  e5860014          STR      r0,[r6,#0x14]         ;429
0005c0  e59f03bc          LDR      r0,|L1.2436|          ;430
0005c4  e5806000          STR      r6,[r0,#0]            ;430  ; OSTCBFreeList
0005c8  ef000003          SVC      0x3  ; formerly SWI   ;431
0005cc  ebfffffe          BL       OS_Sched              ;432
0005d0  e3a00000          MOV      r0,#0                 ;433
0005d4  eaffff88          B        |L1.1020|             ;433
                  |L1.1496|
0005d8  ef000003          SVC      0x3  ; formerly SWI   ;435
0005dc  e3a0003c          MOV      r0,#0x3c              ;436
0005e0  eaffff85          B        |L1.1020|             ;436
                          ENDP

                  OSTaskDelReq PROC
;;;486    INT8U  OSTaskDelReq (INT8U prio)
;;;487    {
0005e4  e92d41f0          PUSH     {r4-r8,lr}
0005e8  e1a04000          MOV      r4,r0
;;;488    #if OS_CRITICAL_METHOD == 3                      /* Allocate storage for CPU status register           */
;;;489        OS_CPU_SR  cpu_sr;
;;;490    #endif
;;;491        BOOLEAN    stat;
;;;492        INT8U      err;
;;;493        OS_TCB    *ptcb;
;;;494    
;;;495    
;;;496    #if OS_ARG_CHK_EN > 0
;;;497        if (prio == OS_IDLE_PRIO) {                                 /* Not allowed to delete idle task     */
0005ec  e354000c          CMP      r4,#0xc
0005f0  1a000002          BNE      |L1.1536|
;;;498            return (OS_TASK_DEL_IDLE);

⌨️ 快捷键说明

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