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

📄 os_sem.lst

📁 ARM仿真案例
💻 LST
📖 第 1 页 / 共 4 页
字号:
   \   00000026   2000               MOVS     R0,R4
   \   00000028   ........           _BLF     OS_EventTaskRdy,??OS_EventTaskRdy??rT
    340                  OS_EXIT_CRITICAL();
   \   0000002C   2800               MOVS     R0,R5
   \   0000002E   ........           _BLF     OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rT
    341                  OS_Sched();                                        /* Find highest priority task ready to run  */
   \   00000032   ........           _BLF     OS_Sched,??OS_Sched??rT
    342                  return (OS_NO_ERR);
   \   00000036   0020               MOVS     R0,#+0
   \   00000038   0FE0               B        ??OSSemPost_1
    343              }
    344              if (pevent->OSEventCnt < 65535u) {                /* Make sure semaphore will not overflow         */
   \                     ??OSSemPost_3:
   \   0000003A   6088               LDRH     R0,[R4, #+2]
   \   0000003C   0849               LDR      R1,??OSSemPost_4  ;; 0xffff
   \   0000003E   8842               CMP      R0,R1
   \   00000040   07D0               BEQ      ??OSSemPost_5
    345                  pevent->OSEventCnt++;                         /* Increment semaphore count to register event   */
   \   00000042   6088               LDRH     R0,[R4, #+2]
   \   00000044   401C               ADDS     R0,R0,#+1
   \   00000046   6080               STRH     R0,[R4, #+2]
    346                  OS_EXIT_CRITICAL();
   \   00000048   2800               MOVS     R0,R5
   \   0000004A   ........           _BLF     OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rT
    347                  return (OS_NO_ERR);
   \   0000004E   0020               MOVS     R0,#+0
   \   00000050   03E0               B        ??OSSemPost_1
    348              }
    349              OS_EXIT_CRITICAL();                               /* Semaphore value has reached its maximum       */
   \                     ??OSSemPost_5:
   \   00000052   2800               MOVS     R0,R5
   \   00000054   ........           _BLF     OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rT
    350              return (OS_SEM_OVF);
   \   00000058   3220               MOVS     R0,#+50
   \                     ??OSSemPost_1:
   \   0000005A   30BC               POP      {R4,R5}
   \   0000005C   02BC               POP      {R1}
   \   0000005E   0847               BX       R1               ;; return
   \                     ??OSSemPost_4:
   \   00000060   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   2FE0               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   2AE0               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
   \   00000022   0831               ADDS     R1,R1,#+8
    392              pdest             = &p_sem_data->OSEventTbl[0];
   \   00000024   2A00               MOVS     R2,R5
   \   00000026   921C               ADDS     R2,R2,#+2
    393          #if OS_EVENT_TBL_SIZE > 0
    394              *pdest++ = *psrc++;
   \   00000028   0B78               LDRB     R3,[R1, #+0]
   \   0000002A   1370               STRB     R3,[R2, #+0]
   \   0000002C   491C               ADDS     R1,R1,#+1
   \   0000002E   521C               ADDS     R2,R2,#+1
    395          #endif
    396          
    397          #if OS_EVENT_TBL_SIZE > 1
    398              *pdest++ = *psrc++;
   \   00000030   0B78               LDRB     R3,[R1, #+0]
   \   00000032   1370               STRB     R3,[R2, #+0]
   \   00000034   491C               ADDS     R1,R1,#+1
   \   00000036   521C               ADDS     R2,R2,#+1
    399          #endif
    400          
    401          #if OS_EVENT_TBL_SIZE > 2
    402              *pdest++ = *psrc++;
   \   00000038   0B78               LDRB     R3,[R1, #+0]
   \   0000003A   1370               STRB     R3,[R2, #+0]
   \   0000003C   491C               ADDS     R1,R1,#+1
   \   0000003E   521C               ADDS     R2,R2,#+1
    403          #endif
    404          
    405          #if OS_EVENT_TBL_SIZE > 3
    406              *pdest++ = *psrc++;
   \   00000040   0B78               LDRB     R3,[R1, #+0]
   \   00000042   1370               STRB     R3,[R2, #+0]
   \   00000044   491C               ADDS     R1,R1,#+1
   \   00000046   521C               ADDS     R2,R2,#+1
    407          #endif
    408          
    409          #if OS_EVENT_TBL_SIZE > 4
    410              *pdest++ = *psrc++;
   \   00000048   0B78               LDRB     R3,[R1, #+0]
   \   0000004A   1370               STRB     R3,[R2, #+0]
   \   0000004C   491C               ADDS     R1,R1,#+1
   \   0000004E   521C               ADDS     R2,R2,#+1
    411          #endif
    412          
    413          #if OS_EVENT_TBL_SIZE > 5
    414              *pdest++ = *psrc++;
   \   00000050   0B78               LDRB     R3,[R1, #+0]
   \   00000052   1370               STRB     R3,[R2, #+0]
   \   00000054   491C               ADDS     R1,R1,#+1
   \   00000056   521C               ADDS     R2,R2,#+1
    415          #endif
    416          
    417          #if OS_EVENT_TBL_SIZE > 6
    418              *pdest++ = *psrc++;
   \   00000058   0B78               LDRB     R3,[R1, #+0]
   \   0000005A   1370               STRB     R3,[R2, #+0]
   \   0000005C   491C               ADDS     R1,R1,#+1
   \   0000005E   521C               ADDS     R2,R2,#+1
    419          #endif
    420          
    421          #if OS_EVENT_TBL_SIZE > 7
    422              *pdest   = *psrc;
   \   00000060   0978               LDRB     R1,[R1, #+0]
   \   00000062   1170               STRB     R1,[R2, #+0]
    423          #endif
    424              p_sem_data->OSCnt      = pevent->OSEventCnt;           /* Get semaphore count                      */
   \   00000064   6188               LDRH     R1,[R4, #+2]
   \   00000066   2980               STRH     R1,[R5, #+0]
    425              OS_EXIT_CRITICAL();
   \   00000068   ........           _BLF     OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rT
    426              return (OS_NO_ERR);
   \   0000006C   0020               MOVS     R0,#+0
   \                     ??OSSemQuery_1:
   \   0000006E   30BC               POP      {R4,R5}
   \   00000070   02BC               POP      {R1}
   \   00000072   0847               BX       R1               ;; return
    427          }

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

   \                                 In segment CODE, align 4, keep-with-next
   \                     ??DataTable10:
   \   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      50
     OSSemCreate      82
     OSSemDel        222
     OSSemPend       180
     OSSemPost       100
     OSSemQuery      116
     ??DataTable9      4
     ??DataTable10     4
      Others         104

 
 862 bytes in segment CODE
 
 758 bytes of CODE memory (+ 104 bytes shared)

Errors: none
Warnings: none

⌨️ 快捷键说明

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