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

📄 os_q.lst

📁 lpc2478开发板基于IAR编译器移植ucos实验例程
💻 LST
📖 第 1 页 / 共 5 页
字号:
    221          
    222          
    223          #if OS_ARG_CHK_EN > 0
    224              if (err == (INT8U *)0) {                               /* Validate 'err'                           */
   \   00000018   000055E3           CMP      R5,#+0
   \   0000001C   0100001A           BNE      ??OSQDel_0
    225                  return (pevent);
   \   00000020   0A00B0E1           MOVS     R0,R10
   \   00000024   740000EA           B        ??OSQDel_1
    226              }
    227              if (pevent == (OS_EVENT *)0) {                         /* Validate 'pevent'                        */
   \                     ??OSQDel_0:
   \   00000028   00005AE3           CMP      R10,#+0
   \   0000002C   0300001A           BNE      ??OSQDel_2
    228                  *err = OS_ERR_PEVENT_NULL;
   \   00000030   0400A0E3           MOV      R0,#+4
   \   00000034   0000C5E5           STRB     R0,[R5, #+0]
    229                  return (pevent);
   \   00000038   0A00B0E1           MOVS     R0,R10
   \   0000003C   6E0000EA           B        ??OSQDel_1
    230              }
    231          #endif
    232              if (pevent->OSEventType != OS_EVENT_TYPE_Q) {          /* Validate event block type                */
   \                     ??OSQDel_2:
   \   00000040   0000DAE5           LDRB     R0,[R10, #+0]
   \   00000044   020050E3           CMP      R0,#+2
   \   00000048   0300000A           BEQ      ??OSQDel_3
    233                  *err = OS_ERR_EVENT_TYPE;
   \   0000004C   0100A0E3           MOV      R0,#+1
   \   00000050   0000C5E5           STRB     R0,[R5, #+0]
    234                  return (pevent);
   \   00000054   0A00B0E1           MOVS     R0,R10
   \   00000058   670000EA           B        ??OSQDel_1
    235              }
    236              if (OSIntNesting > 0) {                                /* See if called from ISR ...               */
   \                     ??OSQDel_3:
   \   0000005C   ........           LDR      R0,??DataTable19  ;; OSIntNesting
   \   00000060   0000D0E5           LDRB     R0,[R0, #+0]
   \   00000064   010050E3           CMP      R0,#+1
   \   00000068   0300003A           BCC      ??OSQDel_4
    237                  *err = OS_ERR_DEL_ISR;                             /* ... can't DELETE from an ISR             */
   \   0000006C   0F00A0E3           MOV      R0,#+15
   \   00000070   0000C5E5           STRB     R0,[R5, #+0]
    238                  return (pevent);
   \   00000074   0A00B0E1           MOVS     R0,R10
   \   00000078   5F0000EA           B        ??OSQDel_1
    239              }
    240              OS_ENTER_CRITICAL();
   \                     ??OSQDel_4:
   \   0000007C   ........           _BLF     OS_CPU_SR_Save,??OS_CPU_SR_Save??rA
   \   00000080   0090B0E1           MOVS     R9,R0
    241              if (pevent->OSEventGrp != 0) {                         /* See if any tasks waiting on queue        */
   \   00000084   0A00DAE5           LDRB     R0,[R10, #+10]
   \   00000088   000050E3           CMP      R0,#+0
   \   0000008C   0200000A           BEQ      ??OSQDel_5
    242                  tasks_waiting = OS_TRUE;                              /* Yes                                      */
   \   00000090   0100A0E3           MOV      R0,#+1
   \   00000094   0060B0E1           MOVS     R6,R0
   \   00000098   010000EA           B        ??OSQDel_6
    243              } else {
    244                  tasks_waiting = OS_FALSE;                             /* No                                       */
   \                     ??OSQDel_5:
   \   0000009C   0000A0E3           MOV      R0,#+0
   \   000000A0   0060B0E1           MOVS     R6,R0
    245              }
    246              switch (opt) {
   \                     ??OSQDel_6:
   \   000000A4   0400B0E1           MOVS     R0,R4
   \   000000A8   000050E3           CMP      R0,#+0
   \   000000AC   0200000A           BEQ      ??OSQDel_7
   \   000000B0   010050E3           CMP      R0,#+1
   \   000000B4   2300000A           BEQ      ??OSQDel_8
   \   000000B8   490000EA           B        ??OSQDel_9
    247                  case OS_DEL_NO_PEND:                               /* Delete queue only if no task waiting     */
    248                       if (tasks_waiting == OS_FALSE) {
   \                     ??OSQDel_7:
   \   000000BC   000056E3           CMP      R6,#+0
   \   000000C0   1A00001A           BNE      ??OSQDel_10
    249          #if OS_EVENT_NAME_SIZE > 1
    250                           pevent->OSEventName[0] = '?';             /* Unknown name                             */
   \   000000C4   3F00A0E3           MOV      R0,#+63
   \   000000C8   0F00CAE5           STRB     R0,[R10, #+15]
    251                           pevent->OSEventName[1] = OS_ASCII_NUL;
   \   000000CC   0000A0E3           MOV      R0,#+0
   \   000000D0   1000CAE5           STRB     R0,[R10, #+16]
    252          #endif
    253                           pq                     = (OS_Q *)pevent->OSEventPtr;  /* Return OS_Q to free list     */
   \   000000D4   04009AE5           LDR      R0,[R10, #+4]
   \   000000D8   0080B0E1           MOVS     R8,R0
    254                           pq->OSQPtr             = OSQFreeList;
   \   000000DC   ........           LDR      R0,??DataTable20  ;; OSQFreeList
   \   000000E0   000090E5           LDR      R0,[R0, #+0]
   \   000000E4   000088E5           STR      R0,[R8, #+0]
    255                           OSQFreeList            = pq;
   \   000000E8   ........           LDR      R0,??DataTable20  ;; OSQFreeList
   \   000000EC   008080E5           STR      R8,[R0, #+0]
    256                           pevent->OSEventType    = OS_EVENT_TYPE_UNUSED;
   \   000000F0   0000A0E3           MOV      R0,#+0
   \   000000F4   0000CAE5           STRB     R0,[R10, #+0]
    257                           pevent->OSEventPtr     = OSEventFreeList; /* Return Event Control Block to free list  */
   \   000000F8   ........           LDR      R0,??DataTable18  ;; OSEventFreeList
   \   000000FC   000090E5           LDR      R0,[R0, #+0]
   \   00000100   04008AE5           STR      R0,[R10, #+4]
    258                           pevent->OSEventCnt     = 0;
   \   00000104   0000A0E3           MOV      R0,#+0
   \   00000108   B800CAE1           STRH     R0,[R10, #+8]
    259                           OSEventFreeList        = pevent;          /* Get next free event control block        */
   \   0000010C   ........           LDR      R0,??DataTable18  ;; OSEventFreeList
   \   00000110   00A080E5           STR      R10,[R0, #+0]
    260                           OS_EXIT_CRITICAL();
   \   00000114   0900B0E1           MOVS     R0,R9
   \   00000118   ........           _BLF     OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rA
    261                           *err                   = OS_ERR_NONE;
   \   0000011C   0000A0E3           MOV      R0,#+0
   \   00000120   0000C5E5           STRB     R0,[R5, #+0]
    262                           pevent_return          = (OS_EVENT *)0;   /* Queue has been deleted                   */
   \   00000124   0000A0E3           MOV      R0,#+0
   \   00000128   0070B0E1           MOVS     R7,R0
   \   0000012C   310000EA           B        ??OSQDel_11
    263                       } else {
    264                           OS_EXIT_CRITICAL();
   \                     ??OSQDel_10:
   \   00000130   0900B0E1           MOVS     R0,R9
   \   00000134   ........           _BLF     OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rA
    265                           *err                   = OS_ERR_TASK_WAITING;
   \   00000138   4900A0E3           MOV      R0,#+73
   \   0000013C   0000C5E5           STRB     R0,[R5, #+0]
    266                           pevent_return          = pevent;
   \   00000140   0A70B0E1           MOVS     R7,R10
   \   00000144   2B0000EA           B        ??OSQDel_11
    267                       }
    268                       break;
    269          
    270                  case OS_DEL_ALWAYS:                                /* Always delete the queue                  */
    271                       while (pevent->OSEventGrp != 0) {             /* Ready ALL tasks waiting for queue        */
   \                     ??OSQDel_8:
   \   00000148   0A00DAE5           LDRB     R0,[R10, #+10]
   \   0000014C   000050E3           CMP      R0,#+0
   \   00000150   0500000A           BEQ      ??OSQDel_12
    272                           (void)OS_EventTaskRdy(pevent, (void *)0, OS_STAT_Q, OS_STAT_PEND_OK);
   \   00000154   0030A0E3           MOV      R3,#+0
   \   00000158   0420A0E3           MOV      R2,#+4
   \   0000015C   0010A0E3           MOV      R1,#+0
   \   00000160   0A00B0E1           MOVS     R0,R10
   \   00000164   ........           _BLF     OS_EventTaskRdy,??OS_EventTaskRdy??rA
   \   00000168   F6FFFFEA           B        ??OSQDel_8
    273                       }
    274          #if OS_EVENT_NAME_SIZE > 1
    275                       pevent->OSEventName[0] = '?';                 /* Unknown name                             */
   \                     ??OSQDel_12:
   \   0000016C   3F00A0E3           MOV      R0,#+63
   \   00000170   0F00CAE5           STRB     R0,[R10, #+15]
    276                       pevent->OSEventName[1] = OS_ASCII_NUL;
   \   00000174   0000A0E3           MOV      R0,#+0
   \   00000178   1000CAE5           STRB     R0,[R10, #+16]
    277          #endif
    278                       pq                     = (OS_Q *)pevent->OSEventPtr;   /* Return OS_Q to free list        */
   \   0000017C   04009AE5           LDR      R0,[R10, #+4]
   \   00000180   0080B0E1           MOVS     R8,R0
    279                       pq->OSQPtr             = OSQFreeList;
   \   00000184   ........           LDR      R0,??DataTable20  ;; OSQFreeList
   \   00000188   000090E5           LDR      R0,[R0, #+0]
   \   0000018C   000088E5           STR      R0,[R8, #+0]
    280                       OSQFreeList            = pq;
   \   00000190   ........           LDR      R0,??DataTable20  ;; OSQFreeList
   \   00000194   008080E5           STR      R8,[R0, #+0]
    281                       pevent->OSEventType    = OS_EVENT_TYPE_UNUSED;
   \   00000198   0000A0E3           MOV      R0,#+0
   \   0000019C   0000CAE5           STRB     R0,[R10, #+0]
    282                       pevent->OSEventPtr     = OSEventFreeList;     /* Return Event Control Block to free list  */
   \   000001A0   ........           LDR      R0,??DataTable18  ;; OSEventFreeList
   \   000001A4   000090E5           LDR      R0,[R0, #+0]
   \   000001A8   04008AE5           STR      R0,[R10, #+4]
    283                       pevent->OSEventCnt     = 0;
   \   000001AC   0000A0E3           MOV      R0,#+0
   \   000001B0   B800CAE1           STRH     R0,[R10, #+8]
    284                       OSEventFreeList        = pevent;              /* Get next free event control block        */
   \   000001B4   ........           LDR      R0,??DataTable18  ;; OSEventFreeList
   \   000001B8   00A080E5           STR      R10,[R0, #+0]
    285                       OS_EXIT_CRITICAL();
   \   000001BC   0900B0E1           MOVS     R0,R9
   \   000001C0   ........           _BLF     OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rA
    286                       if (tasks_waiting == OS_TRUE) {                  /* Reschedule only if task(s) were waiting  */
   \   000001C4   010056E3           CMP      R6,#+1
   \   000001C8   0000001A           BNE      ??OSQDel_13
    287                           OS_Sched();                               /* Find highest priority task ready to run  */
   \   000001CC   ........           _BLF     OS_Sched,??OS_Sched??rA
    288                       }
    289                       *err                   = OS_ERR_NONE;
   \                     ??OSQDel_13:
   \   000001D0   0000A0E3           MOV      R0,#+0
   \   000001D4   0000C5E5           STRB     R0,[R5, #+0]
    290                       pevent_return          = (OS_EVENT *)0;       /* Queue has been deleted                   */
   \   000001D8   0000A0E3           MOV      R0,#+0
   \   000001DC   0070B0E1           MOVS     R7,R0
   \   000001E0   040000EA           B        ??OSQDel_11
    291                       break;
    292          
    293                  default:
    294                       OS_EXIT_CRITICAL();
   \                     ??OSQDel_9:
   \   000001E4   0900B0E1           MOVS     R0,R9
   \   000001E8   ........           _BLF     OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rA
    295                       *err                   = OS_ERR_INVALID_OPT;
   \   000001EC   0700A0E3           MOV      R0,#+7
   \   000001F0   0000C5E5           STRB     R0,[R5, #+0]

⌨️ 快捷键说明

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