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

📄 os_task.txt

📁 ucos2 is a file system for embedded applications which can be used on any media, for which you can p
💻 TXT
📖 第 1 页 / 共 5 页
字号:
;;;450    #endif
;;;451    
;;;452    #if (OS_FLAG_EN > 0) && (OS_MAX_FLAGS > 0)
;;;453        pnode = ptcb->OSTCBFlagNode;
;;;454        if (pnode != (OS_FLAG_NODE *)0) {                           /* If task is waiting on event flag    */
;;;455            OS_FlagUnlink(pnode);                                   /* Remove from wait list               */
;;;456        }
;;;457    #endif
;;;458    
;;;459        ptcb->OSTCBDly      = 0;                                    /* Prevent OSTimeTick() from updating  */
;;;460        ptcb->OSTCBStat     = OS_STAT_RDY;                          /* Prevent task from being resumed     */
;;;461        ptcb->OSTCBStatPend = OS_STAT_PEND_OK;
;;;462        if (OSLockNesting < 255u) {                                 /* Make sure we don't context switch   */
;;;463            OSLockNesting++;
;;;464        }
;;;465        OS_EXIT_CRITICAL();                                         /* Enabling INT. ignores next instruc. */
;;;466        OS_Dummy();                                                 /* ... Dummy ensures that INTs will be */
;;;467        OS_ENTER_CRITICAL();                                        /* ... disabled HERE!                  */
;;;468        if (OSLockNesting > 0) {                                    /* Remove context switch lock          */
;;;469            OSLockNesting--;
;;;470        }
;;;471        OSTaskDelHook(ptcb);                                        /* Call user defined hook              */
;;;472        OSTaskCtr--;                                                /* One less task being managed         */
;;;473        OSTCBPrioTbl[prio] = (OS_TCB *)0;                           /* Clear old priority entry            */
;;;474        if (ptcb->OSTCBPrev == (OS_TCB *)0) {                       /* Remove from TCB chain               */
;;;475            ptcb->OSTCBNext->OSTCBPrev = (OS_TCB *)0;
;;;476            OSTCBList                  = ptcb->OSTCBNext;
;;;477        } else {
;;;478            ptcb->OSTCBPrev->OSTCBNext = ptcb->OSTCBNext;
;;;479            ptcb->OSTCBNext->OSTCBPrev = ptcb->OSTCBPrev;
;;;480        }
;;;481        ptcb->OSTCBNext   = OSTCBFreeList;                          /* Return TCB to free TCB list         */
;;;482        OSTCBFreeList     = ptcb;
;;;483    #if OS_TASK_NAME_SIZE > 1
;;;484        ptcb->OSTCBTaskName[0] = '?';                               /* Unknown name                        */
;;;485        ptcb->OSTCBTaskName[1] = OS_ASCII_NUL;
;;;486    #endif
;;;487        OS_EXIT_CRITICAL();
;;;488        if (OSRunning == OS_TRUE) {
;;;489            OS_Sched();                                             /* Find new highest priority task      */
;;;490        }
;;;491        return (OS_ERR_NONE);
;;;492    }
000398  e12fff1e          BX       lr
                  |L1.924|
00039c  e3540001          CMP      r4,#1                 ;432
0003a0  1a000003          BNE      |L1.948|
0003a4  e1a00006          MOV      r0,r6                 ;433
0003a8  ebfffffe          BL       OS_CPU_SR_Restore
0003ac  e3a0003d          MOV      r0,#0x3d              ;434
0003b0  eafffff7          B        |L1.916|
                  |L1.948|
0003b4  e5d42030          LDRB     r2,[r4,#0x30]         ;436
0003b8  e59f059c          LDR      r0,|L1.2396|
0003bc  e5d43031          LDRB     r3,[r4,#0x31]         ;437
0003c0  e7d01002          LDRB     r1,[r0,r2]            ;437
0003c4  e1c11003          BIC      r1,r1,r3              ;437
0003c8  e7c01002          STRB     r1,[r0,r2]            ;437
0003cc  e7d00002          LDRB     r0,[r0,r2]            ;438
0003d0  e3500000          CMP      r0,#0                 ;438
0003d4  059f0584          LDREQ    r0,|L1.2400|
0003d8  05d41032          LDRBEQ   r1,[r4,#0x32]         ;439
0003dc  05d03000          LDRBEQ   r3,[r0,#0]            ;439  ; OSRdyGrp
0003e0  01c31001          BICEQ    r1,r3,r1              ;439
0003e4  05c01000          STRBEQ   r1,[r0,#0]            ;439  ; OSRdyGrp
0003e8  e594101c          LDR      r1,[r4,#0x1c]         ;443
0003ec  e3510000          CMP      r1,#0                 ;444
0003f0  0a000009          BEQ      |L1.1052|
0003f4  e0810002          ADD      r0,r1,r2              ;445
0003f8  e5d0200b          LDRB     r2,[r0,#0xb]          ;445
0003fc  e5d43031          LDRB     r3,[r4,#0x31]         ;445
000400  e1c22003          BIC      r2,r2,r3              ;445
000404  e31200ff          TST      r2,#0xff              ;446
000408  e5c0200b          STRB     r2,[r0,#0xb]          ;445
00040c  05d1000a          LDRBEQ   r0,[r1,#0xa]          ;447
000410  05d42032          LDRBEQ   r2,[r4,#0x32]         ;447
000414  01c00002          BICEQ    r0,r0,r2              ;447
000418  05c1000a          STRBEQ   r0,[r1,#0xa]          ;447
                  |L1.1052|
00041c  e5940024          LDR      r0,[r4,#0x24]         ;453
000420  e3500000          CMP      r0,#0                 ;454
000424  1bfffffe          BLNE     OS_FlagUnlink
000428  e3a08000          MOV      r8,#0                 ;459
00042c  e1c482ba          STRH     r8,[r4,#0x2a]         ;459
000430  e59f9534          LDR      r9,|L1.2412|
000434  e5c4802c          STRB     r8,[r4,#0x2c]         ;460
000438  e5c4802d          STRB     r8,[r4,#0x2d]         ;461
00043c  e5d90000          LDRB     r0,[r9,#0]            ;462  ; OSLockNesting
000440  e35000ff          CMP      r0,#0xff              ;462
000444  32800001          ADDCC    r0,r0,#1              ;463
000448  35c90000          STRBCC   r0,[r9,#0]            ;463  ; OSLockNesting
00044c  e1a00006          MOV      r0,r6                 ;465
000450  ebfffffe          BL       OS_CPU_SR_Restore
000454  ebfffffe          BL       OS_Dummy
000458  ebfffffe          BL       OS_CPU_SR_Save
00045c  e5d91000          LDRB     r1,[r9,#0]            ;468  ; OSLockNesting
000460  e1a06000          MOV      r6,r0                 ;467
000464  e3510000          CMP      r1,#0                 ;468
000468  12410001          SUBNE    r0,r1,#1              ;469
00046c  15c90000          STRBNE   r0,[r9,#0]            ;469  ; OSLockNesting
000470  e1a00004          MOV      r0,r4                 ;471
000474  ebfffffe          BL       OSTaskDelHook
000478  e59f04f0          LDR      r0,|L1.2416|
00047c  e5d01000          LDRB     r1,[r0,#0]            ;472  ; OSTaskCtr
000480  e2411001          SUB      r1,r1,#1              ;472
000484  e5c01000          STRB     r1,[r0,#0]            ;472  ; OSTaskCtr
000488  e7878105          STR      r8,[r7,r5,LSL #2]     ;473
00048c  e5941018          LDR      r1,[r4,#0x18]         ;474
000490  e5940014          LDR      r0,[r4,#0x14]         ;475
000494  e3510000          CMP      r1,#0                 ;474
000498  15810014          STRNE    r0,[r1,#0x14]         ;479
00049c  15940018          LDRNE    r0,[r4,#0x18]         ;479
0004a0  15941014          LDRNE    r1,[r4,#0x14]         ;479
0004a4  15810018          STRNE    r0,[r1,#0x18]         ;479
0004a8  05808018          STREQ    r8,[r0,#0x18]         ;476
0004ac  059f14c0          LDREQ    r1,|L1.2420|
0004b0  05940014          LDREQ    r0,[r4,#0x14]         ;476
0004b4  05810000          STREQ    r0,[r1,#0]            ;476  ; OSTCBList
0004b8  e59f04b8          LDR      r0,|L1.2424|
0004bc  e5901000          LDR      r1,[r0,#0]            ;481  ; OSTCBFreeList
0004c0  e5841014          STR      r1,[r4,#0x14]         ;482
0004c4  e5804000          STR      r4,[r0,#0]            ;482  ; OSTCBFreeList
0004c8  e3a0003f          MOV      r0,#0x3f              ;484
0004cc  e5c40048          STRB     r0,[r4,#0x48]         ;484
0004d0  e1a00006          MOV      r0,r6                 ;487
0004d4  e5c48049          STRB     r8,[r4,#0x49]         ;485
0004d8  ebfffffe          BL       OS_CPU_SR_Restore
0004dc  e59f0480          LDR      r0,|L1.2404|
0004e0  e5d00000          LDRB     r0,[r0,#0]            ;488  ; OSRunning
0004e4  e3500001          CMP      r0,#1                 ;488
0004e8  0bfffffe          BLEQ     OS_Sched
0004ec  e3a00000          MOV      r0,#0                 ;491
0004f0  eaffffa7          B        |L1.916|
;;;493    #endif
                          ENDP

                  OSTaskDelReq PROC
;;;542    INT8U  OSTaskDelReq (INT8U prio)
;;;543    {
0004f4  e92d4010          PUSH     {r4,lr}
;;;544        INT8U      stat;
;;;545        OS_TCB    *ptcb;
;;;546    #if OS_CRITICAL_METHOD == 3                      /* Allocate storage for CPU status register           */
;;;547        OS_CPU_SR  cpu_sr = 0;
;;;548    #endif
;;;549    
;;;550    
;;;551    
;;;552        if (prio == OS_TASK_IDLE_PRIO) {                            /* Not allowed to delete idle task     */
0004f8  e350001f          CMP      r0,#0x1f
0004fc  e1a04000          MOV      r4,r0                 ;543
;;;553            return (OS_ERR_TASK_DEL_IDLE);
000500  03a0003e          MOVEQ    r0,#0x3e
000504  0a000007          BEQ      |L1.1320|
;;;554        }
;;;555    #if OS_ARG_CHK_EN > 0
;;;556        if (prio >= OS_LOWEST_PRIO) {                               /* Task priority valid ?               */
;;;557            if (prio != OS_PRIO_SELF) {
;;;558                return (OS_ERR_PRIO_INVALID);
;;;559            }
;;;560        }
;;;561    #endif
;;;562        if (prio == OS_PRIO_SELF) {                                 /* See if a task is requesting to ...  */
000508  e35400ff          CMP      r4,#0xff
00050c  1a000007          BNE      |L1.1328|
;;;563            OS_ENTER_CRITICAL();                                    /* ... this task to delete itself      */
000510  ebfffffe          BL       OS_CPU_SR_Save
;;;564            stat = OSTCBCur->OSTCBDelReq;                           /* Return request status to caller     */
000514  e59f143c          LDR      r1,|L1.2392|
000518  e5911000          LDR      r1,[r1,#0]  ; OSTCBCur
00051c  e5d14033          LDRB     r4,[r1,#0x33]
;;;565            OS_EXIT_CRITICAL();
000520  ebfffffe          BL       OS_CPU_SR_Restore
;;;566            return (stat);
000524  e1a00004          MOV      r0,r4
                  |L1.1320|
000528  e8bd4010          POP      {r4,lr}
;;;567        }
;;;568        OS_ENTER_CRITICAL();
;;;569        ptcb = OSTCBPrioTbl[prio];
;;;570        if (ptcb == (OS_TCB *)0) {                                  /* Task to delete must exist           */
;;;571            OS_EXIT_CRITICAL();
;;;572            return (OS_ERR_TASK_NOT_EXIST);                         /* Task must already be deleted        */
;;;573        }
;;;574        if (ptcb == OS_TCB_RESERVED) {                              /* Must NOT be assigned to a Mutex     */
;;;575            OS_EXIT_CRITICAL();
;;;576            return (OS_ERR_TASK_DEL);
;;;577        }
;;;578        ptcb->OSTCBDelReq = OS_ERR_TASK_DEL_REQ;                    /* Set flag indicating task to be DEL. */
;;;579        OS_EXIT_CRITICAL();
;;;580        return (OS_ERR_NONE);
;;;581    }
00052c  e12fff1e          BX       lr
                  |L1.1328|
000530  ebfffffe          BL       OS_CPU_SR_Save
000534  e59f1418          LDR      r1,|L1.2388|
000538  e7911104          LDR      r1,[r1,r4,LSL #2]     ;569
00053c  e3510000          CMP      r1,#0                 ;570
000540  1a000002          BNE      |L1.1360|
000544  ebfffffe          BL       OS_CPU_SR_Restore
000548  e3a00043          MOV      r0,#0x43              ;572
00054c  eafffff5          B        |L1.1320|
                  |L1.1360|
000550  e3510001          CMP      r1,#1                 ;574
000554  1a000002          BNE      |L1.1380|
000558  ebfffffe          BL       OS_CPU_SR_Restore
00055c  e3a0003d          MOV      r0,#0x3d              ;576
000560  eafffff0          B        |L1.1320|
                  |L1.1380|
000564  e3a0203f          MOV      r2,#0x3f              ;578
000568  e5c12033          STRB     r2,[r1,#0x33]         ;578
00056c  ebfffffe          BL       OS_CPU_SR_Restore
000570  e3a00000          MOV      r0,#0                 ;580
000574  eaffffeb          B        |L1.1320|
;;;582    #endif
                          ENDP

                  OSTaskNameGet PROC
;;;610    INT8U  OSTaskNameGet (INT8U prio, INT8U *pname, INT8U *perr)
;;;611    {
000578  e92d41f0          PUSH     {r4-r8,lr}
00057c  e1a06000          MOV      r6,r0
;;;612        OS_TCB    *ptcb;
;;;613        INT8U      len;
;;;614    #if OS_CRITICAL_METHOD == 3                              /* Allocate storage for CPU status register   */
;;;615        OS_CPU_SR  cpu_sr = 0;
;;;616    #endif
;;;617    
;;;618    
;;;619    
;;;620    #if OS_ARG_CHK_EN > 0
;;;621        if (perr == (INT8U *)0) {                            /* Validate 'perr'                            */
;;;622            return (0);
;;;623        }
;;;624        if (prio > OS_LOWEST_PRIO) {                         /* Task priority valid ?                      */
;;;625            if (prio != OS_PRIO_SELF) {
;;;626                *perr = OS_ERR_PRIO_INVALID;                 /* No                                         */
;;;627                return (0);
;;;628            }
;;;629        }
;;;630        if (pname == (INT8U *)0) {                           /* Is 'pname' a NULL pointer?                 */
;;;631            *perr = OS_ERR_PNAME_NULL;                       /* Yes                                        */
;;;632            return (0);
;;;633        }
;;;634    #endif
;;;635        if (OSIntNesting > 0) {                              /* See if trying to call from an ISR          */
000580  e59f03e0          LDR      r0,|L1.2408|
000584  e1a05002          MOV      r5,r2                 ;611
000588  e5d00000          LDRB     r0,[r0,#0]  ; OSIntNesting
00058c  e1a07001          MOV      r7,r1                 ;611
000590  e3500000          CMP      r0,#0
;;;636            *perr = OS_ERR_NAME_GET_ISR;
000594  13a00011          MOVNE    r0,#0x11

⌨️ 快捷键说明

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