📄 os_mbox.s79
字号:
MOVS R4,R0
MOVS R5,R1
MOVS R6,R2
// 391 #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
// 392 OS_CPU_SR cpu_sr;
// 393 #endif
// 394
// 395
// 396 #if OS_ARG_CHK_EN > 0
// 397 if (pevent == (OS_EVENT *)0) { /* Validate 'pevent' */
CMP R4,#+0
BNE ??OSMboxPostOpt_0
// 398 return (OS_ERR_PEVENT_NULL);
MOVS R0,#+4
B ??OSMboxPostOpt_1
// 399 }
// 400 if (msg == (void *)0) { /* Make sure we are not posting a NULL pointer */
??OSMboxPostOpt_0:
CMP R5,#+0
BNE ??OSMboxPostOpt_2
// 401 return (OS_ERR_POST_NULL_PTR);
MOVS R0,#+3
B ??OSMboxPostOpt_1
// 402 }
// 403 #endif
// 404 if (pevent->OSEventType != OS_EVENT_TYPE_MBOX) { /* Validate event block type */
??OSMboxPostOpt_2:
LDRB R0,[R4, #+0]
CMP R0,#+1
BEQ ??OSMboxPostOpt_3
// 405 return (OS_ERR_EVENT_TYPE);
MOVS R0,#+1
B ??OSMboxPostOpt_1
// 406 }
// 407 OS_ENTER_CRITICAL();
??OSMboxPostOpt_3:
_BLF OS_CPU_SR_Save,??OS_CPU_SR_Save??rT
MOVS R7,R0
// 408 if (pevent->OSEventGrp != 0x00) { /* See if any task pending on mailbox */
LDRB R0,[R4, #+1]
CMP R0,#+0
BEQ ??OSMboxPostOpt_4
// 409 if ((opt & OS_POST_OPT_BROADCAST) != 0x00) { /* Do we need to post msg to ALL waiting tasks ? */
LSLS R0,R6,#+31
BPL ??OSMboxPostOpt_5
// 410 while (pevent->OSEventGrp != 0x00) { /* Yes, Post to ALL tasks waiting on mailbox */
// 411 OS_EventTaskRdy(pevent, msg, OS_STAT_MBOX);
??OSMboxPostOpt_6:
MOVS R2,#+2
MOVS R1,R5
MOVS R0,R4
_BLF OS_EventTaskRdy,??OS_EventTaskRdy??rT
// 412 }
LDRB R0,[R4, #+1]
CMP R0,#+0
BNE ??OSMboxPostOpt_6
B ??OSMboxPostOpt_7
// 413 } else {
// 414 OS_EventTaskRdy(pevent, msg, OS_STAT_MBOX); /* No, Post to HPT waiting on mbox */
??OSMboxPostOpt_5:
MOVS R2,#+2
MOVS R1,R5
MOVS R0,R4
_BLF OS_EventTaskRdy,??OS_EventTaskRdy??rT
// 415 }
// 416 OS_EXIT_CRITICAL();
??OSMboxPostOpt_7:
MOVS R0,R7
_BLF OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rT
// 417 OS_Sched(); /* Find highest priority task ready to run */
_BLF OS_Sched,??OS_Sched??rT
// 418 return (OS_NO_ERR);
B.N ??OSMboxPostOpt_8
// 419 }
// 420 if (pevent->OSEventPtr != (void *)0) { /* Make sure mailbox doesn't already have a msg */
??OSMboxPostOpt_4:
LDR R0,[R4, #+4]
CMP R0,#+0
BEQ ??OSMboxPostOpt_9
// 421 OS_EXIT_CRITICAL();
MOVS R0,R7
_BLF OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rT
// 422 return (OS_MBOX_FULL);
MOVS R0,#+20
B ??OSMboxPostOpt_1
// 423 }
// 424 pevent->OSEventPtr = msg; /* Place message in mailbox */
??OSMboxPostOpt_9:
STR R5,[R4, #+4]
// 425 OS_EXIT_CRITICAL();
MOVS R0,R7
_BLF OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rT
// 426 return (OS_NO_ERR);
??OSMboxPostOpt_8:
MOVS R0,#+0
??OSMboxPostOpt_1:
POP {R4-R7}
POP {R1}
BX R1 ;; return
CFI EndBlock cfiBlock11
// 427 }
RSEG CODE:CODE:NOROOT(2)
CFI Block cfiBlock12 Using cfiCommon0
CFI NoFunction
ARM
??OSMboxQuery??rA:
ADD R12,PC,#+1
BX R12
CFI EndBlock cfiBlock12
REQUIRE OSMboxQuery
// 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
RSEG CODE:CODE:NOROOT(2)
CFI Block cfiBlock13 Using cfiCommon1
CFI Function OSMboxQuery
THUMB
// 449 INT8U OSMboxQuery (OS_EVENT *pevent, OS_MBOX_DATA *p_mbox_data)
// 450 {
OSMboxQuery:
PUSH {R4,R5,LR}
CFI ?RET Frame(CFA, -4)
CFI R5 Frame(CFA, -8)
CFI R4 Frame(CFA, -12)
CFI CFA R13+12
MOVS R4,R0
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' */
CMP R4,#+0
BNE ??OSMboxQuery_0
// 460 return (OS_ERR_PEVENT_NULL);
MOVS R0,#+4
B ??OSMboxQuery_1
// 461 }
// 462 #endif
// 463 if (pevent->OSEventType != OS_EVENT_TYPE_MBOX) { /* Validate event block type */
??OSMboxQuery_0:
LDRB R0,[R4, #+0]
CMP R0,#+1
BEQ ??OSMboxQuery_2
// 464 return (OS_ERR_EVENT_TYPE);
MOVS R0,#+1
B ??OSMboxQuery_1
// 465 }
// 466 OS_ENTER_CRITICAL();
??OSMboxQuery_2:
_BLF OS_CPU_SR_Save,??OS_CPU_SR_Save??rT
// 467 p_mbox_data->OSEventGrp = pevent->OSEventGrp; /* Copy message mailbox wait list */
LDRB R1,[R4, #+1]
STRB R1,[R5, #+12]
// 468 psrc = &pevent->OSEventTbl[0];
MOVS R1,R4
// 469 pdest = &p_mbox_data->OSEventTbl[0];
ADDS R2,R5,#+4
// 470
// 471 #if OS_EVENT_TBL_SIZE > 0
// 472 *pdest++ = *psrc++;
LDRB R3,[R1, #+8]
STRB R3,[R2, #+0]
// 473 #endif
// 474
// 475 #if OS_EVENT_TBL_SIZE > 1
// 476 *pdest++ = *psrc++;
LDRB R3,[R1, #+9]
STRB R3,[R2, #+1]
// 477 #endif
// 478
// 479 #if OS_EVENT_TBL_SIZE > 2
// 480 *pdest++ = *psrc++;
LDRB R3,[R1, #+10]
STRB R3,[R2, #+2]
// 481 #endif
// 482
// 483 #if OS_EVENT_TBL_SIZE > 3
// 484 *pdest++ = *psrc++;
LDRB R3,[R1, #+11]
STRB R3,[R2, #+3]
// 485 #endif
// 486
// 487 #if OS_EVENT_TBL_SIZE > 4
// 488 *pdest++ = *psrc++;
LDRB R3,[R1, #+12]
STRB R3,[R2, #+4]
// 489 #endif
// 490
// 491 #if OS_EVENT_TBL_SIZE > 5
// 492 *pdest++ = *psrc++;
LDRB R3,[R1, #+13]
STRB R3,[R2, #+5]
ADDS R1,R1,#+14
ADDS R2,R2,#+6
// 493 #endif
// 494
// 495 #if OS_EVENT_TBL_SIZE > 6
// 496 *pdest++ = *psrc++;
LDRB R3,[R1, #+0]
STRB R3,[R2, #+0]
// 497 #endif
// 498
// 499 #if OS_EVENT_TBL_SIZE > 7
// 500 *pdest = *psrc;
LDRB R1,[R1, #+1]
STRB R1,[R2, #+1]
// 501 #endif
// 502 p_mbox_data->OSMsg = pevent->OSEventPtr; /* Get message from mailbox */
LDR R1,[R4, #+4]
STR R1,[R5, #+0]
// 503 OS_EXIT_CRITICAL();
_BLF OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rT
// 504 return (OS_NO_ERR);
MOVS R0,#+0
??OSMboxQuery_1:
POP {R4,R5}
POP {R1}
BX R1 ;; return
CFI EndBlock cfiBlock13
// 505 }
RSEG CODE:CODE:NOROOT(2)
CFI Block cfiBlock14 Using cfiCommon1
CFI NoFunction
THUMB
??OS_CPU_SR_Save??rT:
LDR R3,??Subroutine7_0 ;; OS_CPU_SR_Save
BX R3
DATA
??Subroutine7_0:
DC32 OS_CPU_SR_Save
CFI EndBlock cfiBlock14
RSEG CODE:CODE:NOROOT(2)
CFI Block cfiBlock15 Using cfiCommon1
CFI NoFunction
THUMB
??OS_CPU_SR_Restore??rT:
LDR R3,??Subroutine8_0 ;; OS_CPU_SR_Restore
BX R3
DATA
??Subroutine8_0:
DC32 OS_CPU_SR_Restore
CFI EndBlock cfiBlock15
RSEG CODE:CODE:NOROOT(2)
CFI Block cfiBlock16 Using cfiCommon1
CFI NoFunction
THUMB
??OS_EventWaitListInit??rT:
LDR R3,??Subroutine9_0 ;; OS_EventWaitListInit
BX R3
DATA
??Subroutine9_0:
DC32 OS_EventWaitListInit
CFI EndBlock cfiBlock16
RSEG CODE:CODE:NOROOT(2)
CFI Block cfiBlock17 Using cfiCommon1
CFI NoFunction
THUMB
??OS_EventTaskRdy??rT:
LDR R3,??Subroutine10_0 ;; OS_EventTaskRdy
BX R3
DATA
??Subroutine10_0:
DC32 OS_EventTaskRdy
CFI EndBlock cfiBlock17
RSEG CODE:CODE:NOROOT(2)
CFI Block cfiBlock18 Using cfiCommon1
CFI NoFunction
THUMB
??OS_Sched??rT:
LDR R3,??Subroutine11_0 ;; OS_Sched
BX R3
DATA
??Subroutine11_0:
DC32 OS_Sched
CFI EndBlock cfiBlock18
RSEG CODE:CODE:NOROOT(2)
CFI Block cfiBlock19 Using cfiCommon1
CFI NoFunction
THUMB
??OS_EventTaskWait??rT:
LDR R3,??Subroutine12_0 ;; OS_EventTaskWait
BX R3
DATA
??Subroutine12_0:
DC32 OS_EventTaskWait
CFI EndBlock cfiBlock19
RSEG CODE:CODE:NOROOT(2)
CFI Block cfiBlock20 Using cfiCommon1
CFI NoFunction
THUMB
??OS_EventTO??rT:
LDR R3,??Subroutine13_0 ;; OS_EventTO
BX R3
DATA
??Subroutine13_0:
DC32 OS_EventTO
CFI EndBlock cfiBlock20
END
// 506 #endif /* OS_MBOX_QUERY_EN */
// 507 #endif /* OS_MBOX_EN */
//
// 920 bytes in segment CODE
//
// 808 bytes of CODE memory (+ 112 bytes shared)
//
//Errors: none
//Warnings: none
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -