📄 os_core.lst
字号:
454 return (events_rdy_nbr);
\ 000000FE 5846 MOV R0,R11
\ 00000100 80B2 UXTH R0,R0
\ 00000102 76E0 B.N ??OSEventPendMulti_3
455 }
456 /*$PAGE*/
457 /* Otherwise, must wait until any event occurs */
458 OSTCBCur->OSTCBStat |= events_stat | /* Resource not available, ... */
459 OS_STAT_MULTI; /* ... pend on multiple events */
\ ??OSEventPendMulti_13:
\ 00000104 DAF82010 LDR R1,[R10, #+32]
\ 00000108 0A00 MOVS R2,R1
\ 0000010A 3032 ADDS R2,R2,#+48
\ 0000010C 1278 LDRB R2,[R2, #+0]
\ 0000010E 50F08000 ORRS R0,R0,#0x80
\ 00000112 1043 ORRS R0,R0,R2
\ 00000114 81F83000 STRB R0,[R1, #+48]
460 OSTCBCur->OSTCBStatPend = OS_STAT_PEND_OK;
\ 00000118 DAF82000 LDR R0,[R10, #+32]
\ 0000011C 3130 ADDS R0,R0,#+49
\ 0000011E 4946 MOV R1,R9
\ 00000120 0170 STRB R1,[R0, #+0]
461 OSTCBCur->OSTCBDly = timeout; /* Store pend timeout in TCB */
\ 00000122 DAF82000 LDR R0,[R10, #+32]
\ 00000126 BDF80210 LDRH R1,[SP, #+2]
\ 0000012A C185 STRH R1,[R0, #+46]
462 OS_EventTaskWaitMulti(pevents_pend); /* Suspend task until events or timeout occurs */
\ 0000012C 4046 MOV R0,R8
\ 0000012E ........ BL OS_EventTaskWaitMulti
463
464 OS_EXIT_CRITICAL();
\ 00000132 0198 LDR R0,[SP, #+4]
\ 00000134 ........ _BLF OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rT
465 OS_Sched(); /* Find next highest priority task ready */
\ 00000138 ........ BL OS_Sched
466 OS_ENTER_CRITICAL();
\ 0000013C ........ _BLF OS_CPU_SR_Save,??OS_CPU_SR_Save??rT
\ 00000140 0190 STR R0,[SP, #+4]
467
468 switch (OSTCBCur->OSTCBStatPend) { /* Handle event posted, aborted, or timed-out */
\ 00000142 DAF82000 LDR R0,[R10, #+32]
\ 00000146 0100 MOVS R1,R0
\ 00000148 1C31 ADDS R1,R1,#+28
\ 0000014A 4A7D LDRB R2,[R1, #+21]
\ 0000014C 002A CMP R2,#+0
\ 0000014E 01D0 BEQ.N ??OSEventPendMulti_14
\ 00000150 022A CMP R2,#+2
\ 00000152 11D1 BNE.N ??OSEventPendMulti_15
469 case OS_STAT_PEND_OK:
470 case OS_STAT_PEND_ABORT:
471 pevent = OSTCBCur->OSTCBEventPtr;
\ ??OSEventPendMulti_14:
\ 00000154 0F68 LDR R7,[R1, #+0]
472 if (pevent != (OS_EVENT *)0) { /* If task event ptr != NULL, ... */
\ 00000156 002F CMP R7,#+0
\ 00000158 06D0 BEQ.N ??OSEventPendMulti_16
473 *pevents_rdy++ = pevent; /* ... return available event ... */
\ 0000015A 2F60 STR R7,[R5, #+0]
\ 0000015C 2D1D ADDS R5,R5,#+4
474 *pevents_rdy = (OS_EVENT *)0; /* ... & NULL terminate return event array */
\ 0000015E C5F80090 STR R9,[R5, #+0]
475 events_rdy_nbr++;
\ 00000162 0298 LDR R0,[SP, #+8]
\ 00000164 8346 MOV R11,R0
\ 00000166 0AE0 B.N ??OSEventPendMulti_17
476
477 } else { /* Else NO event available, handle as timeout */
478 OSTCBCur->OSTCBStatPend = OS_STAT_PEND_TO;
\ ??OSEventPendMulti_16:
\ 00000168 0120 MOVS R0,#+1
\ 0000016A 4875 STRB R0,[R1, #+21]
479 OS_EventTaskRemoveMulti(OSTCBCur, pevents_pend);
\ 0000016C 4146 MOV R1,R8
\ 0000016E DAF82000 LDR R0,[R10, #+32]
\ 00000172 ........ BL OS_EventTaskRemoveMulti
\ 00000176 02E0 B.N ??OSEventPendMulti_17
480 }
481 break;
482
483 case OS_STAT_PEND_TO: /* If events timed out, ... */
484 default: /* ... remove task from events' wait lists */
485 OS_EventTaskRemoveMulti(OSTCBCur, pevents_pend);
\ ??OSEventPendMulti_15:
\ 00000178 4146 MOV R1,R8
\ 0000017A ........ BL OS_EventTaskRemoveMulti
486 break;
487 }
488
489 switch (OSTCBCur->OSTCBStatPend) {
\ ??OSEventPendMulti_17:
\ 0000017E DAF82000 LDR R0,[R10, #+32]
\ 00000182 2430 ADDS R0,R0,#+36
\ 00000184 417B LDRB R1,[R0, #+13]
\ 00000186 0029 CMP R1,#+0
\ 00000188 02D0 BEQ.N ??OSEventPendMulti_18
\ 0000018A 0229 CMP R1,#+2
\ 0000018C 0ED0 BEQ.N ??OSEventPendMulti_19
\ 0000018E 12E0 B.N ??OSEventPendMulti_20
490 case OS_STAT_PEND_OK:
491 switch (pevent->OSEventType) { /* Return event's message */
\ ??OSEventPendMulti_18:
\ 00000190 3978 LDRB R1,[R7, #+0]
\ 00000192 491E SUBS R1,R1,#+1
\ 00000194 0129 CMP R1,#+1
\ 00000196 04D9 BLS.N ??OSEventPendMulti_21
\ 00000198 891E SUBS R1,R1,#+2
\ 0000019A 9BD1 BNE.N ??OSEventPendMulti_11
492 #if (OS_SEM_EN > 0)
493 case OS_EVENT_TYPE_SEM:
494 *pmsgs_rdy++ = (void *)0; /* NO message returned for semaphores */
\ 0000019C C6F80090 STR R9,[R6, #+0]
\ 000001A0 01E0 B.N ??OSEventPendMulti_22
495 break;
496 #endif
497
498 #if ((OS_MBOX_EN > 0) || \
499 ((OS_Q_EN > 0) && (OS_MAX_QS > 0)))
500 case OS_EVENT_TYPE_MBOX:
501 case OS_EVENT_TYPE_Q:
502 *pmsgs_rdy++ = (void *)OSTCBCur->OSTCBMsg; /* Return received message */
\ ??OSEventPendMulti_21:
\ 000001A2 0068 LDR R0,[R0, #+0]
\ 000001A4 3060 STR R0,[R6, #+0]
503 break;
504 #endif
505
506 case OS_EVENT_TYPE_MUTEX:
507 case OS_EVENT_TYPE_FLAG:
508 default:
509 OS_EXIT_CRITICAL();
510 *pevents_rdy = (OS_EVENT *)0; /* NULL terminate return event array */
511 *perr = OS_ERR_EVENT_TYPE;
512 return (events_rdy_nbr);
513 }
514 *perr = OS_ERR_NONE;
\ ??OSEventPendMulti_22:
\ 000001A6 4846 MOV R0,R9
\ 000001A8 2070 STRB R0,[R4, #+0]
\ 000001AA 08E0 B.N ??OSEventPendMulti_23
515 break;
516
517 case OS_STAT_PEND_ABORT:
518 *pmsgs_rdy++ = (void *)0; /* NO message returned for abort */
\ ??OSEventPendMulti_19:
\ 000001AC C6F80090 STR R9,[R6, #+0]
519 *perr = OS_ERR_PEND_ABORT; /* Indicate that event aborted */
\ 000001B0 0E20 MOVS R0,#+14
\ 000001B2 2070 STRB R0,[R4, #+0]
\ 000001B4 03E0 B.N ??OSEventPendMulti_23
520 break;
521
522 case OS_STAT_PEND_TO:
523 default:
524 *pmsgs_rdy++ = (void *)0; /* NO message returned for timeout */
\ ??OSEventPendMulti_20:
\ 000001B6 C6F80090 STR R9,[R6, #+0]
525 *perr = OS_ERR_TIMEOUT; /* Indicate that events timed out */
\ 000001BA 0A20 MOVS R0,#+10
\ 000001BC 2070 STRB R0,[R4, #+0]
526 break;
527 }
528
529 OSTCBCur->OSTCBStat = OS_STAT_RDY; /* Set task status to ready */
\ ??OSEventPendMulti_23:
\ 000001BE DAF82000 LDR R0,[R10, #+32]
\ 000001C2 3030 ADDS R0,R0,#+48
\ 000001C4 4946 MOV R1,R9
\ 000001C6 0170 STRB R1,[R0, #+0]
530 OSTCBCur->OSTCBStatPend = OS_STAT_PEND_OK; /* Clear pend status */
\ 000001C8 DAF82000 LDR R0,[R10, #+32]
\ 000001CC 3130 ADDS R0,R0,#+49
\ 000001CE 0170 STRB R1,[R0, #+0]
531 OSTCBCur->OSTCBEventPtr = (OS_EVENT *)0; /* Clear event pointers */
\ 000001D0 DAF82000 LDR R0,[R10, #+32]
\ 000001D4 C0F81C90 STR R9,[R0, #+28]
532 OSTCBCur->OSTCBEventMultiPtr = (OS_EVENT **)0;
\ 000001D8 DAF82000 LDR R0,[R10, #+32]
\ 000001DC C0F82090 STR R9,[R0, #+32]
533 OSTCBCur->OSTCBMsg = (void *)0; /* Clear task message */
\ 000001E0 DAF82000 LDR R0,[R10, #+32]
\ 000001E4 C0F82490 STR R9,[R0, #+36]
534 OS_EXIT_CRITICAL();
\ 000001E8 0198 LDR R0,[SP, #+4]
\ 000001EA ........ _BLF OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rT
535
536 return (events_rdy_nbr);
\ 000001EE 5846 MOV R0,R11
\ 000001F0 80B2 UXTH R0,R0
\ ??OSEventPendMulti_3:
\ 000001F2 BDE8FE8F POP {R1-R11,PC} ;; return
537 }
538 #endif
539
540 /*$PAGE*/
541 /*
542 *********************************************************************************************************
543 * INITIALIZATION
544 *
545 * Description: This function is used to initialize the internals of uC/OS-II and MUST be called prior to
546 * creating any uC/OS-II object and, prior to calling OSStart().
547 *
548 * Arguments : none
549 *
550 * Returns : none
551 *********************************************************************************************************
552 */
553
\ In segment CODE, align 4, keep-with-next
554 void OSInit (void)
555 {
\ OSInit:
\ 00000000 00B5 PUSH {LR}
556 OSInitHookBegin();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -