📄 os_task.lst
字号:
410 if (prio == OS_TASK_IDLE_PRIO) { /* Not allowed to delete idle task */
\ ??OSTaskDel_0:
\ 00000028 1F0054E3 CMP R4,#+31
\ 0000002C 0100001A BNE ??OSTaskDel_2
411 return (OS_ERR_TASK_DEL_IDLE);
\ 00000030 3E00A0E3 MOV R0,#+62
\ 00000034 9A0000EA B ??OSTaskDel_1
412 }
413 #if OS_ARG_CHK_EN > 0
414 if (prio >= OS_LOWEST_PRIO) { /* Task priority valid ? */
\ ??OSTaskDel_2:
\ 00000038 1F0054E3 CMP R4,#+31
\ 0000003C 0300003A BCC ??OSTaskDel_3
415 if (prio != OS_PRIO_SELF) {
\ 00000040 FF0054E3 CMP R4,#+255
\ 00000044 0100000A BEQ ??OSTaskDel_3
416 return (OS_ERR_PRIO_INVALID);
\ 00000048 2A00A0E3 MOV R0,#+42
\ 0000004C 940000EA B ??OSTaskDel_1
417 }
418 }
419 #endif
420
421 OS_ENTER_CRITICAL();
\ ??OSTaskDel_3:
\ 00000050 ........ _BLF OS_CPU_SR_Save,??OS_CPU_SR_Save??rA
\ 00000054 0090B0E1 MOVS R9,R0
422 if (prio == OS_PRIO_SELF) { /* See if requesting to delete self */
\ 00000058 FF0054E3 CMP R4,#+255
\ 0000005C 0300001A BNE ??OSTaskDel_4
423 prio = OSTCBCur->OSTCBPrio; /* Set priority to delete to current */
\ 00000060 ........ LDR R0,??DataTable58 ;; OSTCBCur
\ 00000064 000090E5 LDR R0,[R0, #+0]
\ 00000068 2E00D0E5 LDRB R0,[R0, #+46]
\ 0000006C 0040B0E1 MOVS R4,R0
424 }
425 ptcb = OSTCBPrioTbl[prio];
\ ??OSTaskDel_4:
\ 00000070 0400B0E1 MOVS R0,R4
\ 00000074 0410A0E3 MOV R1,#+4
\ 00000078 ........ LDR R2,??DataTable52 ;; OSTCBPrioTbl
\ 0000007C 912020E0 MLA R0,R1,R0,R2
\ 00000080 000090E5 LDR R0,[R0, #+0]
\ 00000084 0070B0E1 MOVS R7,R0
426 if (ptcb == (OS_TCB *)0) { /* Task to delete must exist */
\ 00000088 000057E3 CMP R7,#+0
\ 0000008C 0300001A BNE ??OSTaskDel_5
427 OS_EXIT_CRITICAL();
\ 00000090 0900B0E1 MOVS R0,R9
\ 00000094 ........ _BLF OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rA
428 return (OS_ERR_TASK_NOT_EXIST);
\ 00000098 4300A0E3 MOV R0,#+67
\ 0000009C 800000EA B ??OSTaskDel_1
429 }
430 if (ptcb == (OS_TCB *)1) { /* Must not be assigned to Mutex */
\ ??OSTaskDel_5:
\ 000000A0 010057E3 CMP R7,#+1
\ 000000A4 0300001A BNE ??OSTaskDel_6
431 OS_EXIT_CRITICAL();
\ 000000A8 0900B0E1 MOVS R0,R9
\ 000000AC ........ _BLF OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rA
432 return (OS_ERR_TASK_DEL);
\ 000000B0 3D00A0E3 MOV R0,#+61
\ 000000B4 7A0000EA B ??OSTaskDel_1
433 }
434 y = ptcb->OSTCBY;
\ ??OSTaskDel_6:
\ 000000B8 3000D7E5 LDRB R0,[R7, #+48]
\ 000000BC 0080B0E1 MOVS R8,R0
435 OSRdyTbl[y] &= ~ptcb->OSTCBBitX;
\ 000000C0 0800B0E1 MOVS R0,R8
\ 000000C4 ........ LDR R1,??DataTable55 ;; OSRdyTbl
\ 000000C8 0820B0E1 MOVS R2,R8
\ 000000CC ........ LDR R3,??DataTable55 ;; OSRdyTbl
\ 000000D0 0320D2E7 LDRB R2,[R2, +R3]
\ 000000D4 3130D7E5 LDRB R3,[R7, #+49]
\ 000000D8 0320D2E1 BICS R2,R2,R3
\ 000000DC 0120C0E7 STRB R2,[R0, +R1]
436 if (OSRdyTbl[y] == 0) { /* Make task not ready */
\ 000000E0 0800B0E1 MOVS R0,R8
\ 000000E4 ........ LDR R1,??DataTable55 ;; OSRdyTbl
\ 000000E8 0100D0E7 LDRB R0,[R0, +R1]
\ 000000EC 000050E3 CMP R0,#+0
\ 000000F0 0500001A BNE ??OSTaskDel_7
437 OSRdyGrp &= ~ptcb->OSTCBBitY;
\ 000000F4 ........ LDR R0,??DataTable57 ;; OSRdyGrp
\ 000000F8 ........ LDR R1,??DataTable57 ;; OSRdyGrp
\ 000000FC 0010D1E5 LDRB R1,[R1, #+0]
\ 00000100 3220D7E5 LDRB R2,[R7, #+50]
\ 00000104 0210D1E1 BICS R1,R1,R2
\ 00000108 0010C0E5 STRB R1,[R0, #+0]
438 }
439
440 #if OS_EVENT_EN
441 pevent = ptcb->OSTCBEventPtr;
\ ??OSTaskDel_7:
\ 0000010C 1C0097E5 LDR R0,[R7, #+28]
\ 00000110 0050B0E1 MOVS R5,R0
442 if (pevent != (OS_EVENT *)0) { /* If task is waiting on event */
\ 00000114 000055E3 CMP R5,#+0
\ 00000118 1000000A BEQ ??OSTaskDel_8
443 pevent->OSEventTbl[y] &= ~ptcb->OSTCBBitX;
\ 0000011C 0800B0E1 MOVS R0,R8
\ 00000120 050090E0 ADDS R0,R0,R5
\ 00000124 0810B0E1 MOVS R1,R8
\ 00000128 051091E0 ADDS R1,R1,R5
\ 0000012C 0B10D1E5 LDRB R1,[R1, #+11]
\ 00000130 3120D7E5 LDRB R2,[R7, #+49]
\ 00000134 0210D1E1 BICS R1,R1,R2
\ 00000138 0B10C0E5 STRB R1,[R0, #+11]
444 if (pevent->OSEventTbl[y] == 0) { /* ... remove task from ... */
\ 0000013C 0800B0E1 MOVS R0,R8
\ 00000140 050090E0 ADDS R0,R0,R5
\ 00000144 0B00D0E5 LDRB R0,[R0, #+11]
\ 00000148 000050E3 CMP R0,#+0
\ 0000014C 0300001A BNE ??OSTaskDel_8
445 pevent->OSEventGrp &= ~ptcb->OSTCBBitY; /* ... event ctrl block */
\ 00000150 0A00D5E5 LDRB R0,[R5, #+10]
\ 00000154 3210D7E5 LDRB R1,[R7, #+50]
\ 00000158 0100D0E1 BICS R0,R0,R1
\ 0000015C 0A00C5E5 STRB R0,[R5, #+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:
\ 00000160 240097E5 LDR R0,[R7, #+36]
\ 00000164 0060B0E1 MOVS R6,R0
452 if (pnode != (OS_FLAG_NODE *)0) { /* If task is waiting on event flag */
\ 00000168 000056E3 CMP R6,#+0
\ 0000016C 0100000A BEQ ??OSTaskDel_9
453 OS_FlagUnlink(pnode); /* Remove from wait list */
\ 00000170 0600B0E1 MOVS R0,R6
\ 00000174 ........ _BLF OS_FlagUnlink,??OS_FlagUnlink??rA
454 }
455 #endif
456
457 ptcb->OSTCBDly = 0; /* Prevent OSTimeTick() from updating */
\ ??OSTaskDel_9:
\ 00000178 0000A0E3 MOV R0,#+0
\ 0000017C BA02C7E1 STRH R0,[R7, #+42]
458 ptcb->OSTCBStat = OS_STAT_RDY; /* Prevent task from being resumed */
\ 00000180 0000A0E3 MOV R0,#+0
\ 00000184 2C00C7E5 STRB R0,[R7, #+44]
459 ptcb->OSTCBStatPend = OS_STAT_PEND_OK;
\ 00000188 0000A0E3 MOV R0,#+0
\ 0000018C 2D00C7E5 STRB R0,[R7, #+45]
460 if (OSLockNesting < 255u) { /* Make sure we don't context switch */
\ 00000190 10019FE5 LDR R0,??OSTaskDel_10 ;; OSLockNesting
\ 00000194 0000D0E5 LDRB R0,[R0, #+0]
\ 00000198 FF0050E3 CMP R0,#+255
\ 0000019C 0400000A BEQ ??OSTaskDel_11
461 OSLockNesting++;
\ 000001A0 00019FE5 LDR R0,??OSTaskDel_10 ;; OSLockNesting
\ 000001A4 FC109FE5 LDR R1,??OSTaskDel_10 ;; OSLockNesting
\ 000001A8 0010D1E5 LDRB R1,[R1, #+0]
\ 000001AC 011091E2 ADDS R1,R1,#+1
\ 000001B0 0010C0E5 STRB R1,[R0, #+0]
462 }
463 OS_EXIT_CRITICAL(); /* Enabling INT. ignores next instruc. */
\ ??OSTaskDel_11:
\ 000001B4 0900B0E1 MOVS R0,R9
\ 000001B8 ........ _BLF OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rA
464 OS_Dummy(); /* ... Dummy ensures that INTs will be */
\ 000001BC ........ _BLF OS_Dummy,??OS_Dummy??rA
465 OS_ENTER_CRITICAL(); /* ... disabled HERE! */
\ 000001C0 ........ _BLF OS_CPU_SR_Save,??OS_CPU_SR_Save??rA
\ 000001C4 0090B0E1 MOVS R9,R0
466 if (OSLockNesting > 0) { /* Remove context switch lock */
\ 000001C8 D8009FE5 LDR R0,??OSTaskDel_10 ;; OSLockNesting
\ 000001CC 0000D0E5 LDRB R0,[R0, #+0]
\ 000001D0 010050E3 CMP R0,#+1
\ 000001D4 0400003A BCC ??OSTaskDel_12
467 OSLockNesting--;
\ 000001D8 C8009FE5 LDR R0,??OSTaskDel_10 ;; OSLockNesting
\ 000001DC C4109FE5 LDR R1,??OSTaskDel_10 ;; OSLockNesting
\ 000001E0 0010D1E5 LDRB R1,[R1, #+0]
\ 000001E4 011051E2 SUBS R1,R1,#+1
\ 000001E8 0010C0E5 STRB R1,[R0, #+0]
468 }
469 OSTaskDelHook(ptcb); /* Call user defined hook */
\ ??OSTaskDel_12:
\ 000001EC 0700B0E1 MOVS R0,R7
\ 000001F0 ........ _BLF OSTaskDelHook,??OSTaskDelHook??rA
470 OSTaskCtr--; /* One less task being managed */
\ 000001F4 B0009FE5 LDR R0,??OSTaskDel_10+0x4 ;; OSTaskCtr
\ 000001F8 AC109FE5 LDR R1,??OSTaskDel_10+0x4 ;; OSTaskCtr
\ 000001FC 0010D1E5 LDRB R1,[R1, #+0]
\ 00000200 011051E2 SUBS R1,R1,#+1
\ 00000204 0010C0E5 STRB R1,[R0, #+0]
471 OSTCBPrioTbl[prio] = (OS_TCB *)0; /* Clear old priority entry */
\ 00000208 0400B0E1 MOVS R0,R4
\ 0000020C 0410A0E3 MOV R1,#+4
\ 00000210 ........ LDR R2,??DataTable52 ;; OSTCBPrioTbl
\ 00000214 912020E0 MLA R0,R1,R0,R2
\ 00000218 0010A0E3 MOV R1,#+0
\ 0000021C 001080E5 STR R1,[R0, #+0]
472 if (ptcb->OSTCBPrev == (OS_TCB *)0) { /* Remove from TCB chain */
\ 00000220 180097E5 LDR R0,[R7, #+24]
\ 00000224 000050E3 CMP R0,#+0
\ 00000228 0600001A BNE ?
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -