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

📄 os_mutex.lst

📁 ARM仿真案例
💻 LST
📖 第 1 页 / 共 5 页
字号:
    368                      pevent2 = ptcb->OSTCBEventPtr;
   \                     ??OSMutexPend_6:
   \   000000D8   CB69               LDR      R3,[R1, #+28]
    369                      if (pevent2 != (OS_EVENT *)0) {                       /* Remove from event wait list       */
   \   000000DA   002B               CMP      R3,#+0
   \   000000DC   13D0               BEQ      ??OSMutexPend_9
    370                          if ((pevent2->OSEventTbl[ptcb->OSTCBY] &= ~ptcb->OSTCBBitX) == 0) {
   \   000000DE   2F22               MOVS     R2,#+47
   \   000000E0   8A5C               LDRB     R2,[R1, R2]
   \   000000E2   9A18               ADDS     R2,R3,R2
   \   000000E4   127A               LDRB     R2,[R2, #+8]
   \   000000E6   3027               MOVS     R7,#+48
   \   000000E8   CF5D               LDRB     R7,[R1, R7]
   \   000000EA   BA43               BICS     R2,R2,R7
   \   000000EC   2F27               MOVS     R7,#+47
   \   000000EE   CF5D               LDRB     R7,[R1, R7]
   \   000000F0   DF19               ADDS     R7,R3,R7
   \   000000F2   3A72               STRB     R2,[R7, #+8]
   \   000000F4   1206               LSLS     R2,R2,#+24       ;; ZeroExtS R2,R2,#+24,#+24
   \   000000F6   120E               LSRS     R2,R2,#+24
   \   000000F8   002A               CMP      R2,#+0
   \   000000FA   04D1               BNE      ??OSMutexPend_9
    371                              pevent2->OSEventGrp &= ~ptcb->OSTCBBitY;
   \   000000FC   5A78               LDRB     R2,[R3, #+1]
   \   000000FE   3127               MOVS     R7,#+49
   \   00000100   CF5D               LDRB     R7,[R1, R7]
   \   00000102   BA43               BICS     R2,R2,R7
   \   00000104   5A70               STRB     R2,[R3, #+1]
    372                          }
    373                      }
    374                      rdy = FALSE;                                   /* No                                       */
   \                     ??OSMutexPend_9:
   \   00000106   0022               MOVS     R2,#+0
    375                  }
    376                  ptcb->OSTCBPrio = pip;                             /* Change owner task prio to PIP            */
   \                     ??OSMutexPend_8:
   \   00000108   2D23               MOVS     R3,#+45
   \   0000010A   C854               STRB     R0,[R1, R3]
    377                  ptcb->OSTCBY    = ptcb->OSTCBPrio >> 3;
   \   0000010C   2F23               MOVS     R3,#+47
   \   0000010E   2D27               MOVS     R7,#+45
   \   00000110   CF5D               LDRB     R7,[R1, R7]
   \   00000112   3F06               LSLS     R7,R7,#+24       ;; ZeroExtS R7,R7,#+24,#+24
   \   00000114   3F0E               LSRS     R7,R7,#+24
   \   00000116   FF08               LSRS     R7,R7,#+3
   \   00000118   CF54               STRB     R7,[R1, R3]
    378                  ptcb->OSTCBBitY = OSMapTbl[ptcb->OSTCBY];
   \   0000011A   3127               MOVS     R7,#+49
   \   0000011C   BC46               MOV      R12,R7
   \   0000011E   2F23               MOVS     R3,#+47
   \   00000120   CF5C               LDRB     R7,[R1, R3]
   \   00000122   ....               LDR      R3,??DataTable58  ;; OSMapTbl
   \   00000124   DB5D               LDRB     R3,[R3, R7]
   \   00000126   6746               MOV      R7,R12
   \   00000128   CB55               STRB     R3,[R1, R7]
    379                  ptcb->OSTCBX    = ptcb->OSTCBPrio & 0x07;
   \   0000012A   2E23               MOVS     R3,#+46
   \   0000012C   2D27               MOVS     R7,#+45
   \   0000012E   CF5D               LDRB     R7,[R1, R7]
   \   00000130   7F07               LSLS     R7,R7,#+29       ;; ZeroExtS R7,R7,#+29,#+29
   \   00000132   7F0F               LSRS     R7,R7,#+29
   \   00000134   CF54               STRB     R7,[R1, R3]
    380                  ptcb->OSTCBBitX = OSMapTbl[ptcb->OSTCBX];
   \   00000136   3027               MOVS     R7,#+48
   \   00000138   BC46               MOV      R12,R7
   \   0000013A   2E23               MOVS     R3,#+46
   \   0000013C   CF5C               LDRB     R7,[R1, R3]
   \   0000013E   ....               LDR      R3,??DataTable58  ;; OSMapTbl
   \   00000140   DB5D               LDRB     R3,[R3, R7]
   \   00000142   6746               MOV      R7,R12
   \   00000144   CB55               STRB     R3,[R1, R7]
    381                  if (rdy == TRUE) {                                 /* If task was ready at owner's priority ...*/
   \   00000146   012A               CMP      R2,#+1
   \   00000148   14D1               BNE      ??OSMutexPend_10
    382                      OSRdyGrp               |= ptcb->OSTCBBitY;     /* ... make it ready at new priority.       */
   \   0000014A   ....               LDR      R2,??DataTable60  ;; OSRdyGrp
   \   0000014C   ....               LDR      R3,??DataTable60  ;; OSRdyGrp
   \   0000014E   1B78               LDRB     R3,[R3, #+0]
   \   00000150   3127               MOVS     R7,#+49
   \   00000152   CF5D               LDRB     R7,[R1, R7]
   \   00000154   1F43               ORRS     R7,R7,R3
   \   00000156   1770               STRB     R7,[R2, #+0]
    383                      OSRdyTbl[ptcb->OSTCBY] |= ptcb->OSTCBBitX;
   \   00000158   2F22               MOVS     R2,#+47
   \   0000015A   8A5C               LDRB     R2,[R1, R2]
   \   0000015C   ....               LDR      R7,??DataTable46  ;; OSRdyTbl
   \   0000015E   9446               MOV      R12,R2
   \   00000160   2F22               MOVS     R2,#+47
   \   00000162   8B5C               LDRB     R3,[R1, R2]
   \   00000164   ....               LDR      R2,??DataTable46  ;; OSRdyTbl
   \   00000166   D25C               LDRB     R2,[R2, R3]
   \   00000168   3023               MOVS     R3,#+48
   \   0000016A   CB5C               LDRB     R3,[R1, R3]
   \   0000016C   1343               ORRS     R3,R3,R2
   \   0000016E   6246               MOV      R2,R12
   \   00000170   BB54               STRB     R3,[R7, R2]
   \   00000172   12E0               B        ??OSMutexPend_11
    384                  } else {
    385                      pevent2 = ptcb->OSTCBEventPtr;
   \                     ??OSMutexPend_10:
   \   00000174   CB69               LDR      R3,[R1, #+28]
    386                      if (pevent2 != (OS_EVENT *)0) {                /* Remove from event wait list              */
   \   00000176   002B               CMP      R3,#+0
   \   00000178   0FD0               BEQ      ??OSMutexPend_11
    387                          pevent2->OSEventGrp               |= ptcb->OSTCBBitY;
   \   0000017A   5A78               LDRB     R2,[R3, #+1]
   \   0000017C   3127               MOVS     R7,#+49
   \   0000017E   CF5D               LDRB     R7,[R1, R7]
   \   00000180   1743               ORRS     R7,R7,R2
   \   00000182   5F70               STRB     R7,[R3, #+1]
    388                          pevent2->OSEventTbl[ptcb->OSTCBY] |= ptcb->OSTCBBitX;
   \   00000184   2F22               MOVS     R2,#+47
   \   00000186   8A5C               LDRB     R2,[R1, R2]
   \   00000188   9A18               ADDS     R2,R3,R2
   \   0000018A   2F27               MOVS     R7,#+47
   \   0000018C   CF5D               LDRB     R7,[R1, R7]
   \   0000018E   DB19               ADDS     R3,R3,R7
   \   00000190   1F7A               LDRB     R7,[R3, #+8]
   \   00000192   3023               MOVS     R3,#+48
   \   00000194   CB5C               LDRB     R3,[R1, R3]
   \   00000196   3B43               ORRS     R3,R3,R7
   \   00000198   1372               STRB     R3,[R2, #+8]
    389                      }
    390                  }
    391                  OSTCBPrioTbl[pip] = (OS_TCB *)ptcb;
   \                     ??OSMutexPend_11:
   \   0000019A   0006               LSLS     R0,R0,#+24       ;; ZeroExtS R0,R0,#+24,#+24
   \   0000019C   000E               LSRS     R0,R0,#+24
   \   0000019E   0422               MOVS     R2,#+4
   \   000001A0   5043               MULS     R0,R2,R0
   \   000001A2   ....               LDR      R2,??DataTable70  ;; OSTCBPrioTbl
   \   000001A4   1150               STR      R1,[R2, R0]
    392              }
    393              OSTCBCur->OSTCBStat |= OS_STAT_MUTEX;             /* Mutex not available, pend current task        */
   \                     ??OSMutexPend_5:
   \   000001A6   ....               LDR      R0,??DataTable38  ;; OSTCBCur
   \   000001A8   0068               LDR      R0,[R0, #+0]
   \   000001AA   2C30               ADDS     R0,R0,#+44
   \   000001AC   ....               LDR      R1,??DataTable38  ;; OSTCBCur
   \   000001AE   0968               LDR      R1,[R1, #+0]
   \   000001B0   2C31               ADDS     R1,R1,#+44
   \   000001B2   0978               LDRB     R1,[R1, #+0]
   \   000001B4   1022               MOVS     R2,#+16
   \   000001B6   0A43               ORRS     R2,R2,R1
   \   000001B8   0270               STRB     R2,[R0, #+0]
    394              OSTCBCur->OSTCBDly   = timeout;                   /* Store timeout in current task's TCB           */
   \   000001BA   ....               LDR      R0,??DataTable38  ;; OSTCBCur
   \   000001BC   0068               LDR      R0,[R0, #+0]
   \   000001BE   6946               MOV      R1,SP
   \   000001C0   0988               LDRH     R1,[R1, #+0]
   \   000001C2   4185               STRH     R1,[R0, #+42]
    395              OS_EventTaskWait(pevent);                         /* Suspend task until event or timeout occurs    */
   \   000001C4   2000               MOVS     R0,R4
   \   000001C6   ........           _BLF     OS_EventTaskWait,??OS_EventTaskWait??rT
    396              OS_EXIT_CRITICAL();
   \   000001CA   3000               MOVS     R0,R6
   \   000001CC   ........           _BLF     OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rT
    397              OS_Sched();                                        /* Find next highest priority task ready         */
   \   000001D0   ........           _BLF     OS_Sched,??OS_Sched??rT
    398              OS_ENTER_CRITICAL();
   \   000001D4   ........           _BLF     OS_CPU_SR_Save,??OS_CPU_SR_Save??rT
   \   000001D8   0600               MOVS     R6,R0
    399              if (OSTCBCur->OSTCBStat & OS_STAT_MUTEX) {        /* Must have timed out if still waiting for event*/
   \   000001DA   ....               LDR      R0,??DataTable38  ;; OSTCBCur
   \   000001DC   0068               LDR      R0,[R0, #+0]
   \   000001DE   2C30               ADDS     R0,R0,#+44
   \   000001E0   0078               LDRB     R0,[R0, #+0]
   \   000001E2   C006               LSLS     R0,R0,#+27
   \   000001E4   08D5               BPL      ??OSMutexPend_12
    400                  OS_EventTO(pevent);
   \   000001E6   2000               MOVS     R0,R4
   \   000001E8   ........           _BLF     OS_EventTO,??OS_EventTO??rT
    401                  OS_EXIT_CRITICAL();
   \   000001EC   3000               MOVS     R0,R6
   \   000001EE   ........           _BLF     OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rT
    402                  *err = OS_TIMEOUT;                            /* Indicate that we didn't get mutex within TO   */
   \   000001F2   0A20               MOVS     R0,#+10
   \   000001F4   2870               STRB     R0,[R5, #+0]
    403                  return;
   \   000001F6   08E0               B        ??OSMutexPend_1
    404              }
    405              OSTCBCur->OSTCBEventPtr = (OS_EVENT *)0;
   \                     ??OSMutexPend_12:
   \   000001F8   ....               LDR      R0,??DataTable38  ;; OSTCBCur
   \   000001FA   0068               LDR      R0,[R0, #+0]
   \   000001FC   0021               MOVS     R1,#+0
   \   000001FE   C161               STR      R1,[R0, #+28]
    406              OS_EXIT_CRITICAL();
   \   00000200   3000               MOVS     R0,R6
   \   00000202   ........           _BLF     OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rT
    407              *err = OS_NO_ERR;
   \   00000206   0020               MOVS     R0,#+0
   \   00000208   2870               STRB     R0,[R5, #+0]
    408          }
   \                     ??OSMutexPend_1:
   \   0000020A   01B0               ADD      SP,SP,#+4
   \   0000020C   F0BC               POP      {R4-R7}
   \   0000020E   01BC               POP      {R0}
   \   00000210   0047               BX       R0               ;; return
    409          /*$PAGE*/
    410          /*
    411          **************************

⌨️ 快捷键说明

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