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

📄 os_mutex.lst

📁 lpc2478开发板基于IAR编译器移植ucos实验例程
💻 LST
📖 第 1 页 / 共 5 页
字号:
    409          
    410          
    411          
    412          #if OS_ARG_CHK_EN > 0
    413              if (err == (INT8U *)0) {                               /* Validate 'err'                           */
   \   00000018   000055E3           CMP      R5,#+0
   \   0000001C   E900000A           BEQ      ??OSMutexPend_0
    414                  return;
    415              }
    416              if (pevent == (OS_EVENT *)0) {                         /* Validate 'pevent'                        */
   \   00000020   000054E3           CMP      R4,#+0
   \   00000024   0200001A           BNE      ??OSMutexPend_1
    417                  *err = OS_ERR_PEVENT_NULL;
   \   00000028   0400A0E3           MOV      R0,#+4
   \   0000002C   0000C5E5           STRB     R0,[R5, #+0]
    418                  return;
   \   00000030   E40000EA           B        ??OSMutexPend_0
    419              }
    420          #endif
    421              if (pevent->OSEventType != OS_EVENT_TYPE_MUTEX) {      /* Validate event block type                */
   \                     ??OSMutexPend_1:
   \   00000034   0000D4E5           LDRB     R0,[R4, #+0]
   \   00000038   040050E3           CMP      R0,#+4
   \   0000003C   0200000A           BEQ      ??OSMutexPend_2
    422                  *err = OS_ERR_EVENT_TYPE;
   \   00000040   0100A0E3           MOV      R0,#+1
   \   00000044   0000C5E5           STRB     R0,[R5, #+0]
    423                  return;
   \   00000048   DE0000EA           B        ??OSMutexPend_0
    424              }
    425              if (OSIntNesting > 0) {                                /* See if called from ISR ...               */
   \                     ??OSMutexPend_2:
   \   0000004C   ........           LDR      R0,??DataTable47  ;; OSIntNesting
   \   00000050   0000D0E5           LDRB     R0,[R0, #+0]
   \   00000054   010050E3           CMP      R0,#+1
   \   00000058   0200003A           BCC      ??OSMutexPend_3
    426                  *err = OS_ERR_PEND_ISR;                            /* ... can't PEND from an ISR               */
   \   0000005C   0200A0E3           MOV      R0,#+2
   \   00000060   0000C5E5           STRB     R0,[R5, #+0]
    427                  return;
   \   00000064   D70000EA           B        ??OSMutexPend_0
    428              }
    429              if (OSLockNesting > 0) {                               /* See if called with scheduler locked ...  */
   \                     ??OSMutexPend_3:
   \   00000068   60039FE5           LDR      R0,??OSMutexPend_4  ;; OSLockNesting
   \   0000006C   0000D0E5           LDRB     R0,[R0, #+0]
   \   00000070   010050E3           CMP      R0,#+1
   \   00000074   0200003A           BCC      ??OSMutexPend_5
    430                  *err = OS_ERR_PEND_LOCKED;                         /* ... can't PEND when locked               */
   \   00000078   0D00A0E3           MOV      R0,#+13
   \   0000007C   0000C5E5           STRB     R0,[R5, #+0]
    431                  return;
   \   00000080   D00000EA           B        ??OSMutexPend_0
    432              }
    433              OS_ENTER_CRITICAL();                                
   \                     ??OSMutexPend_5:
   \   00000084   ........           _BLF     OS_CPU_SR_Save,??OS_CPU_SR_Save??rA
   \   00000088   00B0B0E1           MOVS     R11,R0
    434              pip = (INT8U)(pevent->OSEventCnt >> 8);                /* Get PIP from mutex                       */
   \   0000008C   B800D4E1           LDRH     R0,[R4, #+8]
   \   00000090   2004B0E1           LSRS     R0,R0,#+8
   \   00000094   0060B0E1           MOVS     R6,R0
    435                                                                     /* Is Mutex available?                      */
    436              if ((INT8U)(pevent->OSEventCnt & OS_MUTEX_KEEP_LOWER_8) == OS_MUTEX_AVAILABLE) {
   \   00000098   B800D4E1           LDRH     R0,[R4, #+8]
   \   0000009C   FF0010E2           ANDS     R0,R0,#0xFF      ;; Zero extend
   \   000000A0   FF0050E3           CMP      R0,#+255
   \   000000A4   1B00001A           BNE      ??OSMutexPend_6
    437                  pevent->OSEventCnt &= OS_MUTEX_KEEP_UPPER_8;       /* Yes, Acquire the resource                */
   \   000000A8   B800D4E1           LDRH     R0,[R4, #+8]
   \   000000AC   FF0C10E2           ANDS     R0,R0,#0xFF00
   \   000000B0   B800C4E1           STRH     R0,[R4, #+8]
    438                  pevent->OSEventCnt |= OSTCBCur->OSTCBPrio;         /*      Save priority of owning task        */
   \   000000B4   B800D4E1           LDRH     R0,[R4, #+8]
   \   000000B8   ........           LDR      R1,??DataTable44  ;; OSTCBCur
   \   000000BC   001091E5           LDR      R1,[R1, #+0]
   \   000000C0   2E10D1E5           LDRB     R1,[R1, #+46]
   \   000000C4   000091E1           ORRS     R0,R1,R0
   \   000000C8   B800C4E1           STRH     R0,[R4, #+8]
    439                  pevent->OSEventPtr  = (void *)OSTCBCur;            /*      Point to owning task's OS_TCB       */
   \   000000CC   ........           LDR      R0,??DataTable44  ;; OSTCBCur
   \   000000D0   000090E5           LDR      R0,[R0, #+0]
   \   000000D4   040084E5           STR      R0,[R4, #+4]
    440                  if (OSTCBCur->OSTCBPrio <= pip) {                  /*      PIP 'must' have a SMALLER prio ...  */
   \   000000D8   ........           LDR      R0,??DataTable44  ;; OSTCBCur
   \   000000DC   000090E5           LDR      R0,[R0, #+0]
   \   000000E0   2E00D0E5           LDRB     R0,[R0, #+46]
   \   000000E4   FF6016E2           ANDS     R6,R6,#0xFF      ;; Zero extend
   \   000000E8   000056E1           CMP      R6,R0
   \   000000EC   0400003A           BCC      ??OSMutexPend_7
    441                      OS_EXIT_CRITICAL();                            /*      ... than current task!              */
   \   000000F0   0B00B0E1           MOVS     R0,R11
   \   000000F4   ........           _BLF     OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rA
    442                      *err  = OS_ERR_PIP_LOWER;
   \   000000F8   7800A0E3           MOV      R0,#+120
   \   000000FC   0000C5E5           STRB     R0,[R5, #+0]
   \   00000100   B00000EA           B        ??OSMutexPend_0
    443                  } else {
    444                      OS_EXIT_CRITICAL();
   \                     ??OSMutexPend_7:
   \   00000104   0B00B0E1           MOVS     R0,R11
   \   00000108   ........           _BLF     OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rA
    445                      *err  = OS_ERR_NONE;
   \   0000010C   0000A0E3           MOV      R0,#+0
   \   00000110   0000C5E5           STRB     R0,[R5, #+0]
   \   00000114   AB0000EA           B        ??OSMutexPend_0
    446                  }
    447                  return;
    448              }
    449              mprio = (INT8U)(pevent->OSEventCnt & OS_MUTEX_KEEP_LOWER_8);  /* No, Get priority of mutex owner   */
   \                     ??OSMutexPend_6:
   \   00000118   B810D4E1           LDRH     R1,[R4, #+8]
   \   0000011C   0010CDE5           STRB     R1,[SP, #+0]
    450              ptcb  = (OS_TCB *)(pevent->OSEventPtr);                       /*     Point to TCB of mutex owner   */
   \   00000120   040094E5           LDR      R0,[R4, #+4]
   \   00000124   0080B0E1           MOVS     R8,R0
    451              if (ptcb->OSTCBPrio > pip) {                                  /*     Need to promote prio of owner?*/
   \   00000128   2E00D8E5           LDRB     R0,[R8, #+46]
   \   0000012C   FF6016E2           ANDS     R6,R6,#0xFF      ;; Zero extend
   \   00000130   000056E1           CMP      R6,R0
   \   00000134   6F00002A           BCS      ??OSMutexPend_8
    452                  if (mprio > OSTCBCur->OSTCBPrio) {
   \   00000138   ........           LDR      R0,??DataTable44  ;; OSTCBCur
   \   0000013C   000090E5           LDR      R0,[R0, #+0]
   \   00000140   2E00D0E5           LDRB     R0,[R0, #+46]
   \   00000144   0010DDE5           LDRB     R1,[SP, #+0]
   \   00000148   010050E1           CMP      R0,R1
   \   0000014C   6900002A           BCS      ??OSMutexPend_8
    453                      y = ptcb->OSTCBY;
   \   00000150   3000D8E5           LDRB     R0,[R8, #+48]
   \   00000154   00A0B0E1           MOVS     R10,R0
    454                      if ((OSRdyTbl[y] & ptcb->OSTCBBitX) != 0) {           /*     See if mutex owner is ready   */
   \   00000158   0A00B0E1           MOVS     R0,R10
   \   0000015C   ........           LDR      R1,??DataTable56  ;; OSRdyTbl
   \   00000160   0100D0E7           LDRB     R0,[R0, +R1]
   \   00000164   3110D8E5           LDRB     R1,[R8, #+49]
   \   00000168   000011E1           TST      R1,R0
   \   0000016C   1500000A           BEQ      ??OSMutexPend_9
    455                          OSRdyTbl[y] &= ~ptcb->OSTCBBitX;                  /*     Yes, Remove owner from Rdy ...*/
   \   00000170   0A00B0E1           MOVS     R0,R10
   \   00000174   ........           LDR      R1,??DataTable56  ;; OSRdyTbl
   \   00000178   0A20B0E1           MOVS     R2,R10
   \   0000017C   ........           LDR      R3,??DataTable56  ;; OSRdyTbl
   \   00000180   0320D2E7           LDRB     R2,[R2, +R3]
   \   00000184   3130D8E5           LDRB     R3,[R8, #+49]
   \   00000188   0320D2E1           BICS     R2,R2,R3
   \   0000018C   0120C0E7           STRB     R2,[R0, +R1]
    456                          if (OSRdyTbl[y] == 0) {                           /*          ... list at current prio */
   \   00000190   0A00B0E1           MOVS     R0,R10
   \   00000194   ........           LDR      R1,??DataTable56  ;; OSRdyTbl
   \   00000198   0100D0E7           LDRB     R0,[R0, +R1]
   \   0000019C   000050E3           CMP      R0,#+0
   \   000001A0   0500001A           BNE      ??OSMutexPend_10
    457                              OSRdyGrp &= ~ptcb->OSTCBBitY;
   \   000001A4   ........           LDR      R0,??DataTable54  ;; OSRdyGrp
   \   000001A8   ........           LDR      R1,??DataTable54  ;; OSRdyGrp
   \   000001AC   0010D1E5           LDRB     R1,[R1, #+0]
   \   000001B0   3220D8E5           LDRB     R2,[R8, #+50]
   \   000001B4   0210D1E1           BICS     R1,R1,R2
   \   000001B8   0010C0E5           STRB     R1,[R0, #+0]
    458                          }
    459                          rdy = OS_TRUE;
   \                     ??OSMutexPend_10:
   \   000001BC   0100A0E3           MOV      R0,#+1
   \   000001C0   0070B0E1           MOVS     R7,R0
   \   000001C4   140000EA           B        ??OSMutexPend_11
    460                      } else {
    461                          pevent2 = ptcb->OSTCBEventPtr;
   \                     ??OSMutexPend_9:
   \   000001C8   1C0098E5           LDR      R0,[R8, #+28]
   \   000001CC   0090B0E1           MOVS     R9,R0
    462                          if (pevent2 != (OS_EVENT *)0) {                   /* Remove from event wait list       */
   \   000001D0   000059E3           CMP      R9,#+0
   \   000001D4   0E00000A           BEQ      ??OSMutexPend_12
    463                              if ((pevent2->OSEventTbl[ptcb->OSTCBY] &= ~ptcb->OSTCBBitX) == 0) {
   \   000001D8   3000D8E5           LDRB     R0,[R8, #+48]
   \   000001DC   090090E0           ADDS     R0,R0,R9
   \   000001E0   0B00D0E5           LDRB     R0,[R0, #+11]
   \   000001E4   3110D8E5           LDRB     R1,[R8, #+49]
   \   000001E8   0100D0E1           BICS     R0,R0,R1
   \   000001EC   3010D8E5           LDRB     R1,[R8, #+48]
   \   000001F0   091091E0           ADDS     R1,R1,R9
   \   000001F4   0B00C1E5           STRB     R0,[R1, #+11]
   \   000001F8   FF0010E2           ANDS     R0,R0,#0xFF      ;; Zero extend
   \   000001FC   000050E3           CMP      R0,#+0
   \   00000200   0300001A           BNE      ??OSMutexPend_12
    464                                  pevent2->OSEventGrp &= ~ptcb->OSTCBBitY;
   \   00000204   0A00D9E5           LDRB     R0,[R9, #+10]
   \   00000208   3210D8E5           LDRB     R1,[R8, #+50]
   \   0000020C   0100D0E1           BICS     R0,R0,R1
   \   00000210   0A00C9E5           STRB     R0,[R9, #+10]
    465                              }
    466                          }
    467                          rdy = OS_FALSE;                            /* No                                       */
   \                     ??OSMutexPend_12:
   \   00000214   0000A0E3           MOV      R0,#+0
   \   00000218   0070B0E1           MOVS     R7,R0
    468                      }
    469                      ptcb->OSTCBPrio = pip;      

⌨️ 快捷键说明

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