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

📄 os_task.lst

📁 编译环境是 iar EWARM ,STM32 下的UCOSII
💻 LST
📖 第 1 页 / 共 5 页
字号:
   \   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 + -