?? os_core.lst
字號(hào):
\ 000000DC 0020 MOVS R0,#+0
\ 000000DE 6860 STR R0,[R5, #+4]
424 *pevents_rdy++ = pevent; /* ... and return available mailbox event */
\ 000000E0 CBF80050 STR R5,[R11, #+0]
\ 000000E4 1BF1040B ADDS R11,R11,#+4
425 events_rdy = OS_TRUE;
\ 000000E8 0120 MOVS R0,#+1
\ 000000EA 8DF80400 STRB R0,[SP, #+4]
426 events_rdy_nbr++;
\ 000000EE 18F10108 ADDS R8,R8,#+1
\ 000000F2 01E0 B.N ??OSEventPendMulti_20
427
428 } else {
429 events_stat |= OS_STAT_MBOX; /* Configure multi-pend for mailbox events */
\ ??OSEventPendMulti_19:
\ 000000F4 59F00209 ORRS R9,R9,#0x2
430 }
431 break;
\ ??OSEventPendMulti_20:
\ 000000F8 2DE0 B.N ??OSEventPendMulti_18
432 #endif
433
434 #if ((OS_Q_EN > 0u) && (OS_MAX_QS > 0u))
435 case OS_EVENT_TYPE_Q:
436 pq = (OS_Q *)pevent->OSEventPtr;
\ ??OSEventPendMulti_15:
\ 000000FA 6868 LDR R0,[R5, #+4]
\ 000000FC 0600 MOVS R6,R0
437 if (pq->OSQEntries > 0u) { /* If queue NOT empty; ... */
\ 000000FE F08A LDRH R0,[R6, #+22]
\ 00000100 0028 CMP R0,#+0
\ 00000102 1AD0 BEQ.N ??OSEventPendMulti_21
438 /* ... return available message, ... */
439 *pmsgs_rdy++ = (void *)*pq->OSQOut++;
\ 00000104 3069 LDR R0,[R6, #+16]
\ 00000106 011D ADDS R1,R0,#+4
\ 00000108 3161 STR R1,[R6, #+16]
\ 0000010A 0068 LDR R0,[R0, #+0]
\ 0000010C CAF80000 STR R0,[R10, #+0]
\ 00000110 1AF1040A ADDS R10,R10,#+4
440 if (pq->OSQOut == pq->OSQEnd) { /* If OUT ptr at queue end, ... */
\ 00000114 3069 LDR R0,[R6, #+16]
\ 00000116 B168 LDR R1,[R6, #+8]
\ 00000118 8842 CMP R0,R1
\ 0000011A 01D1 BNE.N ??OSEventPendMulti_22
441 pq->OSQOut = pq->OSQStart; /* ... wrap to queue start */
\ 0000011C 7068 LDR R0,[R6, #+4]
\ 0000011E 3061 STR R0,[R6, #+16]
442 }
443 pq->OSQEntries--; /* Update number of queue entries */
\ ??OSEventPendMulti_22:
\ 00000120 F08A LDRH R0,[R6, #+22]
\ 00000122 401E SUBS R0,R0,#+1
\ 00000124 F082 STRH R0,[R6, #+22]
444 *pevents_rdy++ = pevent; /* ... and return available queue event */
\ 00000126 CBF80050 STR R5,[R11, #+0]
\ 0000012A 1BF1040B ADDS R11,R11,#+4
445 events_rdy = OS_TRUE;
\ 0000012E 0120 MOVS R0,#+1
\ 00000130 8DF80400 STRB R0,[SP, #+4]
446 events_rdy_nbr++;
\ 00000134 18F10108 ADDS R8,R8,#+1
\ 00000138 01E0 B.N ??OSEventPendMulti_23
447
448 } else {
449 events_stat |= OS_STAT_Q; /* Configure multi-pend for queue events */
\ ??OSEventPendMulti_21:
\ 0000013A 59F00409 ORRS R9,R9,#0x4
450 }
451 break;
\ ??OSEventPendMulti_23:
\ 0000013E 0AE0 B.N ??OSEventPendMulti_18
452 #endif
453
454 case OS_EVENT_TYPE_MUTEX:
455 case OS_EVENT_TYPE_FLAG:
456 default:
457 OS_EXIT_CRITICAL();
\ ??OSEventPendMulti_13:
\ 00000140 0098 LDR R0,[SP, #+0]
\ 00000142 ........ BL OS_CPU_SR_Restore
458 *pevents_rdy = (OS_EVENT *)0; /* NULL terminate return event array */
\ 00000146 0020 MOVS R0,#+0
\ 00000148 CBF80000 STR R0,[R11, #+0]
459 *perr = OS_ERR_EVENT_TYPE;
\ 0000014C 0120 MOVS R0,#+1
\ 0000014E 2070 STRB R0,[R4, #+0]
460 return (events_rdy_nbr);
\ 00000150 4046 MOV R0,R8
\ 00000152 80B2 UXTH R0,R0 ;; ZeroExt R0,R0,#+16,#+16
\ 00000154 BEE0 B.N ??OSEventPendMulti_7
461 }
462 pevents++;
\ ??OSEventPendMulti_18:
\ 00000156 3F1D ADDS R7,R7,#+4
463 pevent = *pevents;
\ 00000158 3868 LDR R0,[R7, #+0]
\ 0000015A 0500 MOVS R5,R0
\ 0000015C 94E7 B.N ??OSEventPendMulti_10
464 }
465
466 if ( events_rdy == OS_TRUE) { /* Return any events already available */
\ ??OSEventPendMulti_11:
\ 0000015E 9DF80400 LDRB R0,[SP, #+4]
\ 00000162 0128 CMP R0,#+1
\ 00000164 0AD1 BNE.N ??OSEventPendMulti_24
467 *pevents_rdy = (OS_EVENT *)0; /* NULL terminate return event array */
\ 00000166 0020 MOVS R0,#+0
\ 00000168 CBF80000 STR R0,[R11, #+0]
468 OS_EXIT_CRITICAL();
\ 0000016C 0098 LDR R0,[SP, #+0]
\ 0000016E ........ BL OS_CPU_SR_Restore
469 *perr = OS_ERR_NONE;
\ 00000172 0020 MOVS R0,#+0
\ 00000174 2070 STRB R0,[R4, #+0]
470 return (events_rdy_nbr);
\ 00000176 4046 MOV R0,R8
\ 00000178 80B2 UXTH R0,R0 ;; ZeroExt R0,R0,#+16,#+16
\ 0000017A ABE0 B.N ??OSEventPendMulti_7
471 }
472 /*$PAGE*/
473 /* Otherwise, must wait until any event occurs */
474 OSTCBCur->OSTCBStat |= events_stat | /* Resource not available, ... */
475 OS_STAT_MULTI; /* ... pend on multiple events */
\ ??OSEventPendMulti_24:
\ 0000017C ........ LDR.W R0,??DataTable28
\ 00000180 0068 LDR R0,[R0, #+0]
\ 00000182 90F83400 LDRB R0,[R0, #+52]
\ 00000186 59F08001 ORRS R1,R9,#0x80
\ 0000018A 0843 ORRS R0,R1,R0
\ 0000018C ........ LDR.W R1,??DataTable28
\ 00000190 0968 LDR R1,[R1, #+0]
\ 00000192 81F83400 STRB R0,[R1, #+52]
476 OSTCBCur->OSTCBStatPend = OS_STAT_PEND_OK;
\ 00000196 ........ LDR.W R0,??DataTable28
\ 0000019A 0068 LDR R0,[R0, #+0]
\ 0000019C 0021 MOVS R1,#+0
\ 0000019E 80F83510 STRB R1,[R0, #+53]
477 OSTCBCur->OSTCBDly = timeout; /* Store pend timeout in TCB */
\ 000001A2 ........ LDR.W R0,??DataTable28
\ 000001A6 0068 LDR R0,[R0, #+0]
\ 000001A8 0499 LDR R1,[SP, #+16]
\ 000001AA 0163 STR R1,[R0, #+48]
478 OS_EventTaskWaitMulti(pevents_pend); /* Suspend task until events or timeout occurs */
\ 000001AC 0398 LDR R0,[SP, #+12]
\ 000001AE ........ BL OS_EventTaskWaitMulti
479
480 OS_EXIT_CRITICAL();
\ 000001B2 0098 LDR R0,[SP, #+0]
\ 000001B4 ........ BL OS_CPU_SR_Restore
481 OS_Sched(); /* Find next highest priority task ready */
\ 000001B8 ........ BL OS_Sched
482 OS_ENTER_CRITICAL();
\ 000001BC ........ BL OS_CPU_SR_Save
\ 000001C0 0090 STR R0,[SP, #+0]
483
484 switch (OSTCBCur->OSTCBStatPend) { /* Handle event posted, aborted, or timed-out */
\ 000001C2 ........ LDR.W R0,??DataTable28
\ 000001C6 0068 LDR R0,[R0, #+0]
\ 000001C8 90F83500 LDRB R0,[R0, #+53]
\ 000001CC 0028 CMP R0,#+0
\ 000001CE 01D0 BEQ.N ??OSEventPendMulti_25
\ 000001D0 0228 CMP R0,#+2
\ 000001D2 1DD1 BNE.N ??OSEventPendMulti_26
485 case OS_STAT_PEND_OK:
486 case OS_STAT_PEND_ABORT:
487 pevent = OSTCBCur->OSTCBEventPtr;
\ ??OSEventPendMulti_25:
\ 000001D4 ........ LDR.W R0,??DataTable28
\ 000001D8 0068 LDR R0,[R0, #+0]
\ 000001DA C069 LDR R0,[R0, #+28]
\ 000001DC 0500 MOVS R5,R0
488 if (pevent != (OS_EVENT *)0) { /* If task event ptr != NULL, ... */
\ 000001DE 002D CMP R5,#+0
\ 000001E0 09D0 BEQ.N ??OSEventPendMulti_27
489 *pevents_rdy++ = pevent; /* ... return available event ... */
\ 000001E2 CBF80050 STR R5,[R11, #+0]
\ 000001E6 1BF1040B ADDS R11,R11,#+4
490 *pevents_rdy = (OS_EVENT *)0; /* ... & NULL terminate return event array */
\ 000001EA 0020 MOVS R0,#+0
\ 000001EC CBF80000 STR R0,[R11, #+0]
491 events_rdy_nbr = 1;
\ 000001F0 0120 MOVS R0,#+1
\ 000001F2 8046 MOV R8,R0
\ 000001F4 0BE0 B.N ??OSEventPendMulti_28
492
493 } else { /* Else NO event available, handle as timeout */
494 OSTCBCur->OSTCBStatPend = OS_STAT_PEND_TO;
\ ??OSEventPendMulti_27:
\ 000001F6 ........ LDR.W R0,??DataTable28
\ 000001FA 0068 LDR R0,[R0, #+0]
\ 000001FC 0121 MOVS R1,#+1
\ 000001FE 80F83510 STRB R1,[R0, #+53]
495 OS_EventTaskRemoveMulti(OSTCBCur, pevents_pend);
\ 00000202 0399 LDR R1,[SP, #+12]
\ 00000204 ........ LDR.W R0,??DataTable28
\ 00000208 0068 LDR R0,[R0, #+0]
\ 0000020A ........ BL OS_EventTaskRemoveMulti
496 }
497 break;
\ ??OSEventPendMulti_28:
\ 0000020E 05E0 B.N ??OSEventPendMulti_29
498
499 case OS_STAT_PEND_TO: /* If events timed out, ... */
500 default: /* ... remove task from events' wait lists */
501 OS_EventTaskRemoveMulti(OSTCBCur, pevents_pend);
\ ??OSEventPendMulti_26:
\ 00000210 0399 LDR R1,[SP, #+12]
\ 00000212 ........ LDR.W R0,??DataTable28
\ 00000216 0068 LDR R0,[R0, #+0]
\ 00000218 ........ BL OS_EventTaskRemoveMulti
502 break;
503 }
504
505 switch (OSTCBCur->OSTCBStatPend) {
\ ??OSEventPendMulti_29:
\ 0000021C ........ LDR.W R0,??DataTable28
\ 00000220 0068 LDR R0,[R0, #+0]
\ 00000222 90F83500 LDRB R0,[R0, #+53]
\ 00000226 0028 CMP R0,#+0
\ 00000228 02D0 BEQ.N ??OSEventPendMulti_30
\ 0000022A 0228 CMP R0,#+2
\ 0000022C 23D0 BEQ.N ??OSEventPendMulti_31
\ 0000022E 2AE0 B.N ??OSEventPendMulti_32
506 case OS_STAT_PEND_OK:
507 switch (pevent->OSEventType) {
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -