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

📄 os_sem.lst

📁 lpc2478开发板基于IAR编译器移植ucos实验例程
💻 LST
📖 第 1 页 / 共 5 页
字号:
    422                  OS_Sched();                                   /* Find HPT ready to run                         */
   \   000000CC   ........           _BLF     OS_Sched,??OS_Sched??rA
    423                  *err = OS_ERR_PEND_ABORT;
   \   000000D0   0E00A0E3           MOV      R0,#+14
   \   000000D4   0000C6E5           STRB     R0,[R6, #+0]
    424                  return (nbr_tasks);
   \   000000D8   0700B0E1           MOVS     R0,R7
   \   000000DC   FF0010E2           ANDS     R0,R0,#0xFF      ;; Zero extend
   \   000000E0   040000EA           B        ??OSSemPendAbort_1
    425              }
    426              OS_EXIT_CRITICAL();
   \                     ??OSSemPendAbort_4:
   \   000000E4   0800B0E1           MOVS     R0,R8
   \   000000E8   ........           _BLF     OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rA
    427              *err = OS_ERR_NONE;
   \   000000EC   0000A0E3           MOV      R0,#+0
   \   000000F0   0000C6E5           STRB     R0,[R6, #+0]
    428              return (0);                                       /* No tasks waiting on semaphore                 */
   \   000000F4   0000A0E3           MOV      R0,#+0
   \                     ??OSSemPendAbort_1:
   \   000000F8   F081BDE8           POP      {R4-R8,PC}       ;; return
    429          }
    430          #endif
    431          
    432          /*$PAGE*/
    433          /*
    434          *********************************************************************************************************
    435          *                                         POST TO A SEMAPHORE
    436          *
    437          * Description: This function signals a semaphore
    438          *
    439          * Arguments  : pevent        is a pointer to the event control block associated with the desired
    440          *                            semaphore.
    441          *
    442          * Returns    : OS_ERR_NONE         The call was successful and the semaphore was signaled.
    443          *              OS_ERR_SEM_OVF      If the semaphore count exceeded its limit.  In other words, you have
    444          *                                  signalled the semaphore more often than you waited on it with either
    445          *                                  OSSemAccept() or OSSemPend().
    446          *              OS_ERR_EVENT_TYPE   If you didn't pass a pointer to a semaphore
    447          *              OS_ERR_PEVENT_NULL  If 'pevent' is a NULL pointer.
    448          *********************************************************************************************************
    449          */
    450          

   \                                 In segment CODE, align 4, keep-with-next
    451          INT8U  OSSemPost (OS_EVENT *pevent)
    452          {
   \                     OSSemPost:
   \   00000000   30402DE9           PUSH     {R4,R5,LR}
   \   00000004   0040B0E1           MOVS     R4,R0
    453          #if OS_CRITICAL_METHOD == 3                           /* Allocate storage for CPU status register      */
    454              OS_CPU_SR  cpu_sr = 0;
   \   00000008   0000A0E3           MOV      R0,#+0
   \   0000000C   0050B0E1           MOVS     R5,R0
    455          #endif
    456          
    457          
    458          
    459          #if OS_ARG_CHK_EN > 0
    460              if (pevent == (OS_EVENT *)0) {                    /* Validate 'pevent'                             */
   \   00000010   000054E3           CMP      R4,#+0
   \   00000014   0100001A           BNE      ??OSSemPost_0
    461                  return (OS_ERR_PEVENT_NULL);
   \   00000018   0400A0E3           MOV      R0,#+4
   \   0000001C   220000EA           B        ??OSSemPost_1
    462              }
    463          #endif
    464              if (pevent->OSEventType != OS_EVENT_TYPE_SEM) {   /* Validate event block type                     */
   \                     ??OSSemPost_0:
   \   00000020   0000D4E5           LDRB     R0,[R4, #+0]
   \   00000024   030050E3           CMP      R0,#+3
   \   00000028   0100000A           BEQ      ??OSSemPost_2
    465                  return (OS_ERR_EVENT_TYPE);
   \   0000002C   0100A0E3           MOV      R0,#+1
   \   00000030   1D0000EA           B        ??OSSemPost_1
    466              }
    467              OS_ENTER_CRITICAL();
   \                     ??OSSemPost_2:
   \   00000034   ........           _BLF     OS_CPU_SR_Save,??OS_CPU_SR_Save??rA
   \   00000038   0050B0E1           MOVS     R5,R0
    468              if (pevent->OSEventGrp != 0) {                    /* See if any task waiting for semaphore         */
   \   0000003C   0A00D4E5           LDRB     R0,[R4, #+10]
   \   00000040   000050E3           CMP      R0,#+0
   \   00000044   0900000A           BEQ      ??OSSemPost_3
    469                                                                /* Ready HPT waiting on event                    */
    470                  (void)OS_EventTaskRdy(pevent, (void *)0, OS_STAT_SEM, OS_STAT_PEND_OK);
   \   00000048   0030A0E3           MOV      R3,#+0
   \   0000004C   0120A0E3           MOV      R2,#+1
   \   00000050   0010A0E3           MOV      R1,#+0
   \   00000054   0400B0E1           MOVS     R0,R4
   \   00000058   ........           _BLF     OS_EventTaskRdy,??OS_EventTaskRdy??rA
    471                  OS_EXIT_CRITICAL();
   \   0000005C   0500B0E1           MOVS     R0,R5
   \   00000060   ........           _BLF     OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rA
    472                  OS_Sched();                                   /* Find HPT ready to run                         */
   \   00000064   ........           _BLF     OS_Sched,??OS_Sched??rA
    473                  return (OS_ERR_NONE);
   \   00000068   0000A0E3           MOV      R0,#+0
   \   0000006C   0E0000EA           B        ??OSSemPost_1
    474              }
    475              if (pevent->OSEventCnt < 65535u) {                /* Make sure semaphore will not overflow         */
   \                     ??OSSemPost_3:
   \   00000070   B800D4E1           LDRH     R0,[R4, #+8]
   \   00000074   FF10A0E3           MOV      R1,#+255
   \   00000078   FF1C81E3           ORR      R1,R1,#0xFF00
   \   0000007C   010050E1           CMP      R0,R1
   \   00000080   0600000A           BEQ      ??OSSemPost_4
    476                  pevent->OSEventCnt++;                         /* Increment semaphore count to register event   */
   \   00000084   B800D4E1           LDRH     R0,[R4, #+8]
   \   00000088   010090E2           ADDS     R0,R0,#+1
   \   0000008C   B800C4E1           STRH     R0,[R4, #+8]
    477                  OS_EXIT_CRITICAL();
   \   00000090   0500B0E1           MOVS     R0,R5
   \   00000094   ........           _BLF     OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rA
    478                  return (OS_ERR_NONE);
   \   00000098   0000A0E3           MOV      R0,#+0
   \   0000009C   020000EA           B        ??OSSemPost_1
    479              }
    480              OS_EXIT_CRITICAL();                               /* Semaphore value has reached its maximum       */
   \                     ??OSSemPost_4:
   \   000000A0   0500B0E1           MOVS     R0,R5
   \   000000A4   ........           _BLF     OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rA
    481              return (OS_ERR_SEM_OVF);
   \   000000A8   3200A0E3           MOV      R0,#+50
   \                     ??OSSemPost_1:
   \   000000AC   3080BDE8           POP      {R4,R5,PC}       ;; return
    482          }
    483          
    484          /*$PAGE*/
    485          /*
    486          *********************************************************************************************************
    487          *                                          QUERY A SEMAPHORE
    488          *
    489          * Description: This function obtains information about a semaphore
    490          *
    491          * Arguments  : pevent        is a pointer to the event control block associated with the desired
    492          *                            semaphore
    493          *
    494          *              p_sem_data    is a pointer to a structure that will contain information about the
    495          *                            semaphore.
    496          *
    497          * Returns    : OS_ERR_NONE         The call was successful and the message was sent
    498          *              OS_ERR_EVENT_TYPE   If you are attempting to obtain data from a non semaphore.
    499          *              OS_ERR_PEVENT_NULL  If 'pevent'     is a NULL pointer.
    500          *              OS_ERR_PDATA_NULL   If 'p_sem_data' is a NULL pointer
    501          *********************************************************************************************************
    502          */
    503          
    504          #if OS_SEM_QUERY_EN > 0

   \                                 In segment CODE, align 4, keep-with-next
    505          INT8U  OSSemQuery (OS_EVENT *pevent, OS_SEM_DATA *p_sem_data)
    506          {
   \                     OSSemQuery:
   \   00000000   F0432DE9           PUSH     {R4-R9,LR}
   \   00000004   0040B0E1           MOVS     R4,R0
   \   00000008   0150B0E1           MOVS     R5,R1
    507          #if OS_LOWEST_PRIO <= 63
    508              INT8U     *psrc;
    509              INT8U     *pdest;
    510          #else
    511              INT16U    *psrc;
    512              INT16U    *pdest;
    513          #endif
    514              INT8U      i;
    515          #if OS_CRITICAL_METHOD == 3                                /* Allocate storage for CPU status register */
    516              OS_CPU_SR  cpu_sr = 0;
   \   0000000C   0000A0E3           MOV      R0,#+0
   \   00000010   0090B0E1           MOVS     R9,R0
    517          #endif
    518          
    519          
    520          
    521          #if OS_ARG_CHK_EN > 0
    522              if (pevent == (OS_EVENT *)0) {                         /* Validate 'pevent'                        */
   \   00000014   000054E3           CMP      R4,#+0
   \   00000018   0100001A           BNE      ??OSSemQuery_0
    523                  return (OS_ERR_PEVENT_NULL);
   \   0000001C   0400A0E3           MOV      R0,#+4
   \   00000020   200000EA           B        ??OSSemQuery_1
    524              }
    525              if (p_sem_data == (OS_SEM_DATA *)0) {                  /* Validate 'p_sem_data'                    */
   \                     ??OSSemQuery_0:
   \   00000024   000055E3           CMP      R5,#+0
   \   00000028   0100001A           BNE      ??OSSemQuery_2
    526                  return (OS_ERR_PDATA_NULL);
   \   0000002C   0900A0E3           MOV      R0,#+9
   \   00000030   1C0000EA           B        ??OSSemQuery_1
    527              }
    528          #endif
    529              if (pevent->OSEventType != OS_EVENT_TYPE_SEM) {        /* Validate event block type                */
   \                     ??OSSemQuery_2:
   \   00000034   0000D4E5           LDRB     R0,[R4, #+0]
   \   00000038   030050E3           CMP      R0,#+3
   \   0000003C   0100000A           BEQ      ??OSSemQuery_3
    530                  return (OS_ERR_EVENT_TYPE);
   \   00000040   0100A0E3           MOV      R0,#+1
   \   00000044   170000EA           B        ??OSSemQuery_1
    531              }
    532              OS_ENTER_CRITICAL();
   \                     ??OSSemQuery_3:
   \   00000048   ........           _BLF     OS_CPU_SR_Save,??OS_CPU_SR_Save??rA
   \   0000004C   0090B0E1           MOVS     R9,R0
    533              p_sem_data->OSEventGrp = pevent->OSEventGrp;           /* Copy message mailbox wait list           */
   \   00000050   0A00D4E5           LDRB     R0,[R4, #+10]
   \   00000054   0600C5E5           STRB     R0,[R5, #+6]
    534   

⌨️ 快捷键说明

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