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

📄 os_core.lst

📁 stm32+ucos-ii
💻 LST
📖 第 1 页 / 共 5 页
字号:
   \   000000DC   0020               MOVS     R0,#+0
   \   000000DE   6860               STR      R0,[R5, #+4]
    424                              *pevents_rdy++       =  pevent;     /* ... and return available mailbox event      */
   \   000000E0   CBF80050           STR      R5,[R11, #+0]
   \   000000E4   1BF1040B           ADDS     R11,R11,#+4
    425                                events_rdy         =  OS_TRUE;
   \   000000E8   0120               MOVS     R0,#+1
   \   000000EA   8DF80400           STRB     R0,[SP, #+4]
    426                                events_rdy_nbr++;
   \   000000EE   18F10108           ADDS     R8,R8,#+1
   \   000000F2   01E0               B.N      ??OSEventPendMulti_20
    427          
    428                           } else {
    429                                events_stat |= OS_STAT_MBOX;      /* Configure multi-pend for mailbox events     */
   \                     ??OSEventPendMulti_19:
   \   000000F4   59F00209           ORRS     R9,R9,#0x2
    430                           }
    431                           break;
   \                     ??OSEventPendMulti_20:
   \   000000F8   2DE0               B.N      ??OSEventPendMulti_18
    432          #endif
    433          
    434          #if ((OS_Q_EN > 0u) && (OS_MAX_QS > 0u))
    435                      case OS_EVENT_TYPE_Q:
    436                           pq = (OS_Q *)pevent->OSEventPtr;
   \                     ??OSEventPendMulti_15:
   \   000000FA   6868               LDR      R0,[R5, #+4]
   \   000000FC   0600               MOVS     R6,R0
    437                           if (pq->OSQEntries > 0u) {             /* If queue NOT empty;                     ... */
   \   000000FE   F08A               LDRH     R0,[R6, #+22]
   \   00000100   0028               CMP      R0,#+0
   \   00000102   1AD0               BEQ.N    ??OSEventPendMulti_21
    438                                                                  /* ... return available message,           ... */
    439                              *pmsgs_rdy++ = (void *)*pq->OSQOut++;
   \   00000104   3069               LDR      R0,[R6, #+16]
   \   00000106   011D               ADDS     R1,R0,#+4
   \   00000108   3161               STR      R1,[R6, #+16]
   \   0000010A   0068               LDR      R0,[R0, #+0]
   \   0000010C   CAF80000           STR      R0,[R10, #+0]
   \   00000110   1AF1040A           ADDS     R10,R10,#+4
    440                               if (pq->OSQOut == pq->OSQEnd) {    /* If OUT ptr at queue end, ...                */
   \   00000114   3069               LDR      R0,[R6, #+16]
   \   00000116   B168               LDR      R1,[R6, #+8]
   \   00000118   8842               CMP      R0,R1
   \   0000011A   01D1               BNE.N    ??OSEventPendMulti_22
    441                                   pq->OSQOut  = pq->OSQStart;    /* ... wrap   to queue start                   */
   \   0000011C   7068               LDR      R0,[R6, #+4]
   \   0000011E   3061               STR      R0,[R6, #+16]
    442                               }
    443                               pq->OSQEntries--;                  /* Update number of queue entries              */
   \                     ??OSEventPendMulti_22:
   \   00000120   F08A               LDRH     R0,[R6, #+22]
   \   00000122   401E               SUBS     R0,R0,#+1
   \   00000124   F082               STRH     R0,[R6, #+22]
    444                              *pevents_rdy++ = pevent;            /* ... and return available queue event        */
   \   00000126   CBF80050           STR      R5,[R11, #+0]
   \   0000012A   1BF1040B           ADDS     R11,R11,#+4
    445                                events_rdy   = OS_TRUE;
   \   0000012E   0120               MOVS     R0,#+1
   \   00000130   8DF80400           STRB     R0,[SP, #+4]
    446                                events_rdy_nbr++;
   \   00000134   18F10108           ADDS     R8,R8,#+1
   \   00000138   01E0               B.N      ??OSEventPendMulti_23
    447          
    448                           } else {
    449                                events_stat |= OS_STAT_Q;         /* Configure multi-pend for queue events       */
   \                     ??OSEventPendMulti_21:
   \   0000013A   59F00409           ORRS     R9,R9,#0x4
    450                           }
    451                           break;
   \                     ??OSEventPendMulti_23:
   \   0000013E   0AE0               B.N      ??OSEventPendMulti_18
    452          #endif
    453          
    454                      case OS_EVENT_TYPE_MUTEX:
    455                      case OS_EVENT_TYPE_FLAG:
    456                      default:
    457                           OS_EXIT_CRITICAL();
   \                     ??OSEventPendMulti_13:
   \   00000140   0098               LDR      R0,[SP, #+0]
   \   00000142   ........           BL       OS_CPU_SR_Restore
    458                          *pevents_rdy = (OS_EVENT *)0;           /* NULL terminate return event array           */
   \   00000146   0020               MOVS     R0,#+0
   \   00000148   CBF80000           STR      R0,[R11, #+0]
    459                          *perr        =  OS_ERR_EVENT_TYPE;
   \   0000014C   0120               MOVS     R0,#+1
   \   0000014E   2070               STRB     R0,[R4, #+0]
    460                           return (events_rdy_nbr);
   \   00000150   4046               MOV      R0,R8
   \   00000152   80B2               UXTH     R0,R0            ;; ZeroExt  R0,R0,#+16,#+16
   \   00000154   BEE0               B.N      ??OSEventPendMulti_7
    461                  }
    462                  pevents++;
   \                     ??OSEventPendMulti_18:
   \   00000156   3F1D               ADDS     R7,R7,#+4
    463                  pevent = *pevents;
   \   00000158   3868               LDR      R0,[R7, #+0]
   \   0000015A   0500               MOVS     R5,R0
   \   0000015C   94E7               B.N      ??OSEventPendMulti_10
    464              }
    465          
    466              if ( events_rdy == OS_TRUE) {                       /* Return any events already available         */
   \                     ??OSEventPendMulti_11:
   \   0000015E   9DF80400           LDRB     R0,[SP, #+4]
   \   00000162   0128               CMP      R0,#+1
   \   00000164   0AD1               BNE.N    ??OSEventPendMulti_24
    467                 *pevents_rdy = (OS_EVENT *)0;                    /* NULL terminate return event array           */
   \   00000166   0020               MOVS     R0,#+0
   \   00000168   CBF80000           STR      R0,[R11, #+0]
    468                  OS_EXIT_CRITICAL();
   \   0000016C   0098               LDR      R0,[SP, #+0]
   \   0000016E   ........           BL       OS_CPU_SR_Restore
    469                 *perr        =  OS_ERR_NONE;
   \   00000172   0020               MOVS     R0,#+0
   \   00000174   2070               STRB     R0,[R4, #+0]
    470                  return (events_rdy_nbr);
   \   00000176   4046               MOV      R0,R8
   \   00000178   80B2               UXTH     R0,R0            ;; ZeroExt  R0,R0,#+16,#+16
   \   0000017A   ABE0               B.N      ??OSEventPendMulti_7
    471              }
    472          /*$PAGE*/
    473                                                                  /* Otherwise, must wait until any event occurs */
    474              OSTCBCur->OSTCBStat     |= events_stat  |           /* Resource not available, ...                 */
    475                                         OS_STAT_MULTI;           /* ... pend on multiple events                 */
   \                     ??OSEventPendMulti_24:
   \   0000017C   ........           LDR.W    R0,??DataTable28
   \   00000180   0068               LDR      R0,[R0, #+0]
   \   00000182   90F83400           LDRB     R0,[R0, #+52]
   \   00000186   59F08001           ORRS     R1,R9,#0x80
   \   0000018A   0843               ORRS     R0,R1,R0
   \   0000018C   ........           LDR.W    R1,??DataTable28
   \   00000190   0968               LDR      R1,[R1, #+0]
   \   00000192   81F83400           STRB     R0,[R1, #+52]
    476              OSTCBCur->OSTCBStatPend  = OS_STAT_PEND_OK;
   \   00000196   ........           LDR.W    R0,??DataTable28
   \   0000019A   0068               LDR      R0,[R0, #+0]
   \   0000019C   0021               MOVS     R1,#+0
   \   0000019E   80F83510           STRB     R1,[R0, #+53]
    477              OSTCBCur->OSTCBDly       = timeout;                 /* Store pend timeout in TCB                   */
   \   000001A2   ........           LDR.W    R0,??DataTable28
   \   000001A6   0068               LDR      R0,[R0, #+0]
   \   000001A8   0499               LDR      R1,[SP, #+16]
   \   000001AA   0163               STR      R1,[R0, #+48]
    478              OS_EventTaskWaitMulti(pevents_pend);                /* Suspend task until events or timeout occurs */
   \   000001AC   0398               LDR      R0,[SP, #+12]
   \   000001AE   ........           BL       OS_EventTaskWaitMulti
    479          
    480              OS_EXIT_CRITICAL();
   \   000001B2   0098               LDR      R0,[SP, #+0]
   \   000001B4   ........           BL       OS_CPU_SR_Restore
    481              OS_Sched();                                         /* Find next highest priority task ready       */
   \   000001B8   ........           BL       OS_Sched
    482              OS_ENTER_CRITICAL();
   \   000001BC   ........           BL       OS_CPU_SR_Save
   \   000001C0   0090               STR      R0,[SP, #+0]
    483          
    484              switch (OSTCBCur->OSTCBStatPend) {                  /* Handle event posted, aborted, or timed-out  */
   \   000001C2   ........           LDR.W    R0,??DataTable28
   \   000001C6   0068               LDR      R0,[R0, #+0]
   \   000001C8   90F83500           LDRB     R0,[R0, #+53]
   \   000001CC   0028               CMP      R0,#+0
   \   000001CE   01D0               BEQ.N    ??OSEventPendMulti_25
   \   000001D0   0228               CMP      R0,#+2
   \   000001D2   1DD1               BNE.N    ??OSEventPendMulti_26
    485                  case OS_STAT_PEND_OK:
    486                  case OS_STAT_PEND_ABORT:
    487                       pevent = OSTCBCur->OSTCBEventPtr;
   \                     ??OSEventPendMulti_25:
   \   000001D4   ........           LDR.W    R0,??DataTable28
   \   000001D8   0068               LDR      R0,[R0, #+0]
   \   000001DA   C069               LDR      R0,[R0, #+28]
   \   000001DC   0500               MOVS     R5,R0
    488                       if (pevent != (OS_EVENT *)0) {             /* If task event ptr != NULL, ...              */
   \   000001DE   002D               CMP      R5,#+0
   \   000001E0   09D0               BEQ.N    ??OSEventPendMulti_27
    489                          *pevents_rdy++   =  pevent;             /* ... return available event ...              */
   \   000001E2   CBF80050           STR      R5,[R11, #+0]
   \   000001E6   1BF1040B           ADDS     R11,R11,#+4
    490                          *pevents_rdy     = (OS_EVENT *)0;       /* ... & NULL terminate return event array     */
   \   000001EA   0020               MOVS     R0,#+0
   \   000001EC   CBF80000           STR      R0,[R11, #+0]
    491                            events_rdy_nbr =  1;
   \   000001F0   0120               MOVS     R0,#+1
   \   000001F2   8046               MOV      R8,R0
   \   000001F4   0BE0               B.N      ??OSEventPendMulti_28
    492          
    493                       } else {                                   /* Else NO event available, handle as timeout  */
    494                           OSTCBCur->OSTCBStatPend = OS_STAT_PEND_TO;
   \                     ??OSEventPendMulti_27:
   \   000001F6   ........           LDR.W    R0,??DataTable28
   \   000001FA   0068               LDR      R0,[R0, #+0]
   \   000001FC   0121               MOVS     R1,#+1
   \   000001FE   80F83510           STRB     R1,[R0, #+53]
    495                           OS_EventTaskRemoveMulti(OSTCBCur, pevents_pend);
   \   00000202   0399               LDR      R1,[SP, #+12]
   \   00000204   ........           LDR.W    R0,??DataTable28
   \   00000208   0068               LDR      R0,[R0, #+0]
   \   0000020A   ........           BL       OS_EventTaskRemoveMulti
    496                       }
    497                       break;
   \                     ??OSEventPendMulti_28:
   \   0000020E   05E0               B.N      ??OSEventPendMulti_29
    498          
    499                  case OS_STAT_PEND_TO:                           /* If events timed out, ...                    */
    500                  default:                                        /* ... remove task from events' wait lists     */
    501                       OS_EventTaskRemoveMulti(OSTCBCur, pevents_pend);
   \                     ??OSEventPendMulti_26:
   \   00000210   0399               LDR      R1,[SP, #+12]
   \   00000212   ........           LDR.W    R0,??DataTable28
   \   00000216   0068               LDR      R0,[R0, #+0]
   \   00000218   ........           BL       OS_EventTaskRemoveMulti
    502                       break;
    503              }
    504          
    505              switch (OSTCBCur->OSTCBStatPend) {
   \                     ??OSEventPendMulti_29:
   \   0000021C   ........           LDR.W    R0,??DataTable28
   \   00000220   0068               LDR      R0,[R0, #+0]
   \   00000222   90F83500           LDRB     R0,[R0, #+53]
   \   00000226   0028               CMP      R0,#+0
   \   00000228   02D0               BEQ.N    ??OSEventPendMulti_30
   \   0000022A   0228               CMP      R0,#+2
   \   0000022C   23D0               BEQ.N    ??OSEventPendMulti_31
   \   0000022E   2AE0               B.N      ??OSEventPendMulti_32
    506                  case OS_STAT_PEND_OK:
    507                       switch (pevent->OSEventType) { 

⌨️ 快捷键说明

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