📄 os_mbox.txt
字号:
000374 e5d50000 LDRB r0,[r5,#0] ;324
000378 e3500001 CMP r0,#1 ;324
00037c 0a000001 BEQ |L1.904| ;324
000380 e3a00001 MOV r0,#1 ;325
000384 eafffff5 B |L1.864| ;325
|L1.904|
000388 ef000002 SVC 0x2 ; formerly SWI ;328
00038c e5d50001 LDRB r0,[r5,#1] ;329
000390 e3500000 CMP r0,#0 ;329
000394 0a000007 BEQ |L1.952| ;329
000398 e3a02002 MOV r2,#2 ;330
00039c e1a01004 MOV r1,r4 ;330
0003a0 e1a00005 MOV r0,r5 ;330
0003a4 ebfffffe BL OS_EventTaskRdy ;330
0003a8 ef000003 SVC 0x3 ; formerly SWI ;331
0003ac ebfffffe BL OS_Sched ;332
0003b0 e3a00000 MOV r0,#0 ;333
0003b4 eaffffe9 B |L1.864| ;333
|L1.952|
0003b8 e5950004 LDR r0,[r5,#4] ;335
0003bc e3500000 CMP r0,#0 ;335
0003c0 0a000002 BEQ |L1.976| ;335
0003c4 ef000003 SVC 0x3 ; formerly SWI ;336
0003c8 e3a00014 MOV r0,#0x14 ;337
0003cc eaffffe3 B |L1.864| ;337
|L1.976|
0003d0 e5854004 STR r4,[r5,#4] ;339
0003d4 ef000003 SVC 0x3 ; formerly SWI ;340
0003d8 e3a00000 MOV r0,#0 ;341
0003dc eaffffdf B |L1.864| ;341
ENDP
OSMboxPostOpt PROC
;;;375 INT8U OSMboxPostOpt (OS_EVENT *pevent, void *msg, INT8U opt)
;;;376 {
0003e0 e92d4070 PUSH {r4-r6,lr}
0003e4 e1a04000 MOV r4,r0
0003e8 e1a05001 MOV r5,r1
0003ec 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' */
0003f0 e3540000 CMP r4,#0
0003f4 1a000001 BNE |L1.1024|
;;;384 return (OS_ERR_PEVENT_NULL);
0003f8 e3a00004 MOV r0,#4
;;;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 }
|L1.1020|
0003fc e8bd8070 POP {r4-r6,pc}
|L1.1024|
000400 e3550000 CMP r5,#0 ;386
000404 1a000001 BNE |L1.1040| ;386
000408 e3a00003 MOV r0,#3 ;387
00040c eafffffa B |L1.1020| ;387
|L1.1040|
000410 e5d40000 LDRB r0,[r4,#0] ;389
000414 e3500001 CMP r0,#1 ;389
000418 0a000001 BEQ |L1.1060| ;389
00041c e3a00001 MOV r0,#1 ;390
000420 eafffff5 B |L1.1020| ;390
|L1.1060|
000424 ef000002 SVC 0x2 ; formerly SWI ;393
000428 e5d40001 LDRB r0,[r4,#1] ;394
00042c e3500000 CMP r0,#0 ;394
000430 0a000012 BEQ |L1.1152| ;394
000434 e3160001 TST r6,#1 ;395
000438 0a000008 BEQ |L1.1120| ;395
00043c ea000003 B |L1.1104| ;396
|L1.1088|
000440 e3a02002 MOV r2,#2 ;397
000444 e1a01005 MOV r1,r5 ;397
000448 e1a00004 MOV r0,r4 ;397
00044c ebfffffe BL OS_EventTaskRdy ;397
|L1.1104|
000450 e5d40001 LDRB r0,[r4,#1] ;396
000454 e3500000 CMP r0,#0 ;396
000458 1afffff8 BNE |L1.1088| ;396
00045c ea000003 B |L1.1136| ;396
|L1.1120|
000460 e3a02002 MOV r2,#2 ;400
000464 e1a01005 MOV r1,r5 ;400
000468 e1a00004 MOV r0,r4 ;400
00046c ebfffffe BL OS_EventTaskRdy ;400
|L1.1136|
000470 ef000003 SVC 0x3 ; formerly SWI ;402
000474 ebfffffe BL OS_Sched ;403
000478 e3a00000 MOV r0,#0 ;404
00047c eaffffde B |L1.1020| ;404
|L1.1152|
000480 e5940004 LDR r0,[r4,#4] ;406
000484 e3500000 CMP r0,#0 ;406
000488 0a000002 BEQ |L1.1176| ;406
00048c ef000003 SVC 0x3 ; formerly SWI ;407
000490 e3a00014 MOV r0,#0x14 ;408
000494 eaffffd8 B |L1.1020| ;408
|L1.1176|
000498 e5845004 STR r5,[r4,#4] ;410
00049c ef000003 SVC 0x3 ; formerly SWI ;411
0004a0 e3a00000 MOV r0,#0 ;412
0004a4 eaffffd4 B |L1.1020| ;412
ENDP
OSMboxQuery PROC
;;;435 INT8U OSMboxQuery (OS_EVENT *pevent, OS_MBOX_DATA *pdata)
;;;436 {
0004a8 e92d41f0 PUSH {r4-r8,lr}
0004ac e1a04000 MOV r4,r0
0004b0 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' */
0004b4 e3540000 CMP r4,#0
0004b8 1a000001 BNE |L1.1220|
;;;446 return (OS_ERR_PEVENT_NULL);
0004bc e3a00004 MOV r0,#4
;;;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 }
|L1.1216|
0004c0 e8bd81f0 POP {r4-r8,pc}
|L1.1220|
0004c4 e5d40000 LDRB r0,[r4,#0] ;448
0004c8 e3500001 CMP r0,#1 ;448
0004cc 0a000001 BEQ |L1.1240| ;448
0004d0 e3a00001 MOV r0,#1 ;449
0004d4 eafffff9 B |L1.1216| ;449
|L1.1240|
0004d8 ef000002 SVC 0x2 ; formerly SWI ;452
0004dc e5d40001 LDRB r0,[r4,#1] ;453
0004e0 e5c50006 STRB r0,[r5,#6] ;453
0004e4 e2846008 ADD r6,r4,#8 ;454
0004e8 e2857004 ADD r7,r5,#4 ;455
0004ec e4d60001 LDRB r0,[r6],#1 ;458
0004f0 e4c70001 STRB r0,[r7],#1 ;458
0004f4 e4d60001 LDRB r0,[r6],#1 ;462
0004f8 e4c70001 STRB r0,[r7],#1 ;462
0004fc e5940004 LDR r0,[r4,#4] ;488
000500 e5850000 STR r0,[r5,#0] ;488
000504 ef000003 SVC 0x3 ; formerly SWI ;489
000508 e3a00000 MOV r0,#0 ;490
00050c eaffffeb B |L1.1216| ;490
|L1.1296|
000510 00000000 DCD OSIntNesting ;490
|L1.1300|
000514 00000000 DCD OSEventFreeList ;490
|L1.1304|
000518 00000000 DCD OSTCBCur ;490
ENDP
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -