📄 os_mbox.txt
字号:
000390 e5d50000 LDRB r0,[r5,#0] ;324
000394 e3500001 CMP r0,#1 ;324
000398 0a000001 BEQ |L1.932| ;324
00039c e3a00001 MOV r0,#1 ;325
0003a0 eafffff4 B |L1.888| ;325
|L1.932|
0003a4 ef000002 SVC 0x2 ; formerly SWI ;328
0003a8 e5d50001 LDRB r0,[r5,#1] ;329
0003ac e3500000 CMP r0,#0 ;329
0003b0 0a000007 BEQ |L1.980| ;329
0003b4 e3a02002 MOV r2,#2 ;330
0003b8 e1a01004 MOV r1,r4 ;330
0003bc e1a00005 MOV r0,r5 ;330
0003c0 ebfffffe BL OS_EventTaskRdy ;330
0003c4 ef000003 SVC 0x3 ; formerly SWI ;331
0003c8 ebfffffe BL OS_Sched ;332
0003cc e3a00000 MOV r0,#0 ;333
0003d0 eaffffe8 B |L1.888| ;333
|L1.980|
0003d4 e5950004 LDR r0,[r5,#4] ;335
0003d8 e3500000 CMP r0,#0 ;335
0003dc 0a000002 BEQ |L1.1004| ;335
0003e0 ef000003 SVC 0x3 ; formerly SWI ;336
0003e4 e3a00014 MOV r0,#0x14 ;337
0003e8 eaffffe2 B |L1.888| ;337
|L1.1004|
0003ec e5854004 STR r4,[r5,#4] ;339
0003f0 ef000003 SVC 0x3 ; formerly SWI ;340
0003f4 e3a00000 MOV r0,#0 ;341
0003f8 eaffffde B |L1.888| ;341
ENDP
OSMboxPostOpt PROC
;;;375 INT8U OSMboxPostOpt (OS_EVENT *pevent, void *msg, INT8U opt)
;;;376 {
0003fc e92d4070 PUSH {r4-r6,lr}
000400 e1a04000 MOV r4,r0
000404 e1a05001 MOV r5,r1
000408 e1a06002 MOV r6,r2
;;;377 #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
;;;378 OS_CPU_SR cpu_sr;
;;;379 #endif
;;;380
;;;381
;;;382 #if OS_ARG_CHK_EN > 0
;;;383 if (pevent == (OS_EVENT *)0) { /* Validate 'pevent' */
00040c e3540000 CMP r4,#0
000410 1a000002 BNE |L1.1056|
;;;384 return (OS_ERR_PEVENT_NULL);
000414 e3a00004 MOV r0,#4
|L1.1048|
000418 e8bd4070 POP {r4-r6,lr}
;;;385 }
;;;386 if (msg == (void *)0) { /* Make sure we are not posting a NULL pointer */
;;;387 return (OS_ERR_POST_NULL_PTR);
;;;388 }
;;;389 if (pevent->OSEventType != OS_EVENT_TYPE_MBOX) { /* Validate event block type */
;;;390 return (OS_ERR_EVENT_TYPE);
;;;391 }
;;;392 #endif
;;;393 OS_ENTER_CRITICAL();
;;;394 if (pevent->OSEventGrp != 0x00) { /* See if any task pending on mailbox */
;;;395 if ((opt & OS_POST_OPT_BROADCAST) != 0x00) { /* Do we need to post msg to ALL waiting tasks ? */
;;;396 while (pevent->OSEventGrp != 0x00) { /* Yes, Post to ALL tasks waiting on mailbox */
;;;397 OS_EventTaskRdy(pevent, msg, OS_STAT_MBOX);
;;;398 }
;;;399 } else {
;;;400 OS_EventTaskRdy(pevent, msg, OS_STAT_MBOX); /* No, Post to HPT waiting on mbox */
;;;401 }
;;;402 OS_EXIT_CRITICAL();
;;;403 OS_Sched(); /* Find highest priority task ready to run */
;;;404 return (OS_NO_ERR);
;;;405 }
;;;406 if (pevent->OSEventPtr != (void *)0) { /* Make sure mailbox doesn't already have a msg */
;;;407 OS_EXIT_CRITICAL();
;;;408 return (OS_MBOX_FULL);
;;;409 }
;;;410 pevent->OSEventPtr = msg; /* Place message in mailbox */
;;;411 OS_EXIT_CRITICAL();
;;;412 return (OS_NO_ERR);
;;;413 }
00041c e12fff1e BX lr
|L1.1056|
000420 e3550000 CMP r5,#0 ;386
000424 1a000001 BNE |L1.1072| ;386
000428 e3a00003 MOV r0,#3 ;387
00042c eafffff9 B |L1.1048| ;387
|L1.1072|
000430 e5d40000 LDRB r0,[r4,#0] ;389
000434 e3500001 CMP r0,#1 ;389
000438 0a000001 BEQ |L1.1092| ;389
00043c e3a00001 MOV r0,#1 ;390
000440 eafffff4 B |L1.1048| ;390
|L1.1092|
000444 ef000002 SVC 0x2 ; formerly SWI ;393
000448 e5d40001 LDRB r0,[r4,#1] ;394
00044c e3500000 CMP r0,#0 ;394
000450 0a000012 BEQ |L1.1184| ;394
000454 e3160001 TST r6,#1 ;395
000458 0a000008 BEQ |L1.1152| ;395
00045c ea000003 B |L1.1136| ;396
|L1.1120|
000460 e3a02002 MOV r2,#2 ;397
000464 e1a01005 MOV r1,r5 ;397
000468 e1a00004 MOV r0,r4 ;397
00046c ebfffffe BL OS_EventTaskRdy ;397
|L1.1136|
000470 e5d40001 LDRB r0,[r4,#1] ;396
000474 e3500000 CMP r0,#0 ;396
000478 1afffff8 BNE |L1.1120| ;396
00047c ea000003 B |L1.1168| ;396
|L1.1152|
000480 e3a02002 MOV r2,#2 ;400
000484 e1a01005 MOV r1,r5 ;400
000488 e1a00004 MOV r0,r4 ;400
00048c ebfffffe BL OS_EventTaskRdy ;400
|L1.1168|
000490 ef000003 SVC 0x3 ; formerly SWI ;402
000494 ebfffffe BL OS_Sched ;403
000498 e3a00000 MOV r0,#0 ;404
00049c eaffffdd B |L1.1048| ;404
|L1.1184|
0004a0 e5940004 LDR r0,[r4,#4] ;406
0004a4 e3500000 CMP r0,#0 ;406
0004a8 0a000002 BEQ |L1.1208| ;406
0004ac ef000003 SVC 0x3 ; formerly SWI ;407
0004b0 e3a00014 MOV r0,#0x14 ;408
0004b4 eaffffd7 B |L1.1048| ;408
|L1.1208|
0004b8 e5845004 STR r5,[r4,#4] ;410
0004bc ef000003 SVC 0x3 ; formerly SWI ;411
0004c0 e3a00000 MOV r0,#0 ;412
0004c4 eaffffd3 B |L1.1048| ;412
ENDP
OSMboxQuery PROC
;;;435 INT8U OSMboxQuery (OS_EVENT *pevent, OS_MBOX_DATA *pdata)
;;;436 {
0004c8 e92d41f0 PUSH {r4-r8,lr}
0004cc e1a04000 MOV r4,r0
0004d0 e1a05001 MOV r5,r1
;;;437 #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
;;;438 OS_CPU_SR cpu_sr;
;;;439 #endif
;;;440 INT8U *psrc;
;;;441 INT8U *pdest;
;;;442
;;;443
;;;444 #if OS_ARG_CHK_EN > 0
;;;445 if (pevent == (OS_EVENT *)0) { /* Validate 'pevent' */
0004d4 e3540000 CMP r4,#0
0004d8 1a000002 BNE |L1.1256|
;;;446 return (OS_ERR_PEVENT_NULL);
0004dc e3a00004 MOV r0,#4
|L1.1248|
0004e0 e8bd41f0 POP {r4-r8,lr}
;;;447 }
;;;448 if (pevent->OSEventType != OS_EVENT_TYPE_MBOX) { /* Validate event block type */
;;;449 return (OS_ERR_EVENT_TYPE);
;;;450 }
;;;451 #endif
;;;452 OS_ENTER_CRITICAL();
;;;453 pdata->OSEventGrp = pevent->OSEventGrp; /* Copy message mailbox wait list */
;;;454 psrc = &pevent->OSEventTbl[0];
;;;455 pdest = &pdata->OSEventTbl[0];
;;;456
;;;457 #if OS_EVENT_TBL_SIZE > 0
;;;458 *pdest++ = *psrc++;
;;;459 #endif
;;;460
;;;461 #if OS_EVENT_TBL_SIZE > 1
;;;462 *pdest++ = *psrc++;
;;;463 #endif
;;;464
;;;465 #if OS_EVENT_TBL_SIZE > 2
;;;466 *pdest++ = *psrc++;
;;;467 #endif
;;;468
;;;469 #if OS_EVENT_TBL_SIZE > 3
;;;470 *pdest++ = *psrc++;
;;;471 #endif
;;;472
;;;473 #if OS_EVENT_TBL_SIZE > 4
;;;474 *pdest++ = *psrc++;
;;;475 #endif
;;;476
;;;477 #if OS_EVENT_TBL_SIZE > 5
;;;478 *pdest++ = *psrc++;
;;;479 #endif
;;;480
;;;481 #if OS_EVENT_TBL_SIZE > 6
;;;482 *pdest++ = *psrc++;
;;;483 #endif
;;;484
;;;485 #if OS_EVENT_TBL_SIZE > 7
;;;486 *pdest = *psrc;
;;;487 #endif
;;;488 pdata->OSMsg = pevent->OSEventPtr; /* Get message from mailbox */
;;;489 OS_EXIT_CRITICAL();
;;;490 return (OS_NO_ERR);
;;;491 }
0004e4 e12fff1e BX lr
|L1.1256|
0004e8 e5d40000 LDRB r0,[r4,#0] ;448
0004ec e3500001 CMP r0,#1 ;448
0004f0 0a000001 BEQ |L1.1276| ;448
0004f4 e3a00001 MOV r0,#1 ;449
0004f8 eafffff8 B |L1.1248| ;449
|L1.1276|
0004fc ef000002 SVC 0x2 ; formerly SWI ;452
000500 e5d40001 LDRB r0,[r4,#1] ;453
000504 e5c50006 STRB r0,[r5,#6] ;453
000508 e2846008 ADD r6,r4,#8 ;454
00050c e2857004 ADD r7,r5,#4 ;455
000510 e4d60001 LDRB r0,[r6],#1 ;458
000514 e4c70001 STRB r0,[r7],#1 ;458
000518 e4d60001 LDRB r0,[r6],#1 ;462
00051c e4c70001 STRB r0,[r7],#1 ;462
000520 e5940004 LDR r0,[r4,#4] ;488
000524 e5850000 STR r0,[r5,#0] ;488
000528 ef000003 SVC 0x3 ; formerly SWI ;489
00052c e3a00000 MOV r0,#0 ;490
000530 eaffffea B |L1.1248| ;490
|L1.1332|
000534 00000000 DCD OSIntNesting ;490
|L1.1336|
000538 00000000 DCD OSEventFreeList ;490
|L1.1340|
00053c 00000000 DCD OSTCBCur ;490
ENDP
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -