📄 os_mbox.txt
字号:
00025a f7fff7ff BL OS_CPU_SR_Restore
00025e f7fff7ff BL OS_Sched
000262 200e MOVS r0,#0xe ;422
000264 7030 STRB r0,[r6,#0] ;422
000266 4620 MOV r0,r4 ;423
000268 e7d7 B |L1.538|
|L1.618|
00026a 4638 MOV r0,r7 ;425
00026c f7fff7ff BL OS_CPU_SR_Restore
000270 2000 MOVS r0,#0 ;426
000272 7030 STRB r0,[r6,#0] ;426
000274 e7d1 B |L1.538|
;;;429 #endif
ENDP
OSMboxPost PROC
;;;455 INT8U OSMboxPost (OS_EVENT *pevent, void *pmsg)
;;;456 {
000276 b570 PUSH {r4-r6,lr}
000278 4604 MOV r4,r0
00027a 460e MOV r6,r1
;;;457 #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
;;;458 OS_CPU_SR cpu_sr = 0;
;;;459 #endif
;;;460
;;;461
;;;462
;;;463 #if OS_ARG_CHK_EN > 0
;;;464 if (pevent == (OS_EVENT *)0) { /* Validate 'pevent' */
;;;465 return (OS_ERR_PEVENT_NULL);
;;;466 }
;;;467 if (pmsg == (void *)0) { /* Make sure we are not posting a NULL pointer */
;;;468 return (OS_ERR_POST_NULL_PTR);
;;;469 }
;;;470 #endif
;;;471 if (pevent->OSEventType != OS_EVENT_TYPE_MBOX) { /* Validate event block type */
00027c 7820 LDRB r0,[r4,#0]
00027e 2801 CMP r0,#1
000280 d001 BEQ |L1.646|
;;;472 return (OS_ERR_EVENT_TYPE);
000282 2001 MOVS r0,#1
;;;473 }
;;;474 OS_ENTER_CRITICAL();
;;;475 if (pevent->OSEventGrp != 0) { /* See if any task pending on mailbox */
;;;476 /* Ready HPT waiting on event */
;;;477 (void)OS_EventTaskRdy(pevent, pmsg, OS_STAT_MBOX, OS_STAT_PEND_OK);
;;;478 OS_EXIT_CRITICAL();
;;;479 OS_Sched(); /* Find highest priority task ready to run */
;;;480 return (OS_ERR_NONE);
;;;481 }
;;;482 if (pevent->OSEventPtr != (void *)0) { /* Make sure mailbox doesn't already have a msg */
;;;483 OS_EXIT_CRITICAL();
;;;484 return (OS_ERR_MBOX_FULL);
;;;485 }
;;;486 pevent->OSEventPtr = pmsg; /* Place message in mailbox */
;;;487 OS_EXIT_CRITICAL();
;;;488 return (OS_ERR_NONE);
;;;489 }
000284 bd70 POP {r4-r6,pc}
|L1.646|
000286 f7fff7ff BL OS_CPU_SR_Save
00028a 4605 MOV r5,r0 ;474
00028c 7aa0 LDRB r0,[r4,#0xa] ;475
00028e b160 CBZ r0,|L1.682|
000290 2300 MOVS r3,#0 ;477
000292 2202 MOVS r2,#2 ;477
000294 4631 MOV r1,r6 ;477
000296 4620 MOV r0,r4 ;477
000298 f7fff7ff BL OS_EventTaskRdy
00029c 4628 MOV r0,r5 ;478
00029e f7fff7ff BL OS_CPU_SR_Restore
0002a2 f7fff7ff BL OS_Sched
0002a6 2000 MOVS r0,#0 ;480
0002a8 bd70 POP {r4-r6,pc}
|L1.682|
0002aa 6860 LDR r0,[r4,#4] ;482
0002ac b120 CBZ r0,|L1.696|
0002ae 4628 MOV r0,r5 ;483
0002b0 f7fff7ff BL OS_CPU_SR_Restore
0002b4 2014 MOVS r0,#0x14 ;484
0002b6 bd70 POP {r4-r6,pc}
|L1.696|
0002b8 6066 STR r6,[r4,#4] ;486
0002ba 4628 MOV r0,r5 ;487
0002bc f7fff7ff BL OS_CPU_SR_Restore
0002c0 2000 MOVS r0,#0 ;488
0002c2 bd70 POP {r4-r6,pc}
;;;490 #endif
ENDP
OSMboxPostOpt PROC
;;;526 INT8U OSMboxPostOpt (OS_EVENT *pevent, void *pmsg, INT8U opt)
;;;527 {
0002c4 e92de92d PUSH {r4-r8,lr}
0002c8 4604 MOV r4,r0
0002ca 460e MOV r6,r1
0002cc 4615 MOV r5,r2
;;;528 #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
;;;529 OS_CPU_SR cpu_sr = 0;
;;;530 #endif
;;;531
;;;532
;;;533
;;;534 #if OS_ARG_CHK_EN > 0
;;;535 if (pevent == (OS_EVENT *)0) { /* Validate 'pevent' */
;;;536 return (OS_ERR_PEVENT_NULL);
;;;537 }
;;;538 if (pmsg == (void *)0) { /* Make sure we are not posting a NULL pointer */
;;;539 return (OS_ERR_POST_NULL_PTR);
;;;540 }
;;;541 #endif
;;;542 if (pevent->OSEventType != OS_EVENT_TYPE_MBOX) { /* Validate event block type */
0002ce 7820 LDRB r0,[r4,#0]
0002d0 2801 CMP r0,#1
0002d2 d001 BEQ |L1.728|
;;;543 return (OS_ERR_EVENT_TYPE);
0002d4 2001 MOVS r0,#1
;;;544 }
;;;545 OS_ENTER_CRITICAL();
;;;546 if (pevent->OSEventGrp != 0) { /* See if any task pending on mailbox */
;;;547 if ((opt & OS_POST_OPT_BROADCAST) != 0x00) { /* Do we need to post msg to ALL waiting tasks ? */
;;;548 while (pevent->OSEventGrp != 0) { /* Yes, Post to ALL tasks waiting on mailbox */
;;;549 (void)OS_EventTaskRdy(pevent, pmsg, OS_STAT_MBOX, OS_STAT_PEND_OK);
;;;550 }
;;;551 } else { /* No, Post to HPT waiting on mbox */
;;;552 (void)OS_EventTaskRdy(pevent, pmsg, OS_STAT_MBOX, OS_STAT_PEND_OK);
;;;553 }
;;;554 OS_EXIT_CRITICAL();
;;;555 if ((opt & OS_POST_OPT_NO_SCHED) == 0) { /* See if scheduler needs to be invoked */
;;;556 OS_Sched(); /* Find HPT ready to run */
;;;557 }
;;;558 return (OS_ERR_NONE);
;;;559 }
;;;560 if (pevent->OSEventPtr != (void *)0) { /* Make sure mailbox doesn't already have a msg */
;;;561 OS_EXIT_CRITICAL();
;;;562 return (OS_ERR_MBOX_FULL);
;;;563 }
;;;564 pevent->OSEventPtr = pmsg; /* Place message in mailbox */
;;;565 OS_EXIT_CRITICAL();
;;;566 return (OS_ERR_NONE);
;;;567 }
0002d6 e7a0 B |L1.538|
|L1.728|
0002d8 f7fff7ff BL OS_CPU_SR_Save
0002dc 4607 MOV r7,r0 ;545
0002de 7aa0 LDRB r0,[r4,#0xa] ;546
0002e0 b1d8 CBZ r0,|L1.794|
0002e2 07e8 LSLS r0,r5,#31 ;547
0002e4 d00a BEQ |L1.764|
0002e6 e005 B |L1.756|
|L1.744|
0002e8 2300 MOVS r3,#0 ;549
0002ea 2202 MOVS r2,#2 ;549
0002ec 4631 MOV r1,r6 ;549
0002ee 4620 MOV r0,r4 ;549
0002f0 f7fff7ff BL OS_EventTaskRdy
|L1.756|
0002f4 7aa0 LDRB r0,[r4,#0xa] ;548
0002f6 2800 CMP r0,#0 ;548
0002f8 d1f6 BNE |L1.744|
0002fa e005 B |L1.776|
|L1.764|
0002fc 2300 MOVS r3,#0 ;552
0002fe 2202 MOVS r2,#2 ;552
000300 4631 MOV r1,r6 ;552
000302 4620 MOV r0,r4 ;552
000304 f7fff7ff BL OS_EventTaskRdy
|L1.776|
000308 4638 MOV r0,r7 ;554
00030a f7fff7ff BL OS_CPU_SR_Restore
00030e 0768 LSLS r0,r5,#29 ;555
000310 d401 BMI |L1.790|
000312 f7fff7ff BL OS_Sched
|L1.790|
000316 2000 MOVS r0,#0 ;558
000318 e77f B |L1.538|
|L1.794|
00031a 6860 LDR r0,[r4,#4] ;560
00031c b120 CBZ r0,|L1.808|
00031e 4638 MOV r0,r7 ;561
000320 f7fff7ff BL OS_CPU_SR_Restore
000324 2014 MOVS r0,#0x14 ;562
000326 e778 B |L1.538|
|L1.808|
000328 6066 STR r6,[r4,#4] ;564
00032a 4638 MOV r0,r7 ;565
00032c f7fff7ff BL OS_CPU_SR_Restore
000330 2000 MOVS r0,#0 ;566
000332 e772 B |L1.538|
;;;568 #endif
ENDP
OSMboxQuery PROC
;;;590 INT8U OSMboxQuery (OS_EVENT *pevent, OS_MBOX_DATA *p_mbox_data)
;;;591 {
000334 b570 PUSH {r4-r6,lr}
000336 4605 MOV r5,r0
000338 460e MOV r6,r1
;;;592 INT8U i;
;;;593 #if OS_LOWEST_PRIO <= 63
;;;594 INT8U *psrc;
;;;595 INT8U *pdest;
;;;596 #else
;;;597 INT16U *psrc;
;;;598 INT16U *pdest;
;;;599 #endif
;;;600 #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
;;;601 OS_CPU_SR cpu_sr = 0;
;;;602 #endif
;;;603
;;;604
;;;605
;;;606 #if OS_ARG_CHK_EN > 0
;;;607 if (pevent == (OS_EVENT *)0) { /* Validate 'pevent' */
;;;608 return (OS_ERR_PEVENT_NULL);
;;;609 }
;;;610 if (p_mbox_data == (OS_MBOX_DATA *)0) { /* Validate 'p_mbox_data' */
;;;611 return (OS_ERR_PDATA_NULL);
;;;612 }
;;;613 #endif
;;;614 if (pevent->OSEventType != OS_EVENT_TYPE_MBOX) { /* Validate event block type */
00033a 7828 LDRB r0,[r5,#0]
00033c 2801 CMP r0,#1
00033e d001 BEQ |L1.836|
;;;615 return (OS_ERR_EVENT_TYPE);
000340 2001 MOVS r0,#1
;;;616 }
;;;617 OS_ENTER_CRITICAL();
;;;618 p_mbox_data->OSEventGrp = pevent->OSEventGrp; /* Copy message mailbox wait list */
;;;619 psrc = &pevent->OSEventTbl[0];
;;;620 pdest = &p_mbox_data->OSEventTbl[0];
;;;621 for (i = 0; i < OS_EVENT_TBL_SIZE; i++) {
;;;622 *pdest++ = *psrc++;
;;;623 }
;;;624 p_mbox_data->OSMsg = pevent->OSEventPtr; /* Get message from mailbox */
;;;625 OS_EXIT_CRITICAL();
;;;626 return (OS_ERR_NONE);
;;;627 }
000342 bd70 POP {r4-r6,pc}
|L1.836|
000344 f7fff7ff BL OS_CPU_SR_Save
000348 7aa9 LDRB r1,[r5,#0xa] ;618
00034a 7231 STRB r1,[r6,#8] ;618
00034c f105f105 ADD r4,r5,#0xb ;619
000350 1d32 ADDS r2,r6,#4 ;620
000352 2100 MOVS r1,#0 ;621
|L1.852|
000354 f814f814 LDRB r3,[r4],#1 ;622
000358 f802f802 STRB r3,[r2],#1 ;622
00035c 1c49 ADDS r1,r1,#1 ;621
00035e b2c9 UXTB r1,r1 ;621
000360 2904 CMP r1,#4 ;621
000362 d3f7 BCC |L1.852|
000364 6869 LDR r1,[r5,#4] ;624
000366 6031 STR r1,[r6,#0] ;624
000368 f7fff7ff BL OS_CPU_SR_Restore
00036c 2000 MOVS r0,#0 ;626
00036e bd70 POP {r4-r6,pc}
;;;628 #endif /* OS_MBOX_QUERY_EN */
ENDP
|L1.880|
000370 00000000 DCD OSIntNesting
|L1.884|
000374 00000000 DCD OSEventFreeList
|L1.888|
000378 00000000 DCD OSLockNesting
|L1.892|
00037c 00000000 DCD OSTCBCur
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -