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

📄 os_task.txt

📁 lpc2478开发板基于IAR编译器移植ucos实验例程
💻 TXT
📖 第 1 页 / 共 5 页
字号:
                  |L1.1176|
000498  e8bd47f0          POP      {r4-r10,lr}
;;;409        }
;;;410        if (prio == OS_TASK_IDLE_PRIO) {                            /* Not allowed to delete idle task     */
;;;411            return (OS_ERR_TASK_DEL_IDLE);
;;;412        }
;;;413    #if OS_ARG_CHK_EN > 0
;;;414        if (prio >= OS_LOWEST_PRIO) {                               /* Task priority valid ?               */
;;;415            if (prio != OS_PRIO_SELF) {
;;;416                return (OS_ERR_PRIO_INVALID);
;;;417            }
;;;418        }
;;;419    #endif
;;;420    
;;;421        OS_ENTER_CRITICAL();
;;;422        if (prio == OS_PRIO_SELF) {                                 /* See if requesting to delete self    */
;;;423            prio = OSTCBCur->OSTCBPrio;                             /* Set priority to delete to current   */
;;;424        }
;;;425        ptcb = OSTCBPrioTbl[prio];
;;;426        if (ptcb == (OS_TCB *)0) {                                  /* Task to delete must exist           */
;;;427            OS_EXIT_CRITICAL();
;;;428            return (OS_ERR_TASK_NOT_EXIST);
;;;429        }
;;;430        if (ptcb == (OS_TCB *)1) {                                  /* Must not be assigned to Mutex       */
;;;431            OS_EXIT_CRITICAL();
;;;432            return (OS_ERR_TASK_DEL);
;;;433        }
;;;434        y            =  ptcb->OSTCBY;
;;;435        OSRdyTbl[y] &= ~ptcb->OSTCBBitX;
;;;436        if (OSRdyTbl[y] == 0) {                                     /* Make task not ready                 */
;;;437            OSRdyGrp &= ~ptcb->OSTCBBitY;
;;;438        }
;;;439        
;;;440    #if OS_EVENT_EN
;;;441        pevent = ptcb->OSTCBEventPtr;
;;;442        if (pevent != (OS_EVENT *)0) {                              /* If task is waiting on event         */
;;;443            pevent->OSEventTbl[y] &= ~ptcb->OSTCBBitX;
;;;444            if (pevent->OSEventTbl[y] == 0) {                       /* ... remove task from ...            */
;;;445                pevent->OSEventGrp &= ~ptcb->OSTCBBitY;             /* ... event ctrl block                */
;;;446            }
;;;447        }
;;;448    #endif
;;;449    
;;;450    #if (OS_VERSION >= 251) && (OS_FLAG_EN > 0) && (OS_MAX_FLAGS > 0)
;;;451        pnode = ptcb->OSTCBFlagNode;
;;;452        if (pnode != (OS_FLAG_NODE *)0) {                           /* If task is waiting on event flag    */
;;;453            OS_FlagUnlink(pnode);                                   /* Remove from wait list               */
;;;454        }
;;;455    #endif
;;;456    
;;;457        ptcb->OSTCBDly      = 0;                                    /* Prevent OSTimeTick() from updating  */
;;;458        ptcb->OSTCBStat     = OS_STAT_RDY;                          /* Prevent task from being resumed     */
;;;459        ptcb->OSTCBStatPend = OS_STAT_PEND_OK;
;;;460        if (OSLockNesting < 255u) {                                 /* Make sure we don't context switch   */
;;;461            OSLockNesting++;
;;;462        }
;;;463        OS_EXIT_CRITICAL();                                         /* Enabling INT. ignores next instruc. */
;;;464        OS_Dummy();                                                 /* ... Dummy ensures that INTs will be */
;;;465        OS_ENTER_CRITICAL();                                        /* ... disabled HERE!                  */
;;;466        if (OSLockNesting > 0) {                                    /* Remove context switch lock          */
;;;467            OSLockNesting--;
;;;468        }
;;;469        OSTaskDelHook(ptcb);                                        /* Call user defined hook              */
;;;470        OSTaskCtr--;                                                /* One less task being managed         */
;;;471        OSTCBPrioTbl[prio] = (OS_TCB *)0;                           /* Clear old priority entry            */
;;;472        if (ptcb->OSTCBPrev == (OS_TCB *)0) {                       /* Remove from TCB chain               */
;;;473            ptcb->OSTCBNext->OSTCBPrev = (OS_TCB *)0;
;;;474            OSTCBList                  = ptcb->OSTCBNext;
;;;475        } else {
;;;476            ptcb->OSTCBPrev->OSTCBNext = ptcb->OSTCBNext;
;;;477            ptcb->OSTCBNext->OSTCBPrev = ptcb->OSTCBPrev;
;;;478        }
;;;479        ptcb->OSTCBNext   = OSTCBFreeList;                          /* Return TCB to free TCB list         */
;;;480        OSTCBFreeList     = ptcb;
;;;481    #if OS_TASK_NAME_SIZE > 1
;;;482        ptcb->OSTCBTaskName[0] = '?';                               /* Unknown name                        */
;;;483        ptcb->OSTCBTaskName[1] = OS_ASCII_NUL;
;;;484    #endif
;;;485        OS_EXIT_CRITICAL();
;;;486        if (OSRunning == OS_TRUE) {
;;;487            OS_Sched();                                             /* Find new highest priority task      */
;;;488        }
;;;489        return (OS_ERR_NONE);
;;;490    }
00049c  e12fff1e          BX       lr
                  |L1.1184|
0004a0  e354001f          CMP      r4,#0x1f
0004a4  1a000001          BNE      |L1.1200|
0004a8  e3a0003e          MOV      r0,#0x3e
0004ac  eafffff9          B        |L1.1176|
                  |L1.1200|
0004b0  e354001f          CMP      r4,#0x1f
0004b4  ba000003          BLT      |L1.1224|
0004b8  e35400ff          CMP      r4,#0xff
0004bc  0a000001          BEQ      |L1.1224|
0004c0  e3a0002a          MOV      r0,#0x2a
0004c4  eafffff3          B        |L1.1176|
                  |L1.1224|
0004c8  ebfffffe          BL       OS_CPU_SR_Save
0004cc  e1a09000          MOV      r9,r0
0004d0  e35400ff          CMP      r4,#0xff
0004d4  1a000002          BNE      |L1.1252|
0004d8  e59f0878          LDR      r0,|L1.3416|
0004dc  e5900000          LDR      r0,[r0,#0]  ; OSTCBCur
0004e0  e5d0402e          LDRB     r4,[r0,#0x2e]
                  |L1.1252|
0004e4  e59f0868          LDR      r0,|L1.3412|
0004e8  e7907104          LDR      r7,[r0,r4,LSL #2]
0004ec  e3570000          CMP      r7,#0
0004f0  1a000003          BNE      |L1.1284|
0004f4  e1a00009          MOV      r0,r9
0004f8  ebfffffe          BL       OS_CPU_SR_Restore
0004fc  e3a00043          MOV      r0,#0x43
000500  eaffffe4          B        |L1.1176|
                  |L1.1284|
000504  e3570001          CMP      r7,#1
000508  1a000003          BNE      |L1.1308|
00050c  e1a00009          MOV      r0,r9
000510  ebfffffe          BL       OS_CPU_SR_Restore
000514  e3a0003d          MOV      r0,#0x3d
000518  eaffffde          B        |L1.1176|
                  |L1.1308|
00051c  e5d78030          LDRB     r8,[r7,#0x30]
000520  e59f0834          LDR      r0,|L1.3420|
000524  e7d00008          LDRB     r0,[r0,r8]
000528  e5d71031          LDRB     r1,[r7,#0x31]
00052c  e1c00001          BIC      r0,r0,r1
000530  e59f1824          LDR      r1,|L1.3420|
000534  e7c10008          STRB     r0,[r1,r8]
000538  e2810000          ADD      r0,r1,#0
00053c  e7d00008          LDRB     r0,[r0,r8]
000540  e3500000          CMP      r0,#0
000544  1a000005          BNE      |L1.1376|
000548  e5d70032          LDRB     r0,[r7,#0x32]
00054c  e59f180c          LDR      r1,|L1.3424|
000550  e5d11000          LDRB     r1,[r1,#0]  ; OSRdyGrp
000554  e1c10000          BIC      r0,r1,r0
000558  e59f1800          LDR      r1,|L1.3424|
00055c  e5c10000          STRB     r0,[r1,#0]  ; OSRdyGrp
                  |L1.1376|
000560  e597501c          LDR      r5,[r7,#0x1c]
000564  e3550000          CMP      r5,#0
000568  0a00000d          BEQ      |L1.1444|
00056c  e285000b          ADD      r0,r5,#0xb
000570  e7d00008          LDRB     r0,[r0,r8]
000574  e5d71031          LDRB     r1,[r7,#0x31]
000578  e1c00001          BIC      r0,r0,r1
00057c  e285100b          ADD      r1,r5,#0xb
000580  e7c10008          STRB     r0,[r1,r8]
000584  e285000b          ADD      r0,r5,#0xb
000588  e7d00008          LDRB     r0,[r0,r8]
00058c  e3500000          CMP      r0,#0
000590  1a000003          BNE      |L1.1444|
000594  e5d5000a          LDRB     r0,[r5,#0xa]
000598  e5d71032          LDRB     r1,[r7,#0x32]
00059c  e1c00001          BIC      r0,r0,r1
0005a0  e5c5000a          STRB     r0,[r5,#0xa]
                  |L1.1444|
0005a4  e5976024          LDR      r6,[r7,#0x24]
0005a8  e3560000          CMP      r6,#0
0005ac  0a000001          BEQ      |L1.1464|
0005b0  e1a00006          MOV      r0,r6
0005b4  ebfffffe          BL       OS_FlagUnlink
                  |L1.1464|
0005b8  e3a00000          MOV      r0,#0
0005bc  e1c702ba          STRH     r0,[r7,#0x2a]
0005c0  e5c7002c          STRB     r0,[r7,#0x2c]
0005c4  e5c7002d          STRB     r0,[r7,#0x2d]
0005c8  e59f079c          LDR      r0,|L1.3436|
0005cc  e5d00000          LDRB     r0,[r0,#0]  ; OSLockNesting
0005d0  e35000ff          CMP      r0,#0xff
0005d4  2a000004          BCS      |L1.1516|
0005d8  e59f078c          LDR      r0,|L1.3436|
0005dc  e5d00000          LDRB     r0,[r0,#0]  ; OSLockNesting
0005e0  e2800001          ADD      r0,r0,#1
0005e4  e59f1780          LDR      r1,|L1.3436|
0005e8  e5c10000          STRB     r0,[r1,#0]  ; OSLockNesting
                  |L1.1516|
0005ec  e1a00009          MOV      r0,r9
0005f0  ebfffffe          BL       OS_CPU_SR_Restore
0005f4  ebfffffe          BL       OS_Dummy
0005f8  ebfffffe          BL       OS_CPU_SR_Save
0005fc  e1a09000          MOV      r9,r0
000600  e59f0764          LDR      r0,|L1.3436|
000604  e5d00000          LDRB     r0,[r0,#0]  ; OSLockNesting
000608  e3500000          CMP      r0,#0
00060c  da000004          BLE      |L1.1572|
000610  e59f0754          LDR      r0,|L1.3436|
000614  e5d00000          LDRB     r0,[r0,#0]  ; OSLockNesting
000618  e2400001          SUB      r0,r0,#1
00061c  e59f1748          LDR      r1,|L1.3436|
000620  e5c10000          STRB     r0,[r1,#0]  ; OSLockNesting
                  |L1.1572|
000624  e1a00007          MOV      r0,r7
000628  ebfffffe          BL       OSTaskDelHook
00062c  e59f073c          LDR      r0,|L1.3440|
000630  e5d00000          LDRB     r0,[r0,#0]  ; OSTaskCtr
000634  e2400001          SUB      r0,r0,#1
000638  e59f1730          LDR      r1,|L1.3440|
00063c  e5c10000          STRB     r0,[r1,#0]  ; OSTaskCtr
000640  e3a00000          MOV      r0,#0
000644  e59f1708          LDR      r1,|L1.3412|
000648  e7810104          STR      r0,[r1,r4,LSL #2]
00064c  e5970018          LDR      r0,[r7,#0x18]
000650  e3500000          CMP      r0,#0
000654  1a000006          BNE      |L1.1652|
000658  e3a00000          MOV      r0,#0
00065c  e5971014          LDR      r1,[r7,#0x14]
000660  e5810018          STR      r0,[r1,#0x18]
000664  e59f1708          LDR      r1,|L1.3444|
000668  e5970014          LDR      r0,[r7,#0x14]
00066c  e5810000          STR      r0,[r1,#0]  ; OSTCBList
000670  ea000005          B        |L1.1676|
                  |L1.1652|
000674  e2871014          ADD      r1,r7,#0x14
000678  e8910003          LDM      r1,{r0,r1}
00067c  e5810014          STR      r0,[r1,#0x14]
000680  e5970018          LDR      r0,[r7,#0x18]
000684  e5971014          LDR      r1,[r7,#0x14]
000688  e5810018          STR      r0,[r1,#0x18]
                  |L1.1676|
00068c  e59f06e4          LDR      r0,|L1.3448|
000690  e5900000          LDR      r0,[r0,#0]  ; OSTCBFreeList
000694  e5870014          STR      r0,[r7,#0x14]
000698  e59f06d8          LDR      r0,|L1.3448|
00069c  e5807000          STR      r7,[r0,#0]  ; OSTCBFreeList
0006a0  e3a0003f          MOV      r0,#0x3f
0006a4  e5c70048          STRB     r0,[r7,#0x48]
0006a8  e3a00000          MOV      r0,#0
0006ac  e5c70049          STRB     r0,[r7,#0x49]
0006b0  e1a00009          MOV      r0,r9
0006b4  ebfffffe          BL       OS_CPU_SR_Restore
0006b8  e59f06a4          LDR      r0,|L1.3428|
0006bc  e5d00000          LDRB     r0,[r0,#0]  ; OSRunning
0006c0  e3500001          CMP      r0,#1
0006c4  1a000000          BNE      |L1.1740|
0006c8  ebfffffe          BL       OS_Sched
                  |L1.1740|
0006cc  e3a00000          MOV      r0,#0
0006d0  eaffff70          B        |L1.1176|
                          ENDP

                  OSTaskDelReq PROC
;;;540    INT8U  OSTaskDelReq (INT8U prio)
;;;541    {
0006d4  e92d41f0          PUSH     {r4-r8,lr}
0006d8  e1a04000          MOV      r4,r0
;;;542        INT8U      stat;
;;;543        OS_TCB    *ptcb;
;;;544    #if OS_CRITICAL_METHOD == 3                      /* Allocate storage for CPU status register           */
;;;545        OS_CPU_SR  cpu_sr = 0;
0006dc  e3a07000          MOV      r7,#0
;;;546    #endif
;;;547    
;;;548    
;;;549    
;;;550        if (prio == OS_TASK_IDLE_PRIO) {                            /* Not allowed to delete idle task     */
0006e0  e354001f          CMP      r4,#0x1f
0006e4  1a000002          BNE      |L1.1780|
;;;551            return (OS_ERR_TASK_DEL_IDLE);
0006e8  e3a0003e          MOV      r0,#0x3e
                  |L1.1772|
0006ec  e8bd41f0          POP      {r4-r8,lr}
;;;552        }
;;;553    #if OS_ARG_CHK_EN > 0
;;;554        if (prio >= OS_LOWEST_PRIO) {                               /* Task priority valid ?               */
;;;555            if (prio != OS_PRIO_SELF) {
;;;556                return (OS_ERR_PRIO_INVALID);
;;;557            }
;;;558        }
;;;559    #endif
;;;560        if (prio == OS_PRIO_SELF) {                                 /* See if a task is requesting to ...  */
;;;561            OS_ENTER_CRITICAL();                                    /* ... this task to delete itself      */
;;;562            stat = OSTCBCur->OSTCBDelReq;                           /* Return request status to caller     */
;;;563            OS_EXIT_CRITICAL();
;;;564            return (stat);

⌨️ 快捷键说明

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