📄 os_mbox.lst
字号:
419 }
420 if (pevent->OSEventPtr != (void *)0) { /* Make sure mailbox doesn't already have a msg */
\ ??OSMboxPostOpt_4:
\ 0000005C 6068 LDR R0,[R4, #+4]
\ 0000005E 0028 CMP R0,#+0
\ 00000060 04D0 BEQ ??OSMboxPostOpt_8
421 OS_EXIT_CRITICAL();
\ 00000062 3800 MOVS R0,R7
\ 00000064 ........ _BLF OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rT
422 return (OS_MBOX_FULL);
\ 00000068 1420 MOVS R0,#+20
\ 0000006A 04E0 B ??OSMboxPostOpt_1
423 }
424 pevent->OSEventPtr = msg; /* Place message in mailbox */
\ ??OSMboxPostOpt_8:
\ 0000006C 6560 STR R5,[R4, #+4]
425 OS_EXIT_CRITICAL();
\ 0000006E 3800 MOVS R0,R7
\ 00000070 ........ _BLF OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rT
426 return (OS_NO_ERR);
\ 00000074 0020 MOVS R0,#+0
\ ??OSMboxPostOpt_1:
\ 00000076 F0BC POP {R4-R7}
\ 00000078 02BC POP {R1}
\ 0000007A 0847 BX R1 ;; return
427 }
428 #endif
429
430
431 /*
432 *********************************************************************************************************
433 * QUERY A MESSAGE MAILBOX
434 *
435 * Description: This function obtains information about a message mailbox.
436 *
437 * Arguments : pevent is a pointer to the event control block associated with the desired mailbox
438 *
439 * p_mbox_data is a pointer to a structure that will contain information about the message
440 * mailbox.
441 *
442 * Returns : OS_NO_ERR The call was successful and the message was sent
443 * OS_ERR_EVENT_TYPE If you are attempting to obtain data from a non mailbox.
444 * OS_ERR_PEVENT_NULL If 'pevent' is a NULL pointer
445 *********************************************************************************************************
446 */
447
448 #if OS_MBOX_QUERY_EN > 0
\ In segment CODE, align 4, keep-with-next
449 INT8U OSMboxQuery (OS_EVENT *pevent, OS_MBOX_DATA *p_mbox_data)
450 {
\ OSMboxQuery:
\ 00000000 30B5 PUSH {R4,R5,LR}
\ 00000002 0400 MOVS R4,R0
\ 00000004 0D00 MOVS R5,R1
451 #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
452 OS_CPU_SR cpu_sr;
453 #endif
454 INT8U *psrc;
455 INT8U *pdest;
456
457
458 #if OS_ARG_CHK_EN > 0
459 if (pevent == (OS_EVENT *)0) { /* Validate 'pevent' */
\ 00000006 002C CMP R4,#+0
\ 00000008 01D1 BNE ??OSMboxQuery_0
460 return (OS_ERR_PEVENT_NULL);
\ 0000000A 0420 MOVS R0,#+4
\ 0000000C 2FE0 B ??OSMboxQuery_1
461 }
462 #endif
463 if (pevent->OSEventType != OS_EVENT_TYPE_MBOX) { /* Validate event block type */
\ ??OSMboxQuery_0:
\ 0000000E 2078 LDRB R0,[R4, #+0]
\ 00000010 0128 CMP R0,#+1
\ 00000012 01D0 BEQ ??OSMboxQuery_2
464 return (OS_ERR_EVENT_TYPE);
\ 00000014 0120 MOVS R0,#+1
\ 00000016 2AE0 B ??OSMboxQuery_1
465 }
466 OS_ENTER_CRITICAL();
\ ??OSMboxQuery_2:
\ 00000018 ........ _BLF OS_CPU_SR_Save,??OS_CPU_SR_Save??rT
467 p_mbox_data->OSEventGrp = pevent->OSEventGrp; /* Copy message mailbox wait list */
\ 0000001C 6178 LDRB R1,[R4, #+1]
\ 0000001E 2973 STRB R1,[R5, #+12]
468 psrc = &pevent->OSEventTbl[0];
\ 00000020 2100 MOVS R1,R4
\ 00000022 0831 ADDS R1,R1,#+8
469 pdest = &p_mbox_data->OSEventTbl[0];
\ 00000024 2A00 MOVS R2,R5
\ 00000026 121D ADDS R2,R2,#+4
470
471 #if OS_EVENT_TBL_SIZE > 0
472 *pdest++ = *psrc++;
\ 00000028 0B78 LDRB R3,[R1, #+0]
\ 0000002A 1370 STRB R3,[R2, #+0]
\ 0000002C 491C ADDS R1,R1,#+1
\ 0000002E 521C ADDS R2,R2,#+1
473 #endif
474
475 #if OS_EVENT_TBL_SIZE > 1
476 *pdest++ = *psrc++;
\ 00000030 0B78 LDRB R3,[R1, #+0]
\ 00000032 1370 STRB R3,[R2, #+0]
\ 00000034 491C ADDS R1,R1,#+1
\ 00000036 521C ADDS R2,R2,#+1
477 #endif
478
479 #if OS_EVENT_TBL_SIZE > 2
480 *pdest++ = *psrc++;
\ 00000038 0B78 LDRB R3,[R1, #+0]
\ 0000003A 1370 STRB R3,[R2, #+0]
\ 0000003C 491C ADDS R1,R1,#+1
\ 0000003E 521C ADDS R2,R2,#+1
481 #endif
482
483 #if OS_EVENT_TBL_SIZE > 3
484 *pdest++ = *psrc++;
\ 00000040 0B78 LDRB R3,[R1, #+0]
\ 00000042 1370 STRB R3,[R2, #+0]
\ 00000044 491C ADDS R1,R1,#+1
\ 00000046 521C ADDS R2,R2,#+1
485 #endif
486
487 #if OS_EVENT_TBL_SIZE > 4
488 *pdest++ = *psrc++;
\ 00000048 0B78 LDRB R3,[R1, #+0]
\ 0000004A 1370 STRB R3,[R2, #+0]
\ 0000004C 491C ADDS R1,R1,#+1
\ 0000004E 521C ADDS R2,R2,#+1
489 #endif
490
491 #if OS_EVENT_TBL_SIZE > 5
492 *pdest++ = *psrc++;
\ 00000050 0B78 LDRB R3,[R1, #+0]
\ 00000052 1370 STRB R3,[R2, #+0]
\ 00000054 491C ADDS R1,R1,#+1
\ 00000056 521C ADDS R2,R2,#+1
493 #endif
494
495 #if OS_EVENT_TBL_SIZE > 6
496 *pdest++ = *psrc++;
\ 00000058 0B78 LDRB R3,[R1, #+0]
\ 0000005A 1370 STRB R3,[R2, #+0]
\ 0000005C 491C ADDS R1,R1,#+1
\ 0000005E 521C ADDS R2,R2,#+1
497 #endif
498
499 #if OS_EVENT_TBL_SIZE > 7
500 *pdest = *psrc;
\ 00000060 0978 LDRB R1,[R1, #+0]
\ 00000062 1170 STRB R1,[R2, #+0]
501 #endif
502 p_mbox_data->OSMsg = pevent->OSEventPtr; /* Get message from mailbox */
\ 00000064 6168 LDR R1,[R4, #+4]
\ 00000066 2960 STR R1,[R5, #+0]
503 OS_EXIT_CRITICAL();
\ 00000068 ........ _BLF OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rT
504 return (OS_NO_ERR);
\ 0000006C 0020 MOVS R0,#+0
\ ??OSMboxQuery_1:
\ 0000006E 30BC POP {R4,R5}
\ 00000070 02BC POP {R1}
\ 00000072 0847 BX R1 ;; return
505 }
\ In segment CODE, align 4, keep-with-next
\ ??DataTable9:
\ 00000000 ........ DC32 OSEventFreeList
\ In segment CODE, align 4, keep-with-next
\ ??DataTable10:
\ 00000000 ........ DC32 OSIntNesting
506 #endif /* OS_MBOX_QUERY_EN */
507 #endif /* OS_MBOX_EN */
Maximum stack usage in bytes:
Function CSTACK
-------- ------
OSMboxAccept 12
OSMboxCreate 12
OSMboxDel 24
OSMboxPend 24
OSMboxPost 16
OSMboxPostOpt 20
OSMboxQuery 12
Segment part sizes:
Function/Label Bytes
-------------- -----
OSMboxAccept 44
OSMboxCreate 82
OSMboxDel 222
OSMboxPend 212
OSMboxPost 100
OSMboxPostOpt 124
OSMboxQuery 116
??DataTable9 4
??DataTable10 4
Others 112
1 020 bytes in segment CODE
908 bytes of CODE memory (+ 112 bytes shared)
Errors: none
Warnings: none
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -