📄 os_mutex.txt
字号:
000388 e1d400b2 LDRH r0,[r4,#2] ;332
00038c e20000ff AND r0,r0,#0xff ;332
000390 e35000ff CMP r0,#0xff ;332
000394 1a00000f BNE |L1.984| ;332
000398 e1d400b2 LDRH r0,[r4,#2] ;333
00039c e2000cff AND r0,r0,#0xff00 ;333
0003a0 e1c400b2 STRH r0,[r4,#2] ;333
0003a4 e1d400b2 LDRH r0,[r4,#2] ;334
0003a8 e59f14d4 LDR r1,|L1.2180| ;334
0003ac e5911000 LDR r1,[r1,#0] ;334 ; OSTCBCur
0003b0 e5d1101d LDRB r1,[r1,#0x1d] ;334
0003b4 e1800001 ORR r0,r0,r1 ;334
0003b8 e1c400b2 STRH r0,[r4,#2] ;334
0003bc e59f04c0 LDR r0,|L1.2180| ;335
0003c0 e5900000 LDR r0,[r0,#0] ;335 ; OSTCBCur
0003c4 e5840004 STR r0,[r4,#4] ;335
0003c8 ef000003 SVC 0x3 ; formerly SWI ;336
0003cc e3a00000 MOV r0,#0 ;337
0003d0 e5c60000 STRB r0,[r6,#0] ;337
0003d4 eaffffde B |L1.852| ;338
|L1.984|
0003d8 e1d400b2 LDRH r0,[r4,#2] ;340
0003dc e1a07440 ASR r7,r0,#8 ;340
0003e0 e1d400b2 LDRH r0,[r4,#2] ;341
0003e4 e20080ff AND r8,r0,#0xff ;341
0003e8 e594a004 LDR r10,[r4,#4] ;342
0003ec e5da001d LDRB r0,[r10,#0x1d] ;343
0003f0 e1500007 CMP r0,r7 ;343
0003f4 0a00003d BEQ |L1.1264| ;343
0003f8 e59f0484 LDR r0,|L1.2180| ;343
0003fc e5900000 LDR r0,[r0,#0] ;343 ; OSTCBCur
000400 e5d0001d LDRB r0,[r0,#0x1d] ;343
000404 e1500008 CMP r0,r8 ;343
000408 aa000038 BGE |L1.1264| ;343
00040c e5da001f LDRB r0,[r10,#0x1f] ;344
000410 e59f1478 LDR r1,|L1.2192| ;344
000414 e7d10000 LDRB r0,[r1,r0] ;344
000418 e5da1020 LDRB r1,[r10,#0x20] ;344
00041c e1100001 TST r0,r1 ;344
000420 0a000011 BEQ |L1.1132| ;344
000424 e5da001f LDRB r0,[r10,#0x1f] ;347
000428 e59f1460 LDR r1,|L1.2192| ;347
00042c e7d10000 LDRB r0,[r1,r0] ;347
000430 e5da1020 LDRB r1,[r10,#0x20] ;347
000434 e1c00001 BIC r0,r0,r1 ;347
000438 e21000ff ANDS r0,r0,#0xff ;347
00043c e5da101f LDRB r1,[r10,#0x1f] ;347
000440 e59f2448 LDR r2,|L1.2192| ;347
000444 e7c20001 STRB r0,[r2,r1] ;347
000448 1a000005 BNE |L1.1124| ;347
00044c e5da0021 LDRB r0,[r10,#0x21] ;348
000450 e59f143c LDR r1,|L1.2196| ;348
000454 e5d11000 LDRB r1,[r1,#0] ;348 ; OSRdyGrp
000458 e1c10000 BIC r0,r1,r0 ;348
00045c e59f1430 LDR r1,|L1.2196| ;348
000460 e5c10000 STRB r0,[r1,#0] ;348 ; OSRdyGrp
|L1.1124|
000464 e3a09001 MOV r9,#1 ;350
000468 ea000000 B |L1.1136| ;350
|L1.1132|
00046c e3a09000 MOV r9,#0 ;352
|L1.1136|
000470 e5ca701d STRB r7,[r10,#0x1d] ;354
000474 e5da001d LDRB r0,[r10,#0x1d] ;355
000478 e1a001c0 ASR r0,r0,#3 ;355
00047c e5ca001f STRB r0,[r10,#0x1f] ;355
000480 e5da001f LDRB r0,[r10,#0x1f] ;356
000484 e59f140c LDR r1,|L1.2200| ;356
000488 e7d10000 LDRB r0,[r1,r0] ;356
00048c e5ca0021 STRB r0,[r10,#0x21] ;356
000490 e5da001d LDRB r0,[r10,#0x1d] ;357
000494 e2000007 AND r0,r0,#7 ;357
000498 e5ca001e STRB r0,[r10,#0x1e] ;357
00049c e5da001e LDRB r0,[r10,#0x1e] ;358
0004a0 e7d10000 LDRB r0,[r1,r0] ;358
0004a4 e5ca0020 STRB r0,[r10,#0x20] ;358
0004a8 e3590001 CMP r9,#1 ;359
0004ac 1a00000d BNE |L1.1256| ;359
0004b0 e5da0021 LDRB r0,[r10,#0x21] ;360
0004b4 e59f13d8 LDR r1,|L1.2196| ;360
0004b8 e5d11000 LDRB r1,[r1,#0] ;360 ; OSRdyGrp
0004bc e1800001 ORR r0,r0,r1 ;360
0004c0 e59f13cc LDR r1,|L1.2196| ;360
0004c4 e5c10000 STRB r0,[r1,#0] ;360 ; OSRdyGrp
0004c8 e5da001f LDRB r0,[r10,#0x1f] ;361
0004cc e59f13bc LDR r1,|L1.2192| ;361
0004d0 e7d10000 LDRB r0,[r1,r0] ;361
0004d4 e5da1020 LDRB r1,[r10,#0x20] ;361
0004d8 e1800001 ORR r0,r0,r1 ;361
0004dc e5da101f LDRB r1,[r10,#0x1f] ;361
0004e0 e59f23a8 LDR r2,|L1.2192| ;361
0004e4 e7c20001 STRB r0,[r2,r1] ;361
|L1.1256|
0004e8 e59f0398 LDR r0,|L1.2184| ;363
0004ec e780a107 STR r10,[r0,r7,LSL #2] ;363
|L1.1264|
0004f0 e59f038c LDR r0,|L1.2180| ;365
0004f4 e5900000 LDR r0,[r0,#0] ;365 ; OSTCBCur
0004f8 e5d0001c LDRB r0,[r0,#0x1c] ;365
0004fc e3800010 ORR r0,r0,#0x10 ;365
000500 e59f137c LDR r1,|L1.2180| ;365
000504 e5911000 LDR r1,[r1,#0] ;365 ; OSTCBCur
000508 e5c1001c STRB r0,[r1,#0x1c] ;365
00050c e59f0370 LDR r0,|L1.2180| ;366
000510 e5900000 LDR r0,[r0,#0] ;366 ; OSTCBCur
000514 e1c051ba STRH r5,[r0,#0x1a] ;366
000518 e1a00004 MOV r0,r4 ;367
00051c ebfffffe BL OS_EventTaskWait ;367
000520 ef000003 SVC 0x3 ; formerly SWI ;368
000524 ebfffffe BL OS_Sched ;369
000528 ef000002 SVC 0x2 ; formerly SWI ;370
00052c e59f0350 LDR r0,|L1.2180| ;371
000530 e5900000 LDR r0,[r0,#0] ;371 ; OSTCBCur
000534 e5d0001c LDRB r0,[r0,#0x1c] ;371
000538 e3100010 TST r0,#0x10 ;371
00053c 0a000005 BEQ |L1.1368| ;371
000540 e1a00004 MOV r0,r4 ;372
000544 ebfffffe BL OS_EventTO ;372
000548 ef000003 SVC 0x3 ; formerly SWI ;373
00054c e3a0000a MOV r0,#0xa ;374
000550 e5c60000 STRB r0,[r6,#0] ;374
000554 eaffff7e B |L1.852| ;375
|L1.1368|
000558 e3a00000 MOV r0,#0 ;377
00055c e59f1320 LDR r1,|L1.2180| ;377
000560 e5911000 LDR r1,[r1,#0] ;377 ; OSTCBCur
000564 e581000c STR r0,[r1,#0xc] ;377
000568 ef000003 SVC 0x3 ; formerly SWI ;378
00056c e3a00000 MOV r0,#0 ;379
000570 e5c60000 STRB r0,[r6,#0] ;379
000574 eaffff76 B |L1.852|
ENDP
OSMutexPost PROC
;;;399 INT8U OSMutexPost (OS_EVENT *pevent)
;;;400 {
000578 e92d4070 PUSH {r4-r6,lr}
00057c e1a04000 MOV r4,r0
;;;401 #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
;;;402 OS_CPU_SR cpu_sr;
;;;403 #endif
;;;404 INT8U pip; /* Priority inheritance priority */
;;;405 INT8U prio;
;;;406
;;;407
;;;408 if (OSIntNesting > 0) { /* See if called from ISR ... */
000580 e59f02f8 LDR r0,|L1.2176|
000584 e5d00000 LDRB r0,[r0,#0] ; OSIntNesting
000588 e3500000 CMP r0,#0
00058c da000001 BLE |L1.1432|
;;;409 return (OS_ERR_POST_ISR); /* ... can't POST mutex from an ISR */
000590 e3a00005 MOV r0,#5
;;;410 }
;;;411 #if OS_ARG_CHK_EN > 0
;;;412 if (pevent == (OS_EVENT *)0) { /* Validate 'pevent' */
;;;413 return (OS_ERR_PEVENT_NULL);
;;;414 }
;;;415 if (pevent->OSEventType != OS_EVENT_TYPE_MUTEX) { /* Validate event block type */
;;;416 return (OS_ERR_EVENT_TYPE);
;;;417 }
;;;418 #endif
;;;419 OS_ENTER_CRITICAL();
;;;420 pip = (INT8U)(pevent->OSEventCnt >> 8); /* Get priority inheritance priority of mutex */
;;;421 prio = (INT8U)(pevent->OSEventCnt & OS_MUTEX_KEEP_LOWER_8); /* Get owner's original priority */
;;;422 if (OSTCBCur->OSTCBPrio != pip &&
;;;423 OSTCBCur->OSTCBPrio != prio) { /* See if posting task owns the MUTEX */
;;;424 OS_EXIT_CRITICAL();
;;;425 return (OS_ERR_NOT_MUTEX_OWNER);
;;;426 }
;;;427 if (OSTCBCur->OSTCBPrio == pip) { /* Did we have to raise current task's priority? */
;;;428 /* Yes, Return to original priority */
;;;429 /* Remove owner from ready list at 'pip' */
;;;430 if ((OSRdyTbl[OSTCBCur->OSTCBY] &= ~OSTCBCur->OSTCBBitX) == 0) {
;;;431 OSRdyGrp &= ~OSTCBCur->OSTCBBitY;
;;;432 }
;;;433 OSTCBCur->OSTCBPrio = prio;
;;;434 OSTCBCur->OSTCBY = prio >> 3;
;;;435 OSTCBCur->OSTCBBitY = OSMapTbl[OSTCBCur->OSTCBY];
;;;436 OSTCBCur->OSTCBX = prio & 0x07;
;;;437 OSTCBCur->OSTCBBitX = OSMapTbl[OSTCBCur->OSTCBX];
;;;438 OSRdyGrp |= OSTCBCur->OSTCBBitY;
;;;439 OSRdyTbl[OSTCBCur->OSTCBY] |= OSTCBCur->OSTCBBitX;
;;;440 OSTCBPrioTbl[prio] = (OS_TCB *)OSTCBCur;
;;;441 }
;;;442 OSTCBPrioTbl[pip] = (OS_TCB *)1; /* Reserve table entry */
;;;443 if (pevent->OSEventGrp != 0x00) { /* Any task waiting for the mutex? */
;;;444 /* Yes, Make HPT waiting for mutex ready */
;;;445 prio = OS_EventTaskRdy(pevent, (void *)0, OS_STAT_MUTEX);
;;;446 pevent->OSEventCnt &= OS_MUTEX_KEEP_UPPER_8; /* Save priority of mutex's new owner */
;;;447 pevent->OSEventCnt |= prio;
;;;448 pevent->OSEventPtr = OSTCBPrioTbl[prio]; /* Link to mutex owner's OS_TCB */
;;;449 OS_EXIT_CRITICAL();
;;;450 OS_Sched(); /* Find highest priority task ready to run */
;;;451 return (OS_NO_ERR);
;;;452 }
;;;453 pevent->OSEventCnt |= OS_MUTEX_AVAILABLE; /* No, Mutex is now available */
;;;454 pevent->OSEventPtr = (void *)0;
;;;455 OS_EXIT_CRITICAL();
;;;456 return (OS_NO_ERR);
;;;457 }
|L1.1428|
000594 e8bd8070 POP {r4-r6,pc}
|L1.1432|
000598 e3540000 CMP r4,#0 ;412
00059c 1a000001 BNE |L1.1448| ;412
0005a0 e3a00004 MOV r0,#4 ;413
0005a4 eafffffa B |L1.1428| ;413
|L1.1448|
0005a8 e5d40000 LDRB r0,[r4,#0] ;415
0005ac e3500004 CMP r0,#4 ;415
0005b0 0a000001 BEQ |L1.1468| ;415
0005b4 e3a00001 MOV r0,#1 ;416
0005b8 eafffff5 B |L1.1428| ;416
|L1.1468|
0005bc ef000002 SVC 0x2 ; formerly SWI ;419
0005c0 e1d400b2 LDRH r0,[r4,#2] ;420
0005c4 e1a05440 ASR r5,r0,#8 ;420
0005c8 e1d400b2 LDRH r0,[r4,#2] ;421
0005cc e20060ff AND r6,r0,#0xff ;421
0005d0 e59f02ac LDR r0,|L1.2180| ;422
0005d4 e5900000 LDR r0,[r0,#0] ;422 ; OSTCBCur
0005d8 e5d0001d LDRB r0,[r0,#0x1d] ;422
0005dc e1500005 CMP r0,r5 ;422
0005e0 0a000007 BEQ |L1.1540| ;422
0005e4 e59f0298 LDR r0,|L1.2180| ;423
0005e8 e5900000 LDR r0,[r0,#0] ;423 ; OSTCBCur
0005ec e5d0001d LDRB r0,[r0,#0x1d] ;423
0005f0 e1500006 CMP r0,r6 ;423
0005f4 0a000002 BEQ |L1.1540| ;423
0005f8 ef000003 SVC 0x3 ; formerly SWI ;424
0005fc e3a00078 MOV r0,#0x78 ;425
000600 eaffffe3 B |L1.1428| ;425
|L1.1540|
000604 e59f0278 LDR r0,|L1.2180| ;427
000608 e5900000 LDR r0,[r0,#0] ;427 ; OSTCBCur
00060c e5d0001d LDRB r0,[r0,#0x1d] ;427
000610 e1500005 CMP r0,r5 ;427
000614 1a00004c BNE |L1.1868| ;427
000618 e59f0264 LDR r0,|L1.2180| ;430
00061c e5900000 LDR r0,[r0,#0] ;430 ; OSTCBCur
000620 e5d0001f LDRB r0,[r0,#0x1f] ;430
000624 e59f1264 LDR r1,|L1.2192| ;430
000628 e7d10000 LDRB r0,[r1,r0] ;430
00062c e59f1250 LDR r1,|L1.2180| ;430
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -