📄 os_mutex.txt
字号:
|L1.1284|
000504 ef000002 SVC #0x2 ;419
000508 e1d400b2 LDRH r0,[r4,#2] ;420
00050c e1a02420 LSR r2,r0,#8 ;420
000510 e20010ff AND r1,r0,#0xff ;421
000514 e59f01cc LDR r0,|L1.1768|
000518 e5900000 LDR r0,[r0,#0] ;422 ; OSTCBCur
00051c e5d0302d LDRB r3,[r0,#0x2d] ;422
000520 e1530002 CMP r3,r2 ;422
000524 0a000004 BEQ |L1.1340|
000528 e1530001 CMP r3,r1 ;423
00052c 0a000002 BEQ |L1.1340|
000530 ef000003 SVC #0x3 ;424
000534 e3a00078 MOV r0,#0x78 ;425
000538 eaffffe6 B |L1.1240|
|L1.1340|
00053c e59f51a8 LDR r5,|L1.1772|
000540 e1530002 CMP r3,r2 ;427
000544 1a00001f BNE |L1.1480|
000548 e5d0302f LDRB r3,[r0,#0x2f] ;430
00054c e59f61a0 LDR r6,|L1.1780|
000550 e5d0e030 LDRB lr,[r0,#0x30] ;430
000554 e7d6c003 LDRB r12,[r6,r3] ;430
000558 e1dcc00e BICS r12,r12,lr ;430
00055c e59fe194 LDR lr,|L1.1784|
000560 e7c6c003 STRB r12,[r6,r3] ;430
000564 1a000003 BNE |L1.1400|
000568 e5d0c031 LDRB r12,[r0,#0x31] ;431
00056c e5de3000 LDRB r3,[lr,#0] ;431 ; OSRdyGrp
000570 e1c3300c BIC r3,r3,r12 ;431
000574 e5ce3000 STRB r3,[lr,#0] ;431 ; OSRdyGrp
|L1.1400|
000578 e5c0102d STRB r1,[r0,#0x2d] ;433
00057c e1a031a1 LSR r3,r1,#3 ;434
000580 e5c0302f STRB r3,[r0,#0x2f] ;434
000584 e5d0302f LDRB r3,[r0,#0x2f] ;435
000588 e59f716c LDR r7,|L1.1788|
00058c e7d7c003 LDRB r12,[r7,r3] ;435
000590 e5c0c031 STRB r12,[r0,#0x31] ;435
000594 e201c007 AND r12,r1,#7 ;436
000598 e5c0c02e STRB r12,[r0,#0x2e] ;436
00059c e7d7c00c LDRB r12,[r7,r12] ;437
0005a0 e5c0c030 STRB r12,[r0,#0x30] ;437
0005a4 e5d0c031 LDRB r12,[r0,#0x31] ;438
0005a8 e5de7000 LDRB r7,[lr,#0] ;438 ; OSRdyGrp
0005ac e18cc007 ORR r12,r12,r7 ;438
0005b0 e5cec000 STRB r12,[lr,#0] ;438 ; OSRdyGrp
0005b4 e7d6c003 LDRB r12,[r6,r3] ;439
0005b8 e5d0e030 LDRB lr,[r0,#0x30] ;439
0005bc e18cc00e ORR r12,r12,lr ;439
0005c0 e7c6c003 STRB r12,[r6,r3] ;439
0005c4 e7850101 STR r0,[r5,r1,LSL #2] ;440
|L1.1480|
0005c8 e3a00001 MOV r0,#1 ;442
0005cc e7850102 STR r0,[r5,r2,LSL #2] ;442
0005d0 e5d40001 LDRB r0,[r4,#1] ;443
0005d4 e3500000 CMP r0,#0 ;443
0005d8 0a00000d BEQ |L1.1556|
0005dc e3a02010 MOV r2,#0x10 ;445
0005e0 e3a01000 MOV r1,#0 ;445
0005e4 e1a00004 MOV r0,r4 ;445
0005e8 ebfffffe BL OS_EventTaskRdy
0005ec e1d410b2 LDRH r1,[r4,#2] ;446
0005f0 e2011cff AND r1,r1,#0xff00 ;446
0005f4 e1811000 ORR r1,r1,r0 ;447
0005f8 e1c410b2 STRH r1,[r4,#2] ;447
0005fc e7950100 LDR r0,[r5,r0,LSL #2] ;448
000600 e5840004 STR r0,[r4,#4] ;448
000604 ef000003 SVC #0x3 ;449
000608 ebfffffe BL OS_Sched
00060c e3a00000 MOV r0,#0 ;451
000610 eaffffb0 B |L1.1240|
|L1.1556|
000614 e1d400b2 LDRH r0,[r4,#2] ;453
000618 e38000ff ORR r0,r0,#0xff ;453
00061c e1c400b2 STRH r0,[r4,#2] ;453
000620 e3a00000 MOV r0,#0 ;454
000624 e5840004 STR r0,[r4,#4] ;454
000628 ef000003 SVC #0x3 ;455
00062c e3a00000 MOV r0,#0 ;456
000630 eaffffa8 B |L1.1240|
;;;458 /*$PAGE*/
ENDP
OSMutexQuery PROC
;;;477 INT8U OSMutexQuery (OS_EVENT *pevent, OS_MUTEX_DATA *pdata)
;;;478 {
000634 e92d4070 PUSH {r4-r6,lr}
000638 e1a05000 MOV r5,r0
00063c e1a04001 MOV r4,r1
;;;479 #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
;;;480 OS_CPU_SR cpu_sr;
;;;481 #endif
;;;482 INT8U *psrc;
;;;483 INT8U *pdest;
;;;484
;;;485
;;;486 if (OSIntNesting > 0) { /* See if called from ISR ... */
000640 e59f009c LDR r0,|L1.1764|
000644 e5d00000 LDRB r0,[r0,#0] ; OSIntNesting
000648 e3500000 CMP r0,#0
00064c 0a000002 BEQ |L1.1628|
;;;487 return (OS_ERR_QUERY_ISR); /* ... can't QUERY mutex from an ISR */
000650 e3a00006 MOV r0,#6
|L1.1620|
000654 e8bd4070 POP {r4-r6,lr}
;;;488 }
;;;489 #if OS_ARG_CHK_EN > 0
;;;490 if (pevent == (OS_EVENT *)0) { /* Validate 'pevent' */
;;;491 return (OS_ERR_PEVENT_NULL);
;;;492 }
;;;493 if (pevent->OSEventType != OS_EVENT_TYPE_MUTEX) { /* Validate event block type */
;;;494 return (OS_ERR_EVENT_TYPE);
;;;495 }
;;;496 #endif
;;;497 OS_ENTER_CRITICAL();
;;;498 pdata->OSMutexPIP = (INT8U)(pevent->OSEventCnt >> 8);
;;;499 pdata->OSOwnerPrio = (INT8U)(pevent->OSEventCnt & OS_MUTEX_KEEP_LOWER_8);
;;;500 if (pdata->OSOwnerPrio == 0xFF) {
;;;501 pdata->OSValue = 1;
;;;502 } else {
;;;503 pdata->OSValue = 0;
;;;504 }
;;;505 pdata->OSEventGrp = pevent->OSEventGrp; /* Copy wait list */
;;;506 psrc = &pevent->OSEventTbl[0];
;;;507 pdest = &pdata->OSEventTbl[0];
;;;508 #if OS_EVENT_TBL_SIZE > 0
;;;509 *pdest++ = *psrc++;
;;;510 #endif
;;;511
;;;512 #if OS_EVENT_TBL_SIZE > 1
;;;513 *pdest++ = *psrc++;
;;;514 #endif
;;;515
;;;516 #if OS_EVENT_TBL_SIZE > 2
;;;517 *pdest++ = *psrc++;
;;;518 #endif
;;;519
;;;520 #if OS_EVENT_TBL_SIZE > 3
;;;521 *pdest++ = *psrc++;
;;;522 #endif
;;;523
;;;524 #if OS_EVENT_TBL_SIZE > 4
;;;525 *pdest++ = *psrc++;
;;;526 #endif
;;;527
;;;528 #if OS_EVENT_TBL_SIZE > 5
;;;529 *pdest++ = *psrc++;
;;;530 #endif
;;;531
;;;532 #if OS_EVENT_TBL_SIZE > 6
;;;533 *pdest++ = *psrc++;
;;;534 #endif
;;;535
;;;536 #if OS_EVENT_TBL_SIZE > 7
;;;537 *pdest = *psrc;
;;;538 #endif
;;;539 OS_EXIT_CRITICAL();
;;;540 return (OS_NO_ERR);
;;;541 }
000658 e12fff1e BX lr
|L1.1628|
00065c e3550000 CMP r5,#0 ;490
000660 1a000001 BNE |L1.1644|
000664 e3a00004 MOV r0,#4 ;491
000668 eafffff9 B |L1.1620|
|L1.1644|
00066c e5d50000 LDRB r0,[r5,#0] ;493
000670 e3500004 CMP r0,#4 ;493
000674 0a000001 BEQ |L1.1664|
000678 e3a00001 MOV r0,#1 ;494
00067c eafffff4 B |L1.1620|
|L1.1664|
000680 ef000002 SVC #0x2 ;497
000684 e1d500b2 LDRH r0,[r5,#2] ;498
000688 e1a00420 LSR r0,r0,#8 ;498
00068c e5c40005 STRB r0,[r4,#5] ;498
000690 e1d500b2 LDRH r0,[r5,#2] ;499
000694 e20000ff AND r0,r0,#0xff ;499
000698 e5c40004 STRB r0,[r4,#4] ;499
00069c e35000ff CMP r0,#0xff ;500
0006a0 1a000002 BNE |L1.1712|
0006a4 e3a00001 MOV r0,#1 ;501
0006a8 e5c40003 STRB r0,[r4,#3] ;501
0006ac ea000001 B |L1.1720|
|L1.1712|
0006b0 e3a00000 MOV r0,#0 ;503
0006b4 e5c40003 STRB r0,[r4,#3] ;503
|L1.1720|
0006b8 e5d50001 LDRB r0,[r5,#1] ;505
0006bc e5c40002 STRB r0,[r4,#2] ;505
0006c0 e2850008 ADD r0,r5,#8 ;506
0006c4 e5d01000 LDRB r1,[r0,#0] ;509
0006c8 e5c41000 STRB r1,[r4,#0] ;509
0006cc e2841001 ADD r1,r4,#1 ;509
0006d0 e5d00001 LDRB r0,[r0,#1] ;513
0006d4 e5c10000 STRB r0,[r1,#0] ;513
0006d8 ef000003 SVC #0x3 ;539
0006dc e3a00000 MOV r0,#0 ;540
0006e0 eaffffdb B |L1.1620|
;;;542 #endif /* OS_MUTEX_QUERY_EN */
ENDP
|L1.1764|
0006e4 00000000 DCD OSIntNesting
|L1.1768|
0006e8 00000000 DCD OSTCBCur
|L1.1772|
0006ec 00000000 DCD OSTCBPrioTbl
|L1.1776|
0006f0 00000000 DCD OSEventFreeList
|L1.1780|
0006f4 00000000 DCD OSRdyTbl
|L1.1784|
0006f8 00000000 DCD OSRdyGrp
|L1.1788|
0006fc 00000000 DCD OSMapTbl
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -