📄 os_mutex.lst
字号:
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 + -