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

📄 os_sem.lst

📁 ARM仿真案例
💻 LST
📖 第 1 页 / 共 4 页
字号:
   \   0000001E   0BD0               BEQ      ??OSSemPost_3
    339                  OS_EventTaskRdy(pevent, (void *)0, OS_STAT_SEM);   /* Ready highest prio task waiting on event */
   \   00000020   0122               MOVS     R2,#+1
   \   00000022   0021               MOVS     R1,#+0
   \   00000024   2000               MOVS     R0,R4
   \   00000026   ........           _BLF     OS_EventTaskRdy,??OS_EventTaskRdy??rT
    340                  OS_EXIT_CRITICAL();
   \   0000002A   2800               MOVS     R0,R5
   \   0000002C   ........           _BLF     OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rT
    341                  OS_Sched();                                        /* Find highest priority task ready to run  */
   \   00000030   ........           _BLF     OS_Sched,??OS_Sched??rT
    342                  return (OS_NO_ERR);
   \                     ??OSSemPost_4:
   \   00000034   0020               MOVS     R0,#+0
   \   00000036   0DE0               B        ??OSSemPost_1
    343              }
    344              if (pevent->OSEventCnt < 65535u) {                /* Make sure semaphore will not overflow         */
   \                     ??OSSemPost_3:
   \   00000038   6088               LDRH     R0,[R4, #+2]
   \   0000003A   0849               LDR      R1,??OSSemPost_5  ;; 0xffff
   \   0000003C   8842               CMP      R0,R1
   \   0000003E   05D0               BEQ      ??OSSemPost_6
    345                  pevent->OSEventCnt++;                         /* Increment semaphore count to register event   */
   \   00000040   401C               ADDS     R0,R0,#+1
   \   00000042   6080               STRH     R0,[R4, #+2]
    346                  OS_EXIT_CRITICAL();
   \   00000044   2800               MOVS     R0,R5
   \   00000046   ........           _BLF     OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rT
    347                  return (OS_NO_ERR);
   \   0000004A   F3E7               B.N      ??OSSemPost_4
    348              }
    349              OS_EXIT_CRITICAL();                               /* Semaphore value has reached its maximum       */
   \                     ??OSSemPost_6:
   \   0000004C   2800               MOVS     R0,R5
   \   0000004E   ........           _BLF     OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rT
    350              return (OS_SEM_OVF);
   \   00000052   3220               MOVS     R0,#+50
   \                     ??OSSemPost_1:
   \   00000054   30BC               POP      {R4,R5}
   \   00000056   02BC               POP      {R1}
   \   00000058   0847               BX       R1               ;; return
   \   0000005A   C046               Nop      
   \                     ??OSSemPost_5:
   \   0000005C   FFFF0000           DC32     0xffff
    351          }
    352          /*$PAGE*/
    353          /*
    354          *********************************************************************************************************
    355          *                                          QUERY A SEMAPHORE
    356          *
    357          * Description: This function obtains information about a semaphore
    358          *
    359          * Arguments  : pevent        is a pointer to the event control block associated with the desired
    360          *                            semaphore
    361          *
    362          *              p_sem_data    is a pointer to a structure that will contain information about the
    363          *                            semaphore.
    364          *
    365          * Returns    : OS_NO_ERR           The call was successful and the message was sent
    366          *              OS_ERR_EVENT_TYPE   If you are attempting to obtain data from a non semaphore.
    367          *              OS_ERR_PEVENT_NULL  If 'pevent' is a NULL pointer.
    368          *********************************************************************************************************
    369          */
    370          
    371          #if OS_SEM_QUERY_EN > 0

   \                                 In segment CODE, align 4, keep-with-next
    372          INT8U  OSSemQuery (OS_EVENT *pevent, OS_SEM_DATA *p_sem_data)
    373          {
   \                     OSSemQuery:
   \   00000000   30B5               PUSH     {R4,R5,LR}
   \   00000002   0400               MOVS     R4,R0
   \   00000004   0D00               MOVS     R5,R1
    374          #if OS_CRITICAL_METHOD == 3                                /* Allocate storage for CPU status register */
    375              OS_CPU_SR  cpu_sr;
    376          #endif    
    377              INT8U     *psrc;
    378              INT8U     *pdest;
    379          
    380          
    381          #if OS_ARG_CHK_EN > 0
    382              if (pevent == (OS_EVENT *)0) {                         /* Validate 'pevent'                        */
   \   00000006   002C               CMP      R4,#+0
   \   00000008   01D1               BNE      ??OSSemQuery_0
    383                  return (OS_ERR_PEVENT_NULL);
   \   0000000A   0420               MOVS     R0,#+4
   \   0000000C   21E0               B        ??OSSemQuery_1
    384              }
    385          #endif
    386              if (pevent->OSEventType != OS_EVENT_TYPE_SEM) {        /* Validate event block type                */
   \                     ??OSSemQuery_0:
   \   0000000E   2078               LDRB     R0,[R4, #+0]
   \   00000010   0328               CMP      R0,#+3
   \   00000012   01D0               BEQ      ??OSSemQuery_2
    387                  return (OS_ERR_EVENT_TYPE);
   \   00000014   0120               MOVS     R0,#+1
   \   00000016   1CE0               B        ??OSSemQuery_1
    388              }
    389              OS_ENTER_CRITICAL();
   \                     ??OSSemQuery_2:
   \   00000018   ........           _BLF     OS_CPU_SR_Save,??OS_CPU_SR_Save??rT
    390              p_sem_data->OSEventGrp = pevent->OSEventGrp;           /* Copy message mailbox wait list           */
   \   0000001C   6178               LDRB     R1,[R4, #+1]
   \   0000001E   A972               STRB     R1,[R5, #+10]
    391              psrc              = &pevent->OSEventTbl[0];
   \   00000020   2100               MOVS     R1,R4
    392              pdest             = &p_sem_data->OSEventTbl[0];
   \   00000022   AA1C               ADDS     R2,R5,#+2
    393          #if OS_EVENT_TBL_SIZE > 0
    394              *pdest++ = *psrc++;
   \   00000024   0B7A               LDRB     R3,[R1, #+8]
   \   00000026   1370               STRB     R3,[R2, #+0]
    395          #endif
    396          
    397          #if OS_EVENT_TBL_SIZE > 1
    398              *pdest++ = *psrc++;
   \   00000028   4B7A               LDRB     R3,[R1, #+9]
   \   0000002A   5370               STRB     R3,[R2, #+1]
    399          #endif
    400          
    401          #if OS_EVENT_TBL_SIZE > 2
    402              *pdest++ = *psrc++;
   \   0000002C   8B7A               LDRB     R3,[R1, #+10]
   \   0000002E   9370               STRB     R3,[R2, #+2]
    403          #endif
    404          
    405          #if OS_EVENT_TBL_SIZE > 3
    406              *pdest++ = *psrc++;
   \   00000030   CB7A               LDRB     R3,[R1, #+11]
   \   00000032   D370               STRB     R3,[R2, #+3]
    407          #endif
    408          
    409          #if OS_EVENT_TBL_SIZE > 4
    410              *pdest++ = *psrc++;
   \   00000034   0B7B               LDRB     R3,[R1, #+12]
   \   00000036   1371               STRB     R3,[R2, #+4]
    411          #endif
    412          
    413          #if OS_EVENT_TBL_SIZE > 5
    414              *pdest++ = *psrc++;
   \   00000038   4B7B               LDRB     R3,[R1, #+13]
   \   0000003A   5371               STRB     R3,[R2, #+5]
   \   0000003C   0E31               ADDS     R1,R1,#+14
   \   0000003E   921D               ADDS     R2,R2,#+6
    415          #endif
    416          
    417          #if OS_EVENT_TBL_SIZE > 6
    418              *pdest++ = *psrc++;
   \   00000040   0B78               LDRB     R3,[R1, #+0]
   \   00000042   1370               STRB     R3,[R2, #+0]
    419          #endif
    420          
    421          #if OS_EVENT_TBL_SIZE > 7
    422              *pdest   = *psrc;
   \   00000044   4978               LDRB     R1,[R1, #+1]
   \   00000046   5170               STRB     R1,[R2, #+1]
    423          #endif
    424              p_sem_data->OSCnt      = pevent->OSEventCnt;           /* Get semaphore count                      */
   \   00000048   6188               LDRH     R1,[R4, #+2]
   \   0000004A   2980               STRH     R1,[R5, #+0]
    425              OS_EXIT_CRITICAL();
   \   0000004C   ........           _BLF     OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rT
    426              return (OS_NO_ERR);
   \   00000050   0020               MOVS     R0,#+0
   \                     ??OSSemQuery_1:
   \   00000052   30BC               POP      {R4,R5}
   \   00000054   02BC               POP      {R1}
   \   00000056   0847               BX       R1               ;; return
    427          }

   \                                 In segment CODE, align 4, keep-with-next
   \                     ??DataTable6:
   \   00000000   ........           DC32     OSEventFreeList

   \                                 In segment CODE, align 4, keep-with-next
   \                     ??DataTable7:
   \   00000000   ........           DC32     OSIntNesting
    428          #endif                                                     /* OS_SEM_QUERY_EN                          */
    429          #endif                                                     /* OS_SEM_EN                                */

   Maximum stack usage in bytes:

     Function    CSTACK
     --------    ------
     OSSemAccept    12
     OSSemCreate    12
     OSSemDel       24
     OSSemPend      20
     OSSemPost      12
     OSSemQuery     12


   Segment part sizes:

     Function/Label Bytes
     -------------- -----
     OSSemAccept      42
     OSSemCreate      72
     OSSemDel        198
     OSSemPend       168
     OSSemPost        96
     OSSemQuery       88
     ??DataTable6      4
     ??DataTable7      4
      Others         104

 
 776 bytes in segment CODE
 
 672 bytes of CODE memory (+ 104 bytes shared)

Errors: none
Warnings: none

⌨️ 快捷键说明

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