📄 os_task.lst
字号:
413 #if OS_ARG_CHK_EN > 0
414 if (prio >= OS_LOWEST_PRIO) { /* Task priority valid ? */
\ ??OSTaskDel_2:
\ 00000034 1F0055E3 CMP R5,#+31
\ 00000038 0300003A BCC ??OSTaskDel_3
415 if (prio != OS_PRIO_SELF) {
\ 0000003C FF0055E3 CMP R5,#+255
\ 00000040 0100000A BEQ ??OSTaskDel_3
416 return (OS_ERR_PRIO_INVALID);
\ 00000044 2A00A0E3 MOV R0,#+42
\ 00000048 8C0000EA B ??OSTaskDel_1
417 }
418 }
419 #endif
420
421 OS_ENTER_CRITICAL();
\ ??OSTaskDel_3:
\ 0000004C ........ _BLF OS_CPU_SR_Save,??OS_CPU_SR_Save??rA
\ 00000050 0040B0E1 MOVS R4,R0
422 if (prio == OS_PRIO_SELF) { /* See if requesting to delete self */
\ 00000054 FF0055E3 CMP R5,#+255
\ 00000058 0200001A BNE ??OSTaskDel_4
423 prio = OSTCBCur->OSTCBPrio; /* Set priority to delete to current */
\ 0000005C ........ LDR R0,??DataTable58 ;; OSTCBCur
\ 00000060 000090E5 LDR R0,[R0, #+0]
\ 00000064 2E50D0E5 LDRB R5,[R0, #+46]
424 }
425 ptcb = OSTCBPrioTbl[prio];
\ ??OSTaskDel_4:
\ 00000068 0500B0E1 MOVS R0,R5
\ 0000006C 0410A0E3 MOV R1,#+4
\ 00000070 ........ LDR R2,??DataTable59 ;; OSTCBPrioTbl
\ 00000074 912020E0 MLA R0,R1,R0,R2
\ 00000078 006090E5 LDR R6,[R0, #+0]
426 if (ptcb == (OS_TCB *)0) { /* Task to delete must exist */
\ 0000007C 000056E3 CMP R6,#+0
\ 00000080 0300001A BNE ??OSTaskDel_5
427 OS_EXIT_CRITICAL();
\ 00000084 0400B0E1 MOVS R0,R4
\ 00000088 ........ _BLF OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rA
428 return (OS_ERR_TASK_NOT_EXIST);
\ 0000008C 4300A0E3 MOV R0,#+67
\ 00000090 7A0000EA B ??OSTaskDel_1
429 }
430 if (ptcb == (OS_TCB *)1) { /* Must not be assigned to Mutex */
\ ??OSTaskDel_5:
\ 00000094 010056E3 CMP R6,#+1
\ 00000098 0300001A BNE ??OSTaskDel_6
431 OS_EXIT_CRITICAL();
\ 0000009C 0400B0E1 MOVS R0,R4
\ 000000A0 ........ _BLF OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rA
432 return (OS_ERR_TASK_DEL);
\ 000000A4 3D00A0E3 MOV R0,#+61
\ 000000A8 740000EA B ??OSTaskDel_1
433 }
434 y = ptcb->OSTCBY;
\ ??OSTaskDel_6:
\ 000000AC 3000D6E5 LDRB R0,[R6, #+48]
435 OSRdyTbl[y] &= ~ptcb->OSTCBBitX;
\ 000000B0 0010B0E1 MOVS R1,R0
\ 000000B4 ........ LDR R2,??DataTable55 ;; OSRdyTbl
\ 000000B8 0030B0E1 MOVS R3,R0
\ 000000BC ........ LDR R12,??DataTable55 ;; OSRdyTbl
\ 000000C0 0C30D3E7 LDRB R3,[R3, +R12]
\ 000000C4 31C0D6E5 LDRB R12,[R6, #+49]
\ 000000C8 0C30D3E1 BICS R3,R3,R12
\ 000000CC 0230C1E7 STRB R3,[R1, +R2]
436 if (OSRdyTbl[y] == 0) { /* Make task not ready */
\ 000000D0 0010B0E1 MOVS R1,R0
\ 000000D4 ........ LDR R2,??DataTable55 ;; OSRdyTbl
\ 000000D8 0210D1E7 LDRB R1,[R1, +R2]
\ 000000DC 000051E3 CMP R1,#+0
\ 000000E0 0500001A BNE ??OSTaskDel_7
437 OSRdyGrp &= ~ptcb->OSTCBBitY;
\ 000000E4 ........ LDR R1,??DataTable57 ;; OSRdyGrp
\ 000000E8 ........ LDR R2,??DataTable57 ;; OSRdyGrp
\ 000000EC 0020D2E5 LDRB R2,[R2, #+0]
\ 000000F0 3230D6E5 LDRB R3,[R6, #+50]
\ 000000F4 0320D2E1 BICS R2,R2,R3
\ 000000F8 0020C1E5 STRB R2,[R1, #+0]
438 }
439
440 #if OS_EVENT_EN
441 pevent = ptcb->OSTCBEventPtr;
\ ??OSTaskDel_7:
\ 000000FC 1C1096E5 LDR R1,[R6, #+28]
442 if (pevent != (OS_EVENT *)0) { /* If task is waiting on event */
\ 00000100 000051E3 CMP R1,#+0
\ 00000104 0F00000A BEQ ??OSTaskDel_8
443 pevent->OSEventTbl[y] &= ~ptcb->OSTCBBitX;
\ 00000108 0020B0E1 MOVS R2,R0
\ 0000010C 012092E0 ADDS R2,R2,R1
\ 00000110 0030B0E1 MOVS R3,R0
\ 00000114 013093E0 ADDS R3,R3,R1
\ 00000118 0B30D3E5 LDRB R3,[R3, #+11]
\ 0000011C 31C0D6E5 LDRB R12,[R6, #+49]
\ 00000120 0C30D3E1 BICS R3,R3,R12
\ 00000124 0B30C2E5 STRB R3,[R2, #+11]
444 if (pevent->OSEventTbl[y] == 0) { /* ... remove task from ... */
\ 00000128 010090E0 ADDS R0,R0,R1
\ 0000012C 0B00D0E5 LDRB R0,[R0, #+11]
\ 00000130 000050E3 CMP R0,#+0
\ 00000134 0300001A BNE ??OSTaskDel_8
445 pevent->OSEventGrp &= ~ptcb->OSTCBBitY; /* ... event ctrl block */
\ 00000138 0A00D1E5 LDRB R0,[R1, #+10]
\ 0000013C 3220D6E5 LDRB R2,[R6, #+50]
\ 00000140 0200D0E1 BICS R0,R0,R2
\ 00000144 0A00C1E5 STRB R0,[R1, #+10]
446 }
447 }
448 #endif
449
450 #if (OS_VERSION >= 251) && (OS_FLAG_EN > 0) && (OS_MAX_FLAGS > 0)
451 pnode = ptcb->OSTCBFlagNode;
\ ??OSTaskDel_8:
\ 00000148 240096E5 LDR R0,[R6, #+36]
452 if (pnode != (OS_FLAG_NODE *)0) { /* If task is waiting on event flag */
\ 0000014C 000050E3 CMP R0,#+0
\ 00000150 0000000A BEQ ??OSTaskDel_9
453 OS_FlagUnlink(pnode); /* Remove from wait list */
\ 00000154 ........ _BLF OS_FlagUnlink,??OS_FlagUnlink??rA
454 }
455 #endif
456
457 ptcb->OSTCBDly = 0; /* Prevent OSTimeTick() from updating */
\ ??OSTaskDel_9:
\ 00000158 0000A0E3 MOV R0,#+0
\ 0000015C BA02C6E1 STRH R0,[R6, #+42]
458 ptcb->OSTCBStat = OS_STAT_RDY; /* Prevent task from being resumed */
\ 00000160 0000A0E3 MOV R0,#+0
\ 00000164 2C00C6E5 STRB R0,[R6, #+44]
459 ptcb->OSTCBStatPend = OS_STAT_PEND_OK;
\ 00000168 0000A0E3 MOV R0,#+0
\ 0000016C 2D00C6E5 STRB R0,[R6, #+45]
460 if (OSLockNesting < 255u) { /* Make sure we don't context switch */
\ 00000170 0C019FE5 LDR R0,??OSTaskDel_10 ;; OSLockNesting
\ 00000174 0000D0E5 LDRB R0,[R0, #+0]
\ 00000178 FF0050E3 CMP R0,#+255
\ 0000017C 0400000A BEQ ??OSTaskDel_11
461 OSLockNesting++;
\ 00000180 FC009FE5 LDR R0,??OSTaskDel_10 ;; OSLockNesting
\ 00000184 F8109FE5 LDR R1,??OSTaskDel_10 ;; OSLockNesting
\ 00000188 0010D1E5 LDRB R1,[R1, #+0]
\ 0000018C 011091E2 ADDS R1,R1,#+1
\ 00000190 0010C0E5 STRB R1,[R0, #+0]
462 }
463 OS_EXIT_CRITICAL(); /* Enabling INT. ignores next instruc. */
\ ??OSTaskDel_11:
\ 00000194 0400B0E1 MOVS R0,R4
\ 00000198 ........ _BLF OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rA
464 OS_Dummy(); /* ... Dummy ensures that INTs will be */
\ 0000019C ........ _BLF OS_Dummy,??OS_Dummy??rA
465 OS_ENTER_CRITICAL(); /* ... disabled HERE! */
\ 000001A0 ........ _BLF OS_CPU_SR_Save,??OS_CPU_SR_Save??rA
\ 000001A4 0040B0E1 MOVS R4,R0
466 if (OSLockNesting > 0) { /* Remove context switch lock */
\ 000001A8 D4009FE5 LDR R0,??OSTaskDel_10 ;; OSLockNesting
\ 000001AC 0000D0E5 LDRB R0,[R0, #+0]
\ 000001B0 010050E3 CMP R0,#+1
\ 000001B4 0400003A BCC ??OSTaskDel_12
467 OSLockNesting--;
\ 000001B8 C4009FE5 LDR R0,??OSTaskDel_10 ;; OSLockNesting
\ 000001BC C0109FE5 LDR R1,??OSTaskDel_10 ;; OSLockNesting
\ 000001C0 0010D1E5 LDRB R1,[R1, #+0]
\ 000001C4 011051E2 SUBS R1,R1,#+1
\ 000001C8 0010C0E5 STRB R1,[R0, #+0]
468 }
469 OSTaskDelHook(ptcb); /* Call user defined hook */
\ ??OSTaskDel_12:
\ 000001CC 0600B0E1 MOVS R0,R6
\ 000001D0 ........ _BLF OSTaskDelHook,??OSTaskDelHook??rA
470 OSTaskCtr--; /* One less task being managed */
\ 000001D4 AC009FE5 LDR R0,??OSTaskDel_10+0x4 ;; OSTaskCtr
\ 000001D8 A8109FE5 LDR R1,??OSTaskDel_10+0x4 ;; OSTaskCtr
\ 000001DC 0010D1E5 LDRB R1,[R1, #+0]
\ 000001E0 011051E2 SUBS R1,R1,#+1
\ 000001E4 0010C0E5 STRB R1,[R0, #+0]
471 OSTCBPrioTbl[prio] = (OS_TCB *)0; /* Clear old priority entry */
\ 000001E8 0400A0E3 MOV R0,#+4
\ 000001EC ........ LDR R1,??DataTable59 ;; OSTCBPrioTbl
\ 000001F0 901521E0 MLA R1,R0,R5,R1
\ 000001F4 0000A0E3 MOV R0,#+0
\ 000001F8 000081E5 STR R0,[R1, #+0]
472 if (ptcb->OSTCBPrev == (OS_TCB *)0) { /* Remove from TCB chain */
\ 000001FC 180096E5 LDR R0,[R6, #+24]
\ 00000200 000050E3 CMP R0,#+0
\ 00000204 0600001A BNE ??OSTaskDel_13
473 ptcb->OSTCBNext->OSTCBPrev = (OS_TCB *)0;
\ 00000208 140096E5 LDR R0,[R6, #+20]
\ 0000020C 0010A0E3 MOV R1,#+0
\ 00000210 181080E5 STR R1,[R0, #+24]
474 OSTCBList = ptcb->OSTCBNext;
\ 00000214 70009FE5 LDR R0,??OSTaskDel_10+0x8 ;; OSTCBList
\ 00000218 141096E5 LDR R1,[R6, #+20]
\ 0000021C 001080E5 STR R1,[R0, #+0]
\ 00000220 050000EA B ??OSTaskDel_14
475 } else {
476 ptcb->OSTCBPrev->OSTCBNext = ptcb->OSTCBNext;
\ ??OSTaskDel_13:
\ 00000224 180096E5 LDR R0,[R6, #+24]
\ 00000228
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -