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

📄 os_mutex.lst

📁 针对STM32F103的UCOS移植
💻 LST
📖 第 1 页 / 共 5 页
字号:
   \   00000032   F0E7               B.N      ??OSMutexPend_0
    428              }
    429              if (OSLockNesting > 0) {                               /* See if called with scheduler locked ...  */
   \                     ??OSMutexPend_3:
   \   00000034   6C48               LDR.N    R0,??OSMutexPend_4  ;; OSLockNesting
   \   00000036   0078               LDRB     R0,[R0, #+0]
   \   00000038   0028               CMP      R0,#+0
   \   0000003A   02D0               BEQ.N    ??OSMutexPend_5
    430                  *perr = OS_ERR_PEND_LOCKED;                        /* ... can't PEND when locked               */
   \   0000003C   0D20               MOVS     R0,#+13
   \   0000003E   2870               STRB     R0,[R5, #+0]
    431                  return;
   \   00000040   E9E7               B.N      ??OSMutexPend_0
    432              }
    433              OS_ENTER_CRITICAL();                                
   \                     ??OSMutexPend_5:
   \   00000042   ........           _BLF     OS_CPU_SR_Save,??OS_CPU_SR_Save??rT
   \   00000046   0600               MOVS     R6,R0
    434              pip = (INT8U)(pevent->OSEventCnt >> 8);                /* Get PIP from mutex                       */
   \   00000048   2089               LDRH     R0,[R4, #+8]
   \   0000004A   000A               LSRS     R0,R0,#+8
    435                                                                     /* Is Mutex available?                      */
    436              if ((INT8U)(pevent->OSEventCnt & OS_MUTEX_KEEP_LOWER_8) == OS_MUTEX_AVAILABLE) {
   \   0000004C   ....               LDR.N    R1,??DataTable15  ;; OSTCBCur
   \   0000004E   8846               MOV      R8,R1
   \   00000050   0021               MOVS     R1,#+0
   \   00000052   8946               MOV      R9,R1
   \   00000054   2189               LDRH     R1,[R4, #+8]
   \   00000056   C9B2               UXTB     R1,R1
   \   00000058   FF29               CMP      R1,#+255
   \   0000005A   19D1               BNE.N    ??OSMutexPend_6
    437                  pevent->OSEventCnt &= OS_MUTEX_KEEP_UPPER_8;       /* Yes, Acquire the resource                */
   \   0000005C   2189               LDRH     R1,[R4, #+8]
   \   0000005E   11F47F41           ANDS     R1,R1,#0xFF00
   \   00000062   2181               STRH     R1,[R4, #+8]
    438                  pevent->OSEventCnt |= OSTCBCur->OSTCBPrio;         /*      Save priority of owning task        */
   \   00000064   D8F80020           LDR      R2,[R8, #+0]
   \   00000068   2E32               ADDS     R2,R2,#+46
   \   0000006A   1278               LDRB     R2,[R2, #+0]
   \   0000006C   0A43               ORRS     R2,R2,R1
   \   0000006E   2281               STRH     R2,[R4, #+8]
    439                  pevent->OSEventPtr  = (void *)OSTCBCur;            /*      Point to owning task's OS_TCB       */
   \   00000070   D8F80010           LDR      R1,[R8, #+0]
   \   00000074   6160               STR      R1,[R4, #+4]
    440                  if (OSTCBCur->OSTCBPrio <= pip) {                  /*      PIP 'must' have a SMALLER prio ...  */
   \   00000076   D8F80010           LDR      R1,[R8, #+0]
   \   0000007A   2E31               ADDS     R1,R1,#+46
   \   0000007C   0978               LDRB     R1,[R1, #+0]
   \   0000007E   8842               CMP      R0,R1
   \   00000080   C0F0AB80           BCC.W    ??OSMutexPend_7
    441                      OS_EXIT_CRITICAL();                            /*      ... than current task!              */
   \   00000084   3000               MOVS     R0,R6
   \   00000086   ........           _BLF     OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rT
    442                      *perr = OS_ERR_PIP_LOWER;
   \   0000008A   7820               MOVS     R0,#+120
   \   0000008C   2870               STRB     R0,[R5, #+0]
   \   0000008E   C2E7               B.N      ??OSMutexPend_0
    443                  } else {
    444                      OS_EXIT_CRITICAL();
    445                      *perr = OS_ERR_NONE;
    446                  }
    447                  return;
    448              }
    449              mprio = (INT8U)(pevent->OSEventCnt & OS_MUTEX_KEEP_LOWER_8);  /* No, Get priority of mutex owner   */
    450              ptcb  = (OS_TCB *)(pevent->OSEventPtr);                       /*     Point to TCB of mutex owner   */
   \                     ??OSMutexPend_6:
   \   00000090   6168               LDR      R1,[R4, #+4]
   \   00000092   8A46               MOV      R10,R1
    451              if (ptcb->OSTCBPrio > pip) {                                  /*     Need to promote prio of owner?*/
   \   00000094   2E31               ADDS     R1,R1,#+46
   \   00000096   0200               MOVS     R2,R0
   \   00000098   0B78               LDRB     R3,[R1, #+0]
   \   0000009A   9A42               CMP      R2,R3
   \   0000009C   68D2               BCS.N    ??OSMutexPend_8
    452                  if (mprio > OSTCBCur->OSTCBPrio) {
   \   0000009E   D8F80020           LDR      R2,[R8, #+0]
   \   000000A2   2E32               ADDS     R2,R2,#+46
   \   000000A4   1278               LDRB     R2,[R2, #+0]
   \   000000A6   2389               LDRH     R3,[R4, #+8]
   \   000000A8   DBB2               UXTB     R3,R3
   \   000000AA   9A42               CMP      R2,R3
   \   000000AC   60D2               BCS.N    ??OSMutexPend_8
    453                      y = ptcb->OSTCBY;
   \   000000AE   8A78               LDRB     R2,[R1, #+2]
   \   000000B0   ....               LDR.N    R3,??DataTable18  ;; OSRdyTbl
   \   000000B2   9A18               ADDS     R2,R3,R2
   \   000000B4   1378               LDRB     R3,[R2, #+0]
   \   000000B6   ....               LDR.N    R7,??DataTable19  ;; OSRdyGrp
   \   000000B8   BB46               MOV      R11,R7
   \   000000BA   CF78               LDRB     R7,[R1, #+3]
   \   000000BC   3B42               TST      R3,R7
   \   000000BE   0AD0               BEQ.N    ??OSMutexPend_9
    454                      if ((OSRdyTbl[y] & ptcb->OSTCBBitX) != 0) {           /*     See if mutex owner is ready   */
    455                          OSRdyTbl[y] &= ~ptcb->OSTCBBitX;                  /*     Yes, Remove owner from Rdy ...*/
   \   000000C0   BB43               BICS     R3,R3,R7
   \   000000C2   1370               STRB     R3,[R2, #+0]
    456                          if (OSRdyTbl[y] == 0) {                           /*          ... list at current prio */
   \   000000C4   05D1               BNE.N    ??OSMutexPend_10
    457                              OSRdyGrp &= ~ptcb->OSTCBBitY;
   \   000000C6   9BF80020           LDRB     R2,[R11, #+0]
   \   000000CA   0B79               LDRB     R3,[R1, #+4]
   \   000000CC   9A43               BICS     R2,R2,R3
   \   000000CE   8BF80020           STRB     R2,[R11, #+0]
    458                          }
    459                          rdy = OS_TRUE;
   \                     ??OSMutexPend_10:
   \   000000D2   0122               MOVS     R2,#+1
   \   000000D4   17E0               B.N      ??OSMutexPend_11
    460                      } else {
    461                          pevent2 = ptcb->OSTCBEventPtr;
   \                     ??OSMutexPend_9:
   \   000000D6   DAF81C20           LDR      R2,[R10, #+28]
    462                          if (pevent2 != (OS_EVENT *)0) {                   /* Remove from event wait list       */
   \   000000DA   002A               CMP      R2,#+0
   \   000000DC   12D0               BEQ.N    ??OSMutexPend_12
    463                              if ((pevent2->OSEventTbl[ptcb->OSTCBY] &= ~ptcb->OSTCBBitX) == 0) {
   \   000000DE   8B78               LDRB     R3,[R1, #+2]
   \   000000E0   D318               ADDS     R3,R2,R3
   \   000000E2   9C46               MOV      R12,R3
   \   000000E4   8B78               LDRB     R3,[R1, #+2]
   \   000000E6   D318               ADDS     R3,R2,R3
   \   000000E8   DF7A               LDRB     R7,[R3, #+11]
   \   000000EA   CB78               LDRB     R3,[R1, #+3]
   \   000000EC   9F43               BICS     R7,R7,R3
   \   000000EE   6346               MOV      R3,R12
   \   000000F0   DF72               STRB     R7,[R3, #+11]
   \   000000F2   8B78               LDRB     R3,[R1, #+2]
   \   000000F4   D318               ADDS     R3,R2,R3
   \   000000F6   DB7A               LDRB     R3,[R3, #+11]
   \   000000F8   002B               CMP      R3,#+0
   \   000000FA   03D1               BNE.N    ??OSMutexPend_12
    464                                  pevent2->OSEventGrp &= ~ptcb->OSTCBBitY;
   \   000000FC   937A               LDRB     R3,[R2, #+10]
   \   000000FE   0F79               LDRB     R7,[R1, #+4]
   \   00000100   BB43               BICS     R3,R3,R7
   \   00000102   9372               STRB     R3,[R2, #+10]
    465                              }
    466                          }
    467                          rdy = OS_FALSE;                            /* No                                       */
   \                     ??OSMutexPend_12:
   \   00000104   4A46               MOV      R2,R9
    468                      }
    469                      ptcb->OSTCBPrio = pip;                         /* Change owner task prio to PIP            */
   \                     ??OSMutexPend_11:
   \   00000106   0300               MOVS     R3,R0
   \   00000108   0B70               STRB     R3,[R1, #+0]
    470          #if OS_LOWEST_PRIO <= 63
    471                      ptcb->OSTCBY    = (INT8U)( ptcb->OSTCBPrio >> 3);
   \   0000010A   DB08               LSRS     R3,R3,#+3
   \   0000010C   8B70               STRB     R3,[R1, #+2]
    472                      ptcb->OSTCBX    = (INT8U)( ptcb->OSTCBPrio & 0x07);
   \   0000010E   0346               MOV      R3,R0
   \   00000110   5B07               LSLS     R3,R3,#+29
   \   00000112   5B0F               LSRS     R3,R3,#+29
   \   00000114   4B70               STRB     R3,[R1, #+1]
    473                      ptcb->OSTCBBitY = (INT8U)(1 << ptcb->OSTCBY);
   \   00000116   0123               MOVS     R3,#+1
   \   00000118   8F78               LDRB     R7,[R1, #+2]
   \   0000011A   BB40               LSLS     R3,R3,R7
   \   0000011C   0B71               STRB     R3,[R1, #+4]
    474                      ptcb->OSTCBBitX = (INT8U)(1 << ptcb->OSTCBX);
   \   0000011E   0123               MOVS     R3,#+1
   \   00000120   4F78               LDRB     R7,[R1, #+1]
   \   00000122   BB40               LSLS     R3,R3,R7
   \   00000124   CB70               STRB     R3,[R1, #+3]
    475          #else
    476                      ptcb->OSTCBY    = (INT8U)((ptcb->OSTCBPrio >> 4) & 0xFF);
    477                      ptcb->OSTCBX    = (INT8U)( ptcb->OSTCBPrio & 0x0F);
    478                      ptcb->OSTCBBitY = (INT16U)(1 << ptcb->OSTCBY);
    479                      ptcb->OSTCBBitX = (INT16U)(1 << ptcb->OSTCBX);
    480          #endif
    481                      if (rdy == OS_TRUE) {                          /* If task was ready at owner's priority ...*/
   \   00000126   012A               CMP      R2,#+1
   \   00000128   0FD1               BNE.N    ??OSMutexPend_13
    482                          OSRdyGrp               |= ptcb->OSTCBBitY; /* ... make it ready at new priority.       */
   \   0000012A   9BF80020           LDRB     R2,[R11, #+0]
   \   0000012E   0B79               LDRB     R3,[R1, #+4]
   \   00000130   1343               ORRS     R3,R3,R2
   \   00000132   8BF80030           STRB     R3,[R11, #+0]
    483                          OSRdyTbl[ptcb->OSTCBY] |= ptcb->OSTCBBitX;
   \   00000136   8F78               LDRB     R7,[R1, #+2]
   \   00000138   ....               LDR.N    R2,??DataTable18  ;; OSRdyTbl
   \   0000013A   9446               MOV      R12,R2
   \   0000013C   3B46               MOV      R3,R7
   \   0000013E   D25C               LDRB     R2,[R2, R3]
   \   00000140   C978               LDRB     R1,[R1, #+3]
   \   00000142   1143               ORRS     R1,R1,R2
   \   00000144   6246               MOV      R2,R12
   \   00000146   D155               STRB     R1,[R2, R7]
   \   00000148   0FE0               B.N      ??OSMutexPend_14
    484                      } else {
    485                          pevent2 = ptcb->OSTCBEventPtr;
   \                     ??OSMutexPend_13:
   \   0000014A   DAF81C20           LDR      R2,[R10, #+28]
    486                          if (pevent2 != (OS_EVENT *)0) {            /* Add to event wait list                   */
   \   0000014E   002A               CMP      R2,#+0
   \   00000150   0BD0               BEQ.N    ??OSMutexPend_14
    487                              pevent2->

⌨️ 快捷键说明

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