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

📄 os_q.lst

📁 stm32+ucos-ii
💻 LST
📖 第 1 页 / 共 5 页
字号:
    238              if (perr == (INT8U *)0) {
    239                  OS_SAFETY_CRITICAL_EXCEPTION();
    240                  return ((OS_EVENT *)0);
    241              }
    242          #endif
    243          
    244          #if OS_ARG_CHK_EN > 0u
    245              if (pevent == (OS_EVENT *)0) {                         /* Validate 'pevent'                        */
    246                  *perr = OS_ERR_PEVENT_NULL;
    247                  return (pevent);
    248              }
    249          #endif
    250              if (pevent->OSEventType != OS_EVENT_TYPE_Q) {          /* Validate event block type                */
   \   0000000E   2078               LDRB     R0,[R4, #+0]
   \   00000010   0228               CMP      R0,#+2
   \   00000012   03D0               BEQ.N    ??OSQDel_0
    251                  *perr = OS_ERR_EVENT_TYPE;
   \   00000014   0120               MOVS     R0,#+1
   \   00000016   3070               STRB     R0,[R6, #+0]
    252                  return (pevent);
   \   00000018   2000               MOVS     R0,R4
   \   0000001A   79E0               B.N      ??OSQDel_1
    253              }
    254              if (OSIntNesting > 0u) {                               /* See if called from ISR ...               */
   \                     ??OSQDel_0:
   \   0000001C   ........           LDR.W    R0,??DataTable4
   \   00000020   0078               LDRB     R0,[R0, #+0]
   \   00000022   0028               CMP      R0,#+0
   \   00000024   03D0               BEQ.N    ??OSQDel_2
    255                  *perr = OS_ERR_DEL_ISR;                            /* ... can't DELETE from an ISR             */
   \   00000026   0F20               MOVS     R0,#+15
   \   00000028   3070               STRB     R0,[R6, #+0]
    256                  return (pevent);
   \   0000002A   2000               MOVS     R0,R4
   \   0000002C   70E0               B.N      ??OSQDel_1
    257              }
    258              OS_ENTER_CRITICAL();
   \                     ??OSQDel_2:
   \   0000002E   ........           BL       OS_CPU_SR_Save
   \   00000032   8246               MOV      R10,R0
    259              if (pevent->OSEventGrp != 0u) {                        /* See if any tasks waiting on queue        */
   \   00000034   A07A               LDRB     R0,[R4, #+10]
   \   00000036   0028               CMP      R0,#+0
   \   00000038   02D0               BEQ.N    ??OSQDel_3
    260                  tasks_waiting = OS_TRUE;                           /* Yes                                      */
   \   0000003A   0120               MOVS     R0,#+1
   \   0000003C   0700               MOVS     R7,R0
   \   0000003E   01E0               B.N      ??OSQDel_4
    261              } else {
    262                  tasks_waiting = OS_FALSE;                          /* No                                       */
   \                     ??OSQDel_3:
   \   00000040   0020               MOVS     R0,#+0
   \   00000042   0700               MOVS     R7,R0
    263              }
    264              switch (opt) {
   \                     ??OSQDel_4:
   \   00000044   EDB2               UXTB     R5,R5            ;; ZeroExt  R5,R5,#+24,#+24
   \   00000046   002D               CMP      R5,#+0
   \   00000048   02D0               BEQ.N    ??OSQDel_5
   \   0000004A   012D               CMP      R5,#+1
   \   0000004C   2AD0               BEQ.N    ??OSQDel_6
   \   0000004E   58E0               B.N      ??OSQDel_7
    265                  case OS_DEL_NO_PEND:                               /* Delete queue only if no task waiting     */
    266                       if (tasks_waiting == OS_FALSE) {
   \                     ??OSQDel_5:
   \   00000050   FFB2               UXTB     R7,R7            ;; ZeroExt  R7,R7,#+24,#+24
   \   00000052   002F               CMP      R7,#+0
   \   00000054   1FD1               BNE.N    ??OSQDel_8
    267          #if OS_EVENT_NAME_EN > 0u
    268                           pevent->OSEventName    = (INT8U *)(void *)"?";
   \   00000056   ....               ADR.N    R0,??DataTable3  ;; "\?"
   \   00000058   6061               STR      R0,[R4, #+20]
    269          #endif
    270                           pq                     = (OS_Q *)pevent->OSEventPtr;  /* Return OS_Q to free list     */
   \   0000005A   6068               LDR      R0,[R4, #+4]
   \   0000005C   8146               MOV      R9,R0
    271                           pq->OSQPtr             = OSQFreeList;
   \   0000005E   ........           LDR.W    R0,??DataTable4_2
   \   00000062   0068               LDR      R0,[R0, #+0]
   \   00000064   C9F80000           STR      R0,[R9, #+0]
    272                           OSQFreeList            = pq;
   \   00000068   ........           LDR.W    R0,??DataTable4_2
   \   0000006C   C0F80090           STR      R9,[R0, #+0]
    273                           pevent->OSEventType    = OS_EVENT_TYPE_UNUSED;
   \   00000070   0020               MOVS     R0,#+0
   \   00000072   2070               STRB     R0,[R4, #+0]
    274                           pevent->OSEventPtr     = OSEventFreeList; /* Return Event Control Block to free list  */
   \   00000074   ........           LDR.W    R0,??DataTable4_1
   \   00000078   0068               LDR      R0,[R0, #+0]
   \   0000007A   6060               STR      R0,[R4, #+4]
    275                           pevent->OSEventCnt     = 0u;
   \   0000007C   0020               MOVS     R0,#+0
   \   0000007E   2081               STRH     R0,[R4, #+8]
    276                           OSEventFreeList        = pevent;          /* Get next free event control block        */
   \   00000080   ........           LDR.W    R0,??DataTable4_1
   \   00000084   0460               STR      R4,[R0, #+0]
    277                           OS_EXIT_CRITICAL();
   \   00000086   5046               MOV      R0,R10
   \   00000088   ........           BL       OS_CPU_SR_Restore
    278                           *perr                  = OS_ERR_NONE;
   \   0000008C   0020               MOVS     R0,#+0
   \   0000008E   3070               STRB     R0,[R6, #+0]
    279                           pevent_return          = (OS_EVENT *)0;   /* Queue has been deleted                   */
   \   00000090   0020               MOVS     R0,#+0
   \   00000092   8046               MOV      R8,R0
   \   00000094   05E0               B.N      ??OSQDel_9
    280                       } else {
    281                           OS_EXIT_CRITICAL();
   \                     ??OSQDel_8:
   \   00000096   5046               MOV      R0,R10
   \   00000098   ........           BL       OS_CPU_SR_Restore
    282                           *perr                  = OS_ERR_TASK_WAITING;
   \   0000009C   4920               MOVS     R0,#+73
   \   0000009E   3070               STRB     R0,[R6, #+0]
    283                           pevent_return          = pevent;
   \   000000A0   A046               MOV      R8,R4
    284                       }
    285                       break;
   \                     ??OSQDel_9:
   \   000000A2   34E0               B.N      ??OSQDel_10
    286          
    287                  case OS_DEL_ALWAYS:                                /* Always delete the queue                  */
    288                       while (pevent->OSEventGrp != 0u) {            /* Ready ALL tasks waiting for queue        */
   \                     ??OSQDel_6:
   \   000000A4   A07A               LDRB     R0,[R4, #+10]
   \   000000A6   0028               CMP      R0,#+0
   \   000000A8   06D0               BEQ.N    ??OSQDel_11
    289                           (void)OS_EventTaskRdy(pevent, (void *)0, OS_STAT_Q, OS_STAT_PEND_OK);
   \   000000AA   0023               MOVS     R3,#+0
   \   000000AC   0422               MOVS     R2,#+4
   \   000000AE   0021               MOVS     R1,#+0
   \   000000B0   2000               MOVS     R0,R4
   \   000000B2   ........           BL       OS_EventTaskRdy
   \   000000B6   F5E7               B.N      ??OSQDel_6
    290                       }
    291          #if OS_EVENT_NAME_EN > 0u
    292                       pevent->OSEventName    = (INT8U *)(void *)"?";
   \                     ??OSQDel_11:
   \   000000B8   ....               ADR.N    R0,??DataTable3  ;; "\?"
   \   000000BA   6061               STR      R0,[R4, #+20]
    293          #endif
    294                       pq                     = (OS_Q *)pevent->OSEventPtr;   /* Return OS_Q to free list        */
   \   000000BC   6068               LDR      R0,[R4, #+4]
   \   000000BE   8146               MOV      R9,R0
    295                       pq->OSQPtr             = OSQFreeList;
   \   000000C0   ........           LDR.W    R0,??DataTable4_2
   \   000000C4   0068               LDR      R0,[R0, #+0]
   \   000000C6   C9F80000           STR      R0,[R9, #+0]
    296                       OSQFreeList            = pq;
   \   000000CA   ........           LDR.W    R0,??DataTable4_2
   \   000000CE   C0F80090           STR      R9,[R0, #+0]
    297                       pevent->OSEventType    = OS_EVENT_TYPE_UNUSED;
   \   000000D2   0020               MOVS     R0,#+0
   \   000000D4   2070               STRB     R0,[R4, #+0]
    298                       pevent->OSEventPtr     = OSEventFreeList;     /* Return Event Control Block to free list  */
   \   000000D6   ........           LDR.W    R0,??DataTable4_1
   \   000000DA   0068               LDR      R0,[R0, #+0]
   \   000000DC   6060               STR      R0,[R4, #+4]
    299                       pevent->OSEventCnt     = 0u;
   \   000000DE   0020               MOVS     R0,#+0
   \   000000E0   2081               STRH     R0,[R4, #+8]
    300                       OSEventFreeList        = pevent;              /* Get next free event control block        */
   \   000000E2   ........           LDR.W    R0,??DataTable4_1
   \   000000E6   0460               STR      R4,[R0, #+0]
    301                       OS_EXIT_CRITICAL();
   \   000000E8   5046               MOV      R0,R10
   \   000000EA   ........           BL       OS_CPU_SR_Restore
    302                       if (tasks_waiting == OS_TRUE) {               /* Reschedule only if task(s) were waiting  */
   \   000000EE   FFB2               UXTB     R7,R7            ;; ZeroExt  R7,R7,#+24,#+24
   \   000000F0   012F               CMP      R7,#+1
   \   000000F2   01D1               BNE.N    ??OSQDel_12
    303                           OS_Sched();                               /* Find highest priority task ready to run  */
   \   000000F4   ........           BL       OS_Sched
    304                       }
    305                       *perr                  = OS_ERR_NONE;
   \                     ??OSQDel_12:
   \   000000F8   0020               MOVS     R0,#+0
   \   000000FA   3070               STRB     R0,[R6, #+0]
    306                       pevent_return          = (OS_EVENT *)0;       /* Queue has been deleted                   */
   \   000000FC   0020               MOVS     R0,#+0
   \   000000FE   8046               MOV      R8,R0
    307                       break;
   \   00000100   05E0               B.N      ??OSQDel_10
    308          
    309                  default:
    310                       OS_EXIT_CRITICAL();
   \                     ??OSQDel_7:
   \   00000102   5046               MOV      R0,R10
   \   00000104   ........           BL       OS_CPU_SR_Restore
    311                       *perr                  = OS_ERR_INVALID_OPT;
   \   00000108   0720               MOVS     R0,#+7
   \   0000010A   3070               STRB     R0,[R6, #+0]
    312                       pevent_return          = pevent;
   \   0000010C   A046               MOV      R8,R4
    313                       break;
    314              }
    315              return (pevent_return);
   \                     ??OSQDel_10:
   \   0000010E   4046               MOV      R0,R8
   \                     ??OSQDel_1:
   \   00000110   BDE8F087           POP      {R4-R10,PC}      ;; return
    316          }
    317          #endif
    318          
    319          /*$PAGE*/
    320          /*
    321          *********************************************************************************************************
    322          *                                             FLUSH QUEUE
    323          *
    324          * Description : This function is used to flush the contents of the message queue.

⌨️ 快捷键说明

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