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

📄 os_core.lst

📁 编译环境是 iar EWARM ,STM32 下的UCOSII
💻 LST
📖 第 1 页 / 共 5 页
字号:
    347                      case OS_EVENT_TYPE_SEM:
    348                           break;
    349          #endif
    350          #if (OS_MBOX_EN > 0)
    351                      case OS_EVENT_TYPE_MBOX:
    352                           break;
    353          #endif
    354          #if ((OS_Q_EN   > 0) && (OS_MAX_QS > 0))
    355                      case OS_EVENT_TYPE_Q:
    356                           break;
    357          #endif
    358          
    359                      case OS_EVENT_TYPE_MUTEX:                                            
    360                      case OS_EVENT_TYPE_FLAG:
    361                      default:           
    362                          *perr = OS_ERR_EVENT_TYPE;
    363                           return (0);
    364                  }
    365                  pevents++;
   \                     ??OSEventPendMulti_1:
   \   0000001E   091D               ADDS     R1,R1,#+4
    366                  pevent = *pevents;
   \   00000020   0F68               LDR      R7,[R1, #+0]
   \                     ??OSEventPendMulti_0:
   \   00000022   002F               CMP      R7,#+0
   \   00000024   08D0               BEQ.N    ??OSEventPendMulti_2
   \   00000026   3878               LDRB     R0,[R7, #+0]
   \   00000028   0128               CMP      R0,#+1
   \   0000002A   F8D0               BEQ.N    ??OSEventPendMulti_1
   \   0000002C   0328               CMP      R0,#+3
   \   0000002E   F6D0               BEQ.N    ??OSEventPendMulti_1
   \   00000030   0120               MOVS     R0,#+1
   \   00000032   2070               STRB     R0,[R4, #+0]
   \   00000034   4846               MOV      R0,R9
   \   00000036   DCE0               B.N      ??OSEventPendMulti_3
    367              }
    368          
    369              if (OSIntNesting  > 0) {                            /* See if called from ISR ...                  */
   \                     ??OSEventPendMulti_2:
   \   00000038   ....               LDR.N    R0,??DataTable10  ;; OSCPUUsage
   \   0000003A   8246               MOV      R10,R0
   \   0000003C   9AF80200           LDRB     R0,[R10, #+2]
   \   00000040   0028               CMP      R0,#+0
   \   00000042   03D0               BEQ.N    ??OSEventPendMulti_4
    370                 *perr =  OS_ERR_PEND_ISR;                        /* ... can't PEND from an ISR                  */
   \   00000044   0220               MOVS     R0,#+2
   \   00000046   2070               STRB     R0,[R4, #+0]
    371                  return (0);
   \   00000048   4846               MOV      R0,R9
   \   0000004A   D2E0               B.N      ??OSEventPendMulti_3
    372              }
    373              if (OSLockNesting > 0) {                            /* See if called with scheduler locked ...     */
   \                     ??OSEventPendMulti_4:
   \   0000004C   9AF80300           LDRB     R0,[R10, #+3]
   \   00000050   0028               CMP      R0,#+0
   \   00000052   03D0               BEQ.N    ??OSEventPendMulti_5
    374                 *perr =  OS_ERR_PEND_LOCKED;                     /* ... can't PEND when locked                  */
   \   00000054   0D20               MOVS     R0,#+13
   \   00000056   2070               STRB     R0,[R4, #+0]
    375                  return (0);
   \   00000058   4846               MOV      R0,R9
   \   0000005A   CAE0               B.N      ??OSEventPendMulti_3
    376              }
    377          
    378          /*$PAGE*/
    379              OS_ENTER_CRITICAL();
   \                     ??OSEventPendMulti_5:
   \   0000005C   ........           _BLF     OS_CPU_SR_Save,??OS_CPU_SR_Save??rT
   \   00000060   0190               STR      R0,[SP, #+4]
    380              events_rdy     =  OS_FALSE;
   \   00000062   4846               MOV      R0,R9
   \   00000064   8DF80000           STRB     R0,[SP, #+0]
    381              events_rdy_nbr =  0;
   \   00000068   CB46               MOV      R11,R9
    382              events_stat    =  OS_STAT_RDY;
    383              pevents        =  pevents_pend;
   \   0000006A   4146               MOV      R1,R8
    384              pevent         = *pevents;
   \   0000006C   0F68               LDR      R7,[R1, #+0]
   \   0000006E   0DE0               B.N      ??OSEventPendMulti_6
    385              while (pevent != (OS_EVENT *)0) {                   /* See if any events already available         */
    386                  switch (pevent->OSEventType) {
    387          #if (OS_SEM_EN > 0)
    388                      case OS_EVENT_TYPE_SEM:
    389                           if (pevent->OSEventCnt > 0) {          /* If semaphore count > 0, resource available; */
    390                               pevent->OSEventCnt--;              /* ... decrement semaphore,                ... */
   \                     ??OSEventPendMulti_7:
   \   00000070   521E               SUBS     R2,R2,#+1
   \   00000072   3A81               STRH     R2,[R7, #+8]
    391                              *pevents_rdy++ =  pevent;           /* ... and return available semaphore event    */
   \   00000074   2F60               STR      R7,[R5, #+0]
   \   00000076   2D1D               ADDS     R5,R5,#+4
    392                                events_rdy   =  OS_TRUE;
   \   00000078   0122               MOVS     R2,#+1
   \   0000007A   8DF80020           STRB     R2,[SP, #+0]
    393                              *pmsgs_rdy++   = (void *)0;         /* NO message returned  for semaphores         */
   \   0000007E   C6F80090           STR      R9,[R6, #+0]
   \   00000082   361D               ADDS     R6,R6,#+4
    394                                events_rdy_nbr++;
   \   00000084   029A               LDR      R2,[SP, #+8]
   \   00000086   9346               MOV      R11,R2
    395          
    396                           } else {
    397                                events_stat |=  OS_STAT_SEM;      /* Configure multi-pend for semaphore events   */
    398                           }
    399                           break;
    400          #endif
    401          
    402          #if (OS_MBOX_EN > 0)
    403                      case OS_EVENT_TYPE_MBOX:
    404                           if (pevent->OSEventPtr != (void *)0) { /* If mailbox NOT empty;                   ... */
    405                                                                  /* ... return available message,           ... */
    406                              *pmsgs_rdy++         = (void *)pevent->OSEventPtr;
    407                               pevent->OSEventPtr  = (void *)0;
    408                              *pevents_rdy++       =  pevent;     /* ... and return available mailbox event      */
    409                                events_rdy         =  OS_TRUE;
    410                                events_rdy_nbr++;
    411          
    412                           } else {
    413                                events_stat |= OS_STAT_MBOX;      /* Configure multi-pend for mailbox events     */
    414                           }
    415                           break;
    416          #endif
    417          
    418          #if ((OS_Q_EN > 0) && (OS_MAX_QS > 0))
    419                      case OS_EVENT_TYPE_Q:
    420                           pq = (OS_Q *)pevent->OSEventPtr;
    421                           if (pq->OSQEntries > 0) {              /* If queue NOT empty;                     ... */
    422                                                                  /* ... return available message,           ... */
    423                              *pmsgs_rdy++ = (void *)*pq->OSQOut++;
    424                               if (pq->OSQOut == pq->OSQEnd) {    /* If OUT ptr at queue end, ...                */
    425                                   pq->OSQOut  = pq->OSQStart;    /* ... wrap   to queue start                   */
    426                               }
    427                               pq->OSQEntries--;                  /* Update number of queue entries              */
    428                              *pevents_rdy++ = pevent;            /* ... and return available queue event        */
    429                                events_rdy   = OS_TRUE;
    430                                events_rdy_nbr++;
    431          
    432                           } else {
    433                                events_stat |= OS_STAT_Q;         /* Configure multi-pend for queue events       */
    434                           }
    435                           break;
    436          #endif
    437          
    438                      case OS_EVENT_TYPE_MUTEX:                                            
    439                      case OS_EVENT_TYPE_FLAG:
    440                      default:           
    441                           OS_EXIT_CRITICAL();
    442                          *pevents_rdy = (OS_EVENT *)0;           /* NULL terminate return event array           */
    443                          *perr        =  OS_ERR_EVENT_TYPE;
    444                           return (events_rdy_nbr);
    445                  }
    446                  pevents++;
   \                     ??OSEventPendMulti_8:
   \   00000088   091D               ADDS     R1,R1,#+4
    447                  pevent = *pevents;
   \   0000008A   0F68               LDR      R7,[R1, #+0]
   \                     ??OSEventPendMulti_6:
   \   0000008C   5A46               MOV      R2,R11
   \   0000008E   521C               ADDS     R2,R2,#+1
   \   00000090   92B2               UXTH     R2,R2
   \   00000092   0292               STR      R2,[SP, #+8]
   \   00000094   002F               CMP      R7,#+0
   \   00000096   27D0               BEQ.N    ??OSEventPendMulti_9
   \   00000098   3A78               LDRB     R2,[R7, #+0]
   \   0000009A   012A               CMP      R2,#+1
   \   0000009C   07D0               BEQ.N    ??OSEventPendMulti_10
   \   0000009E   032A               CMP      R2,#+3
   \   000000A0   18D1               BNE.N    ??OSEventPendMulti_11
   \   000000A2   3A89               LDRH     R2,[R7, #+8]
   \   000000A4   002A               CMP      R2,#+0
   \   000000A6   E3D1               BNE.N    ??OSEventPendMulti_7
   \   000000A8   50F00100           ORRS     R0,R0,#0x1
   \   000000AC   ECE7               B.N      ??OSEventPendMulti_8
   \                     ??OSEventPendMulti_10:
   \   000000AE   7A68               LDR      R2,[R7, #+4]
   \   000000B0   002A               CMP      R2,#+0
   \   000000B2   0BD0               BEQ.N    ??OSEventPendMulti_12
   \   000000B4   3260               STR      R2,[R6, #+0]
   \   000000B6   361D               ADDS     R6,R6,#+4
   \   000000B8   C7F80490           STR      R9,[R7, #+4]
   \   000000BC   2F60               STR      R7,[R5, #+0]
   \   000000BE   2D1D               ADDS     R5,R5,#+4
   \   000000C0   0122               MOVS     R2,#+1
   \   000000C2   8DF80020           STRB     R2,[SP, #+0]
   \   000000C6   029A               LDR      R2,[SP, #+8]
   \   000000C8   9346               MOV      R11,R2
   \   000000CA   DDE7               B.N      ??OSEventPendMulti_8
   \                     ??OSEventPendMulti_12:
   \   000000CC   50F00200           ORRS     R0,R0,#0x2
   \   000000D0   C0B2               UXTB     R0,R0
   \   000000D2   D9E7               B.N      ??OSEventPendMulti_8
   \                     ??OSEventPendMulti_11:
   \   000000D4   0198               LDR      R0,[SP, #+4]
   \   000000D6   ........           _BLF     OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rT
   \   000000DA   C5F80090           STR      R9,[R5, #+0]
   \   000000DE   0120               MOVS     R0,#+1
   \   000000E0   2070               STRB     R0,[R4, #+0]
   \   000000E2   5846               MOV      R0,R11
   \   000000E4   80B2               UXTH     R0,R0
   \   000000E6   84E0               B.N      ??OSEventPendMulti_3
    448              }
    449          
    450              if ( events_rdy == OS_TRUE) {                       /* Return any events already available         */
   \                     ??OSEventPendMulti_9:
   \   000000E8   9DF80010           LDRB     R1,[SP, #+0]
   \   000000EC   0129               CMP      R1,#+1
   \   000000EE   09D1               BNE.N    ??OSEventPendMulti_13
    451                 *pevents_rdy = (OS_EVENT *)0;                    /* NULL terminate return event array           */
   \   000000F0   C5F80090           STR      R9,[R5, #+0]
    452                  OS_EXIT_CRITICAL();
   \   000000F4   0198               LDR      R0,[SP, #+4]
   \   000000F6   ........           _BLF     OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rT
    453                 *perr        =  OS_ERR_NONE;
   \   000000FA   4846               MOV      R0,R9
   \   000000FC   2070               STRB     R0,[R4, #+0]

⌨️ 快捷键说明

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