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

📄 os_core.lst

📁 编译环境是 iar EWARM ,STM32 下的UCOSII
💻 LST
📖 第 1 页 / 共 5 页
字号:
    454                  return (events_rdy_nbr);
   \   000000FE   5846               MOV      R0,R11
   \   00000100   80B2               UXTH     R0,R0
   \   00000102   76E0               B.N      ??OSEventPendMulti_3
    455              }
    456          /*$PAGE*/
    457                                                                  /* Otherwise, must wait until any event occurs */
    458              OSTCBCur->OSTCBStat     |= events_stat  |           /* Resource not available, ...                 */
    459                                         OS_STAT_MULTI;           /* ... pend on multiple events                 */
   \                     ??OSEventPendMulti_13:
   \   00000104   DAF82010           LDR      R1,[R10, #+32]
   \   00000108   0A00               MOVS     R2,R1
   \   0000010A   3032               ADDS     R2,R2,#+48
   \   0000010C   1278               LDRB     R2,[R2, #+0]
   \   0000010E   50F08000           ORRS     R0,R0,#0x80
   \   00000112   1043               ORRS     R0,R0,R2
   \   00000114   81F83000           STRB     R0,[R1, #+48]
    460              OSTCBCur->OSTCBStatPend  = OS_STAT_PEND_OK;
   \   00000118   DAF82000           LDR      R0,[R10, #+32]
   \   0000011C   3130               ADDS     R0,R0,#+49
   \   0000011E   4946               MOV      R1,R9
   \   00000120   0170               STRB     R1,[R0, #+0]
    461              OSTCBCur->OSTCBDly       = timeout;                 /* Store pend timeout in TCB                   */
   \   00000122   DAF82000           LDR      R0,[R10, #+32]
   \   00000126   BDF80210           LDRH     R1,[SP, #+2]
   \   0000012A   C185               STRH     R1,[R0, #+46]
    462              OS_EventTaskWaitMulti(pevents_pend);                /* Suspend task until events or timeout occurs */
   \   0000012C   4046               MOV      R0,R8
   \   0000012E   ........           BL       OS_EventTaskWaitMulti
    463          
    464              OS_EXIT_CRITICAL();
   \   00000132   0198               LDR      R0,[SP, #+4]
   \   00000134   ........           _BLF     OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rT
    465              OS_Sched();                                         /* Find next highest priority task ready       */
   \   00000138   ........           BL       OS_Sched
    466              OS_ENTER_CRITICAL();
   \   0000013C   ........           _BLF     OS_CPU_SR_Save,??OS_CPU_SR_Save??rT
   \   00000140   0190               STR      R0,[SP, #+4]
    467          
    468              switch (OSTCBCur->OSTCBStatPend) {                  /* Handle event posted, aborted, or timed-out  */
   \   00000142   DAF82000           LDR      R0,[R10, #+32]
   \   00000146   0100               MOVS     R1,R0
   \   00000148   1C31               ADDS     R1,R1,#+28
   \   0000014A   4A7D               LDRB     R2,[R1, #+21]
   \   0000014C   002A               CMP      R2,#+0
   \   0000014E   01D0               BEQ.N    ??OSEventPendMulti_14
   \   00000150   022A               CMP      R2,#+2
   \   00000152   11D1               BNE.N    ??OSEventPendMulti_15
    469                  case OS_STAT_PEND_OK:
    470                  case OS_STAT_PEND_ABORT:
    471                       pevent = OSTCBCur->OSTCBEventPtr;
   \                     ??OSEventPendMulti_14:
   \   00000154   0F68               LDR      R7,[R1, #+0]
    472                       if (pevent != (OS_EVENT *)0) {             /* If task event ptr != NULL, ...              */
   \   00000156   002F               CMP      R7,#+0
   \   00000158   06D0               BEQ.N    ??OSEventPendMulti_16
    473                          *pevents_rdy++ =  pevent;               /* ... return available event ...              */
   \   0000015A   2F60               STR      R7,[R5, #+0]
   \   0000015C   2D1D               ADDS     R5,R5,#+4
    474                          *pevents_rdy   = (OS_EVENT *)0;         /* ... & NULL terminate return event array     */
   \   0000015E   C5F80090           STR      R9,[R5, #+0]
    475                            events_rdy_nbr++;
   \   00000162   0298               LDR      R0,[SP, #+8]
   \   00000164   8346               MOV      R11,R0
   \   00000166   0AE0               B.N      ??OSEventPendMulti_17
    476          
    477                       } else {                                   /* Else NO event available, handle as timeout  */
    478                           OSTCBCur->OSTCBStatPend = OS_STAT_PEND_TO;
   \                     ??OSEventPendMulti_16:
   \   00000168   0120               MOVS     R0,#+1
   \   0000016A   4875               STRB     R0,[R1, #+21]
    479                           OS_EventTaskRemoveMulti(OSTCBCur, pevents_pend);
   \   0000016C   4146               MOV      R1,R8
   \   0000016E   DAF82000           LDR      R0,[R10, #+32]
   \   00000172   ........           BL       OS_EventTaskRemoveMulti
   \   00000176   02E0               B.N      ??OSEventPendMulti_17
    480                       }
    481          			 break;
    482          
    483                  case OS_STAT_PEND_TO:                           /* If events timed out, ...                    */
    484                  default:                                        /* ... remove task from events' wait lists     */
    485                       OS_EventTaskRemoveMulti(OSTCBCur, pevents_pend);
   \                     ??OSEventPendMulti_15:
   \   00000178   4146               MOV      R1,R8
   \   0000017A   ........           BL       OS_EventTaskRemoveMulti
    486                       break;
    487              }
    488          
    489              switch (OSTCBCur->OSTCBStatPend) {
   \                     ??OSEventPendMulti_17:
   \   0000017E   DAF82000           LDR      R0,[R10, #+32]
   \   00000182   2430               ADDS     R0,R0,#+36
   \   00000184   417B               LDRB     R1,[R0, #+13]
   \   00000186   0029               CMP      R1,#+0
   \   00000188   02D0               BEQ.N    ??OSEventPendMulti_18
   \   0000018A   0229               CMP      R1,#+2
   \   0000018C   0ED0               BEQ.N    ??OSEventPendMulti_19
   \   0000018E   12E0               B.N      ??OSEventPendMulti_20
    490                  case OS_STAT_PEND_OK:
    491                       switch (pevent->OSEventType) {             /* Return event's message                      */
   \                     ??OSEventPendMulti_18:
   \   00000190   3978               LDRB     R1,[R7, #+0]
   \   00000192   491E               SUBS     R1,R1,#+1
   \   00000194   0129               CMP      R1,#+1
   \   00000196   04D9               BLS.N    ??OSEventPendMulti_21
   \   00000198   891E               SUBS     R1,R1,#+2
   \   0000019A   9BD1               BNE.N    ??OSEventPendMulti_11
    492          #if (OS_SEM_EN > 0)
    493                           case OS_EVENT_TYPE_SEM:
    494                               *pmsgs_rdy++ = (void *)0;          /* NO message returned for semaphores          */
   \   0000019C   C6F80090           STR      R9,[R6, #+0]
   \   000001A0   01E0               B.N      ??OSEventPendMulti_22
    495                                break;
    496          #endif
    497          
    498          #if ((OS_MBOX_EN > 0) ||                 \
    499              ((OS_Q_EN    > 0) && (OS_MAX_QS > 0)))
    500                           case OS_EVENT_TYPE_MBOX:
    501                           case OS_EVENT_TYPE_Q:
    502                               *pmsgs_rdy++ = (void *)OSTCBCur->OSTCBMsg;     /* Return received message         */
   \                     ??OSEventPendMulti_21:
   \   000001A2   0068               LDR      R0,[R0, #+0]
   \   000001A4   3060               STR      R0,[R6, #+0]
    503                                break;
    504          #endif
    505          
    506                           case OS_EVENT_TYPE_MUTEX:                                       
    507                           case OS_EVENT_TYPE_FLAG:
    508                           default:           
    509                                OS_EXIT_CRITICAL();
    510                               *pevents_rdy = (OS_EVENT *)0;      /* NULL terminate return event array           */
    511                               *perr        =  OS_ERR_EVENT_TYPE;
    512                                return (events_rdy_nbr);
    513                       }
    514                      *perr = OS_ERR_NONE;
   \                     ??OSEventPendMulti_22:
   \   000001A6   4846               MOV      R0,R9
   \   000001A8   2070               STRB     R0,[R4, #+0]
   \   000001AA   08E0               B.N      ??OSEventPendMulti_23
    515                       break;
    516          
    517                  case OS_STAT_PEND_ABORT:
    518                      *pmsgs_rdy++ = (void *)0;                   /* NO message returned for abort               */
   \                     ??OSEventPendMulti_19:
   \   000001AC   C6F80090           STR      R9,[R6, #+0]
    519                      *perr        =  OS_ERR_PEND_ABORT;          /* Indicate that event  aborted                */
   \   000001B0   0E20               MOVS     R0,#+14
   \   000001B2   2070               STRB     R0,[R4, #+0]
   \   000001B4   03E0               B.N      ??OSEventPendMulti_23
    520                       break;
    521                                                                  
    522                  case OS_STAT_PEND_TO:                                                
    523                  default:        
    524                      *pmsgs_rdy++ = (void *)0;                   /* NO message returned for timeout             */
   \                     ??OSEventPendMulti_20:
   \   000001B6   C6F80090           STR      R9,[R6, #+0]
    525                      *perr        =  OS_ERR_TIMEOUT;             /* Indicate that events timed out              */
   \   000001BA   0A20               MOVS     R0,#+10
   \   000001BC   2070               STRB     R0,[R4, #+0]
    526                       break;
    527              }
    528          
    529              OSTCBCur->OSTCBStat          =  OS_STAT_RDY;        /* Set   task  status to ready                 */
   \                     ??OSEventPendMulti_23:
   \   000001BE   DAF82000           LDR      R0,[R10, #+32]
   \   000001C2   3030               ADDS     R0,R0,#+48
   \   000001C4   4946               MOV      R1,R9
   \   000001C6   0170               STRB     R1,[R0, #+0]
    530              OSTCBCur->OSTCBStatPend      =  OS_STAT_PEND_OK;    /* Clear pend  status                          */
   \   000001C8   DAF82000           LDR      R0,[R10, #+32]
   \   000001CC   3130               ADDS     R0,R0,#+49
   \   000001CE   0170               STRB     R1,[R0, #+0]
    531              OSTCBCur->OSTCBEventPtr      = (OS_EVENT  *)0;      /* Clear event pointers                        */
   \   000001D0   DAF82000           LDR      R0,[R10, #+32]
   \   000001D4   C0F81C90           STR      R9,[R0, #+28]
    532              OSTCBCur->OSTCBEventMultiPtr = (OS_EVENT **)0;
   \   000001D8   DAF82000           LDR      R0,[R10, #+32]
   \   000001DC   C0F82090           STR      R9,[R0, #+32]
    533              OSTCBCur->OSTCBMsg           = (void      *)0;      /* Clear task  message                         */
   \   000001E0   DAF82000           LDR      R0,[R10, #+32]
   \   000001E4   C0F82490           STR      R9,[R0, #+36]
    534              OS_EXIT_CRITICAL();
   \   000001E8   0198               LDR      R0,[SP, #+4]
   \   000001EA   ........           _BLF     OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rT
    535          
    536              return (events_rdy_nbr);
   \   000001EE   5846               MOV      R0,R11
   \   000001F0   80B2               UXTH     R0,R0
   \                     ??OSEventPendMulti_3:
   \   000001F2   BDE8FE8F           POP      {R1-R11,PC}      ;; return
    537          }
    538          #endif
    539          
    540          /*$PAGE*/
    541          /*
    542          *********************************************************************************************************
    543          *                                             INITIALIZATION
    544          *
    545          * Description: This function is used to initialize the internals of uC/OS-II and MUST be called prior to
    546          *              creating any uC/OS-II object and, prior to calling OSStart().
    547          *
    548          * Arguments  : none
    549          *
    550          * Returns    : none
    551          *********************************************************************************************************
    552          */
    553          

   \                                 In segment CODE, align 4, keep-with-next
    554          void  OSInit (void)
    555          {
   \                     OSInit:
   \   00000000   00B5               PUSH     {LR}
    556              OSInitHookBegin();                        

⌨️ 快捷键说明

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