📄 os_mutex.txt
字号:
000398 e1d400b2 LDRH r0,[r4,#2] ;332
00039c e20000ff AND r0,r0,#0xff ;332
0003a0 e35000ff CMP r0,#0xff ;332
0003a4 1a00000f BNE |L1.1000| ;332
0003a8 e1d400b2 LDRH r0,[r4,#2] ;333
0003ac e2000cff AND r0,r0,#0xff00 ;333
0003b0 e1c400b2 STRH r0,[r4,#2] ;333
0003b4 e1d400b2 LDRH r0,[r4,#2] ;334
0003b8 e59f14dc LDR r1,|L1.2204| ;334
0003bc e5911000 LDR r1,[r1,#0] ;334 ; OSTCBCur
0003c0 e5d1102d LDRB r1,[r1,#0x2d] ;334
0003c4 e1800001 ORR r0,r0,r1 ;334
0003c8 e1c400b2 STRH r0,[r4,#2] ;334
0003cc e59f04c8 LDR r0,|L1.2204| ;335
0003d0 e5900000 LDR r0,[r0,#0] ;335 ; OSTCBCur
0003d4 e5840004 STR r0,[r4,#4] ;335
0003d8 ef000003 SVC 0x3 ; formerly SWI ;336
0003dc e3a00000 MOV r0,#0 ;337
0003e0 e5c60000 STRB r0,[r6,#0] ;337
0003e4 eaffffdd B |L1.864| ;338
|L1.1000|
0003e8 e1d400b2 LDRH r0,[r4,#2] ;340
0003ec e1a07440 ASR r7,r0,#8 ;340
0003f0 e1d400b2 LDRH r0,[r4,#2] ;341
0003f4 e20080ff AND r8,r0,#0xff ;341
0003f8 e594a004 LDR r10,[r4,#4] ;342
0003fc e5da002d LDRB r0,[r10,#0x2d] ;343
000400 e1500007 CMP r0,r7 ;343
000404 0a00003d BEQ |L1.1280| ;343
000408 e59f048c LDR r0,|L1.2204| ;343
00040c e5900000 LDR r0,[r0,#0] ;343 ; OSTCBCur
000410 e5d0002d LDRB r0,[r0,#0x2d] ;343
000414 e1500008 CMP r0,r8 ;343
000418 aa000038 BGE |L1.1280| ;343
00041c e5da002f LDRB r0,[r10,#0x2f] ;344
000420 e59f1480 LDR r1,|L1.2216| ;344
000424 e7d10000 LDRB r0,[r1,r0] ;344
000428 e5da1030 LDRB r1,[r10,#0x30] ;344
00042c e1100001 TST r0,r1 ;344
000430 0a000011 BEQ |L1.1148| ;344
000434 e5da002f LDRB r0,[r10,#0x2f] ;347
000438 e59f1468 LDR r1,|L1.2216| ;347
00043c e7d10000 LDRB r0,[r1,r0] ;347
000440 e5da1030 LDRB r1,[r10,#0x30] ;347
000444 e1c00001 BIC r0,r0,r1 ;347
000448 e21000ff ANDS r0,r0,#0xff ;347
00044c e5da102f LDRB r1,[r10,#0x2f] ;347
000450 e59f2450 LDR r2,|L1.2216| ;347
000454 e7c20001 STRB r0,[r2,r1] ;347
000458 1a000005 BNE |L1.1140| ;347
00045c e5da0031 LDRB r0,[r10,#0x31] ;348
000460 e59f1444 LDR r1,|L1.2220| ;348
000464 e5d11000 LDRB r1,[r1,#0] ;348 ; OSRdyGrp
000468 e1c10000 BIC r0,r1,r0 ;348
00046c e59f1438 LDR r1,|L1.2220| ;348
000470 e5c10000 STRB r0,[r1,#0] ;348 ; OSRdyGrp
|L1.1140|
000474 e3a09001 MOV r9,#1 ;350
000478 ea000000 B |L1.1152| ;350
|L1.1148|
00047c e3a09000 MOV r9,#0 ;352
|L1.1152|
000480 e5ca702d STRB r7,[r10,#0x2d] ;354
000484 e5da002d LDRB r0,[r10,#0x2d] ;355
000488 e1a001c0 ASR r0,r0,#3 ;355
00048c e5ca002f STRB r0,[r10,#0x2f] ;355
000490 e5da002f LDRB r0,[r10,#0x2f] ;356
000494 e59f1414 LDR r1,|L1.2224| ;356
000498 e7d10000 LDRB r0,[r1,r0] ;356
00049c e5ca0031 STRB r0,[r10,#0x31] ;356
0004a0 e5da002d LDRB r0,[r10,#0x2d] ;357
0004a4 e2000007 AND r0,r0,#7 ;357
0004a8 e5ca002e STRB r0,[r10,#0x2e] ;357
0004ac e5da002e LDRB r0,[r10,#0x2e] ;358
0004b0 e7d10000 LDRB r0,[r1,r0] ;358
0004b4 e5ca0030 STRB r0,[r10,#0x30] ;358
0004b8 e3590001 CMP r9,#1 ;359
0004bc 1a00000d BNE |L1.1272| ;359
0004c0 e5da0031 LDRB r0,[r10,#0x31] ;360
0004c4 e59f13e0 LDR r1,|L1.2220| ;360
0004c8 e5d11000 LDRB r1,[r1,#0] ;360 ; OSRdyGrp
0004cc e1800001 ORR r0,r0,r1 ;360
0004d0 e59f13d4 LDR r1,|L1.2220| ;360
0004d4 e5c10000 STRB r0,[r1,#0] ;360 ; OSRdyGrp
0004d8 e5da002f LDRB r0,[r10,#0x2f] ;361
0004dc e59f13c4 LDR r1,|L1.2216| ;361
0004e0 e7d10000 LDRB r0,[r1,r0] ;361
0004e4 e5da1030 LDRB r1,[r10,#0x30] ;361
0004e8 e1800001 ORR r0,r0,r1 ;361
0004ec e5da102f LDRB r1,[r10,#0x2f] ;361
0004f0 e59f23b0 LDR r2,|L1.2216| ;361
0004f4 e7c20001 STRB r0,[r2,r1] ;361
|L1.1272|
0004f8 e59f03a0 LDR r0,|L1.2208| ;363
0004fc e780a107 STR r10,[r0,r7,LSL #2] ;363
|L1.1280|
000500 e59f0394 LDR r0,|L1.2204| ;365
000504 e5900000 LDR r0,[r0,#0] ;365 ; OSTCBCur
000508 e5d0002c LDRB r0,[r0,#0x2c] ;365
00050c e3800010 ORR r0,r0,#0x10 ;365
000510 e59f1384 LDR r1,|L1.2204| ;365
000514 e5911000 LDR r1,[r1,#0] ;365 ; OSTCBCur
000518 e5c1002c STRB r0,[r1,#0x2c] ;365
00051c e59f0378 LDR r0,|L1.2204| ;366
000520 e5900000 LDR r0,[r0,#0] ;366 ; OSTCBCur
000524 e1c052ba STRH r5,[r0,#0x2a] ;366
000528 e1a00004 MOV r0,r4 ;367
00052c ebfffffe BL OS_EventTaskWait ;367
000530 ef000003 SVC 0x3 ; formerly SWI ;368
000534 ebfffffe BL OS_Sched ;369
000538 ef000002 SVC 0x2 ; formerly SWI ;370
00053c e59f0358 LDR r0,|L1.2204| ;371
000540 e5900000 LDR r0,[r0,#0] ;371 ; OSTCBCur
000544 e5d0002c LDRB r0,[r0,#0x2c] ;371
000548 e3100010 TST r0,#0x10 ;371
00054c 0a000005 BEQ |L1.1384| ;371
000550 e1a00004 MOV r0,r4 ;372
000554 ebfffffe BL OS_EventTO ;372
000558 ef000003 SVC 0x3 ; formerly SWI ;373
00055c e3a0000a MOV r0,#0xa ;374
000560 e5c60000 STRB r0,[r6,#0] ;374
000564 eaffff7d B |L1.864| ;375
|L1.1384|
000568 e3a00000 MOV r0,#0 ;377
00056c e59f1328 LDR r1,|L1.2204| ;377
000570 e5911000 LDR r1,[r1,#0] ;377 ; OSTCBCur
000574 e581001c STR r0,[r1,#0x1c] ;377
000578 ef000003 SVC 0x3 ; formerly SWI ;378
00057c e3a00000 MOV r0,#0 ;379
000580 e5c60000 STRB r0,[r6,#0] ;379
000584 eaffff75 B |L1.864|
ENDP
OSMutexPost PROC
;;;399 INT8U OSMutexPost (OS_EVENT *pevent)
;;;400 {
000588 e92d4070 PUSH {r4-r6,lr}
00058c 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 ... */
000590 e59f0300 LDR r0,|L1.2200|
000594 e5d00000 LDRB r0,[r0,#0] ; OSIntNesting
000598 e3500000 CMP r0,#0
00059c da000002 BLE |L1.1452|
;;;409 return (OS_ERR_POST_ISR); /* ... can't POST mutex from an ISR */
0005a0 e3a00005 MOV r0,#5
|L1.1444|
0005a4 e8bd4070 POP {r4-r6,lr}
;;;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 }
0005a8 e12fff1e BX lr
|L1.1452|
0005ac e3540000 CMP r4,#0 ;412
0005b0 1a000001 BNE |L1.1468| ;412
0005b4 e3a00004 MOV r0,#4 ;413
0005b8 eafffff9 B |L1.1444| ;413
|L1.1468|
0005bc e5d40000 LDRB r0,[r4,#0] ;415
0005c0 e3500004 CMP r0,#4 ;415
0005c4 0a000001 BEQ |L1.1488| ;415
0005c8 e3a00001 MOV r0,#1 ;416
0005cc eafffff4 B |L1.1444| ;416
|L1.1488|
0005d0 ef000002 SVC 0x2 ; formerly SWI ;419
0005d4 e1d400b2 LDRH r0,[r4,#2] ;420
0005d8 e1a05440 ASR r5,r0,#8 ;420
0005dc e1d400b2 LDRH r0,[r4,#2] ;421
0005e0 e20060ff AND r6,r0,#0xff ;421
0005e4 e59f02b0 LDR r0,|L1.2204| ;422
0005e8 e5900000 LDR r0,[r0,#0] ;422 ; OSTCBCur
0005ec e5d0002d LDRB r0,[r0,#0x2d] ;422
0005f0 e1500005 CMP r0,r5 ;422
0005f4 0a000007 BEQ |L1.1560| ;422
0005f8 e59f029c LDR r0,|L1.2204| ;423
0005fc e5900000 LDR r0,[r0,#0] ;423 ; OSTCBCur
000600 e5d0002d LDRB r0,[r0,#0x2d] ;423
000604 e1500006 CMP r0,r6 ;423
000608 0a000002 BEQ |L1.1560| ;423
00060c ef000003 SVC 0x3 ; formerly SWI ;424
000610 e3a00078 MOV r0,#0x78 ;425
000614 eaffffe2 B |L1.1444| ;425
|L1.1560|
000618 e59f027c LDR r0,|L1.2204| ;427
00061c e5900000 LDR r0,[r0,#0] ;427 ; OSTCBCur
000620 e5d0002d LDRB r0,[r0,#0x2d] ;427
000624 e1500005 CMP r0,r5 ;427
000628 1a00004c BNE |L1.1888| ;427
00062c e59f0268 LDR r0,|L1.2204| ;430
000630 e5900000 LDR r0,[r0,#0] ;430 ; OSTCBCur
000634 e5d0002f LDRB r0,[r0,#0x2f] ;430
000638 e59f1268 LDR r1,|L1.2216| ;430
00063c e7d10000 LDRB r0,[r1,r0] ;430
000640 e59f1254 LDR r1,|L1.2204| ;430
000644 e5911000 LDR r1,[r1,#0] ;430 ; OSTCBCur
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -