📄 os_task.lst
字号:
\ 00000014 01D1 BNE.N ??OSTaskDel_2
436 return (OS_ERR_TASK_DEL_IDLE);
\ 00000016 3E20 MOVS R0,#+62
\ 00000018 82E0 B.N ??OSTaskDel_1
437 }
438 #if OS_ARG_CHK_EN > 0
439 if (prio >= OS_LOWEST_PRIO) { /* Task priority valid ? */
440 if (prio != OS_PRIO_SELF) {
441 return (OS_ERR_PRIO_INVALID);
442 }
443 }
444 #endif
445
446 /*$PAGE*/
447 OS_ENTER_CRITICAL();
\ ??OSTaskDel_2:
\ 0000001A ........ _BLF OS_CPU_SR_Save,??OS_CPU_SR_Save??rT
\ 0000001E 0400 MOVS R4,R0
448 if (prio == OS_PRIO_SELF) { /* See if requesting to delete self */
\ 00000020 FF2D CMP R5,#+255
\ 00000022 03D1 BNE.N ??OSTaskDel_3
449 prio = OSTCBCur->OSTCBPrio; /* Set priority to delete to current */
\ 00000024 .... LDR.N R0,??DataTable30 ;; OSTCBCur
\ 00000026 0068 LDR R0,[R0, #+0]
\ 00000028 3230 ADDS R0,R0,#+50
\ 0000002A 0578 LDRB R5,[R0, #+0]
\ ??OSTaskDel_3:
\ 0000002C .... LDR.N R0,??DataTable31 ;; OSTCBPrioTbl
\ 0000002E 10EB8508 ADDS R8,R0,R5, LSL #+2
\ 00000032 D8F80050 LDR R5,[R8, #+0]
450 }
451 ptcb = OSTCBPrioTbl[prio];
452 if (ptcb == (OS_TCB *)0) { /* Task to delete must exist */
\ 00000036 002D CMP R5,#+0
\ 00000038 04D1 BNE.N ??OSTaskDel_4
453 OS_EXIT_CRITICAL();
\ 0000003A 2000 MOVS R0,R4
\ 0000003C ........ _BLF OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rT
454 return (OS_ERR_TASK_NOT_EXIST);
\ 00000040 4320 MOVS R0,#+67
\ 00000042 6DE0 B.N ??OSTaskDel_1
455 }
456 if (ptcb == OS_TCB_RESERVED) { /* Must not be assigned to Mutex */
\ ??OSTaskDel_4:
\ 00000044 012D CMP R5,#+1
\ 00000046 04D1 BNE.N ??OSTaskDel_5
457 OS_EXIT_CRITICAL();
\ 00000048 2000 MOVS R0,R4
\ 0000004A ........ _BLF OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rT
458 return (OS_ERR_TASK_DEL);
\ 0000004E 3D20 MOVS R0,#+61
\ 00000050 66E0 B.N ??OSTaskDel_1
459 }
460
461 OSRdyTbl[ptcb->OSTCBY] &= ~ptcb->OSTCBBitX;
\ ??OSTaskDel_5:
\ 00000052 2E00 MOVS R6,R5
\ 00000054 3036 ADDS R6,R6,#+48
\ 00000056 .... LDR.N R0,??DataTable15 ;; OSRdyTbl
\ 00000058 3179 LDRB R1,[R6, #+4]
\ 0000005A 0A46 MOV R2,R1
\ 0000005C 825C LDRB R2,[R0, R2]
\ 0000005E 7379 LDRB R3,[R6, #+5]
\ 00000060 9A43 BICS R2,R2,R3
\ 00000062 4254 STRB R2,[R0, R1]
462 if (OSRdyTbl[ptcb->OSTCBY] == 0) { /* Make task not ready */
\ 00000064 3179 LDRB R1,[R6, #+4]
\ 00000066 405C LDRB R0,[R0, R1]
\ 00000068 0028 CMP R0,#+0
\ 0000006A 04D1 BNE.N ??OSTaskDel_6
463 OSRdyGrp &= ~ptcb->OSTCBBitY;
\ 0000006C .... LDR.N R0,??DataTable16 ;; OSRdyGrp
\ 0000006E 0178 LDRB R1,[R0, #+0]
\ 00000070 B279 LDRB R2,[R6, #+6]
\ 00000072 9143 BICS R1,R1,R2
\ 00000074 0170 STRB R1,[R0, #+0]
464 }
465
466 #if (OS_EVENT_EN)
467 if (ptcb->OSTCBEventPtr != (OS_EVENT *)0) {
\ ??OSTaskDel_6:
\ 00000076 E869 LDR R0,[R5, #+28]
\ 00000078 0028 CMP R0,#+0
\ 0000007A 03D0 BEQ.N ??OSTaskDel_7
468 OS_EventTaskRemove(ptcb, ptcb->OSTCBEventPtr); /* Remove this task from any event wait list */
\ 0000007C 0146 MOV R1,R0
\ 0000007E 2800 MOVS R0,R5
\ 00000080 ........ _BLF OS_EventTaskRemove,??OS_EventTaskRemove??rT
469 }
470 #if (OS_EVENT_MULTI_EN > 0)
471 if (ptcb->OSTCBEventMultiPtr != (OS_EVENT **)0) { /* Remove this task from any events' wait lists*/
\ ??OSTaskDel_7:
\ 00000084 286A LDR R0,[R5, #+32]
\ 00000086 0028 CMP R0,#+0
\ 00000088 03D0 BEQ.N ??OSTaskDel_8
472 OS_EventTaskRemoveMulti(ptcb, ptcb->OSTCBEventMultiPtr);
\ 0000008A 0146 MOV R1,R0
\ 0000008C 2800 MOVS R0,R5
\ 0000008E ........ _BLF OS_EventTaskRemoveMulti,??OS_EventTaskRemoveMulti??rT
473 }
474 #endif
475 #endif
476
477 #if (OS_FLAG_EN > 0) && (OS_MAX_FLAGS > 0)
478 pnode = ptcb->OSTCBFlagNode;
\ ??OSTaskDel_8:
\ 00000092 A86A LDR R0,[R5, #+40]
479 if (pnode != (OS_FLAG_NODE *)0) { /* If task is waiting on event flag */
\ 00000094 0028 CMP R0,#+0
\ 00000096 01D0 BEQ.N ??OSTaskDel_9
480 OS_FlagUnlink(pnode); /* Remove from wait list */
\ 00000098 ........ _BLF OS_FlagUnlink,??OS_FlagUnlink??rT
481 }
482 #endif
483
484 ptcb->OSTCBDly = 0; /* Prevent OSTimeTick() from updating */
\ ??OSTaskDel_9:
\ 0000009C 0020 MOVS R0,#+0
\ 0000009E 8146 MOV R9,R0
\ 000000A0 E885 STRH R0,[R5, #+46]
485 ptcb->OSTCBStat = OS_STAT_RDY; /* Prevent task from being resumed */
\ 000000A2 3070 STRB R0,[R6, #+0]
486 ptcb->OSTCBStatPend = OS_STAT_PEND_OK;
\ 000000A4 7070 STRB R0,[R6, #+1]
487 if (OSLockNesting < 255u) { /* Make sure we don't context switch */
\ 000000A6 1F4F LDR.N R7,??OSTaskDel_10 ;; OSLockNesting
\ 000000A8 3878 LDRB R0,[R7, #+0]
\ 000000AA FF28 CMP R0,#+255
\ 000000AC 01D0 BEQ.N ??OSTaskDel_11
488 OSLockNesting++;
\ 000000AE 401C ADDS R0,R0,#+1
\ 000000B0 3870 STRB R0,[R7, #+0]
489 }
490 OS_EXIT_CRITICAL(); /* Enabling INT. ignores next instruc. */
\ ??OSTaskDel_11:
\ 000000B2 2000 MOVS R0,R4
\ 000000B4 ........ _BLF OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rT
491 OS_Dummy(); /* ... Dummy ensures that INTs will be */
\ 000000B8 ........ _BLF OS_Dummy,??OS_Dummy??rT
492 OS_ENTER_CRITICAL(); /* ... disabled HERE! */
\ 000000BC ........ _BLF OS_CPU_SR_Save,??OS_CPU_SR_Save??rT
\ 000000C0 0400 MOVS R4,R0
493 if (OSLockNesting > 0) { /* Remove context switch lock */
\ 000000C2 3878 LDRB R0,[R7, #+0]
\ 000000C4 0028 CMP R0,#+0
\ 000000C6 01D0 BEQ.N ??OSTaskDel_12
494 OSLockNesting--;
\ 000000C8 401E SUBS R0,R0,#+1
\ 000000CA 3870 STRB R0,[R7, #+0]
495 }
496 OSTaskDelHook(ptcb); /* Call user defined hook */
\ ??OSTaskDel_12:
\ 000000CC 2800 MOVS R0,R5
\ 000000CE ........ _BLF OSTaskDelHook,??OSTaskDelHook??rT
497 OSTaskCtr--; /* One less task being managed */
\ 000000D2 1548 LDR.N R0,??OSTaskDel_10+0x4 ;; OSTaskCtr
\ 000000D4 0178 LDRB R1,[R0, #+0]
\ 000000D6 491E SUBS R1,R1,#+1
\ 000000D8 0170 STRB R1,[R0, #+0]
498 OSTCBPrioTbl[prio] = (OS_TCB *)0; /* Clear old priority entry */
\ 000000DA C8F80090 STR R9,[R8, #+0]
499 if (ptcb->OSTCBPrev == (OS_TCB *)0) { /* Remove from TCB chain */
\ 000000DE A869 LDR R0,[R5, #+24]
\ 000000E0 0028 CMP R0,#+0
\ 000000E2 06D1 BNE.N ??OSTaskDel_13
500 ptcb->OSTCBNext->OSTCBPrev = (OS_TCB *)0;
\ 000000E4 6869 LDR R0,[R5, #+20]
\ 000000E6 C0F81890 STR R9,[R0, #+24]
501 OSTCBList = ptcb->OSTCBNext;
\ 000000EA 1048 LDR.N R0,??OSTaskDel_10+0x8 ;; OSTCBList
\ 000000EC 6969 LDR R1,[R5, #+20]
\ 000000EE 0160 STR R1,[R0, #+0]
\ 000000F0 04E0 B.N ??OSTaskDel_14
502 } else {
503 ptcb->OSTCBPrev->OSTCBNext = ptcb->OSTCBNext;
\ ??OSTaskDel_13:
\ 000000F2 6969 LDR R1,[R5, #+20]
\ 000000F4 4161 STR R1,[R0, #+20]
504 ptcb->OSTCBNext->OSTCBPrev = ptcb->OSTCBPrev;
\ 000000F6 6869 LDR R0,[R5, #+20]
\ 000000F8 A969 LDR R1,[R5, #+24]
\ 000000FA 8161 STR R1,[R0, #+24]
505 }
506 ptcb->OSTCBNext = OSTCBFreeList; /* Return TCB to free TCB list */
\ ??OSTaskDel_14:
\ 000000FC 0C48 LDR.N R0,??OSTaskDel_10+0xC ;; OSTCBFreeList
\ 000000FE 0168 LDR R1,[R0, #+0]
\ 00000100 6961 STR R1,[R5, #+20]
507 OSTCBFreeList = ptcb;
\ 00000102 0560 STR R5,[R0, #+0]
508 #if OS_TASK_NAME_SIZE > 1
509 ptcb->OSTCBTaskName[0] = '?'; /* Unknown name */
\ 00000104 3F20 MOVS R0,#+63
\ 00000106 3077 STRB R0,[R6, #+28]
510 ptcb->OSTCBTaskName[1] = OS_ASCII_NUL;
\ 00000108 4846 MOV R0,R9
\ 0000010A 7077 STRB R0,[R6, #+29]
511 #endif
512 OS_EXIT_CRITICAL();
\ 0000010C 2000 MOVS R0,R4
\ 0000010E ........ _BLF OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rT
513 if (OSRunning == OS_TRUE) {
\ 00000112 .... LDR.N R0,??DataTable17 ;; OSRunning
\ 00000114 0078
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -