📄 os_core.lst
字号:
347 case OS_EVENT_TYPE_SEM:
348 break;
349 #endif
350 #if (OS_MBOX_EN > 0)
351 case OS_EVENT_TYPE_MBOX:
352 break;
353 #endif
354 #if ((OS_Q_EN > 0) && (OS_MAX_QS > 0))
355 case OS_EVENT_TYPE_Q:
356 break;
357 #endif
358
359 case OS_EVENT_TYPE_MUTEX:
360 case OS_EVENT_TYPE_FLAG:
361 default:
362 *perr = OS_ERR_EVENT_TYPE;
363 return (0);
364 }
365 pevents++;
\ ??OSEventPendMulti_1:
\ 0000001E 091D ADDS R1,R1,#+4
366 pevent = *pevents;
\ 00000020 0F68 LDR R7,[R1, #+0]
\ ??OSEventPendMulti_0:
\ 00000022 002F CMP R7,#+0
\ 00000024 08D0 BEQ.N ??OSEventPendMulti_2
\ 00000026 3878 LDRB R0,[R7, #+0]
\ 00000028 0128 CMP R0,#+1
\ 0000002A F8D0 BEQ.N ??OSEventPendMulti_1
\ 0000002C 0328 CMP R0,#+3
\ 0000002E F6D0 BEQ.N ??OSEventPendMulti_1
\ 00000030 0120 MOVS R0,#+1
\ 00000032 2070 STRB R0,[R4, #+0]
\ 00000034 4846 MOV R0,R9
\ 00000036 DCE0 B.N ??OSEventPendMulti_3
367 }
368
369 if (OSIntNesting > 0) { /* See if called from ISR ... */
\ ??OSEventPendMulti_2:
\ 00000038 .... LDR.N R0,??DataTable10 ;; OSCPUUsage
\ 0000003A 8246 MOV R10,R0
\ 0000003C 9AF80200 LDRB R0,[R10, #+2]
\ 00000040 0028 CMP R0,#+0
\ 00000042 03D0 BEQ.N ??OSEventPendMulti_4
370 *perr = OS_ERR_PEND_ISR; /* ... can't PEND from an ISR */
\ 00000044 0220 MOVS R0,#+2
\ 00000046 2070 STRB R0,[R4, #+0]
371 return (0);
\ 00000048 4846 MOV R0,R9
\ 0000004A D2E0 B.N ??OSEventPendMulti_3
372 }
373 if (OSLockNesting > 0) { /* See if called with scheduler locked ... */
\ ??OSEventPendMulti_4:
\ 0000004C 9AF80300 LDRB R0,[R10, #+3]
\ 00000050 0028 CMP R0,#+0
\ 00000052 03D0 BEQ.N ??OSEventPendMulti_5
374 *perr = OS_ERR_PEND_LOCKED; /* ... can't PEND when locked */
\ 00000054 0D20 MOVS R0,#+13
\ 00000056 2070 STRB R0,[R4, #+0]
375 return (0);
\ 00000058 4846 MOV R0,R9
\ 0000005A CAE0 B.N ??OSEventPendMulti_3
376 }
377
378 /*$PAGE*/
379 OS_ENTER_CRITICAL();
\ ??OSEventPendMulti_5:
\ 0000005C ........ _BLF OS_CPU_SR_Save,??OS_CPU_SR_Save??rT
\ 00000060 0190 STR R0,[SP, #+4]
380 events_rdy = OS_FALSE;
\ 00000062 4846 MOV R0,R9
\ 00000064 8DF80000 STRB R0,[SP, #+0]
381 events_rdy_nbr = 0;
\ 00000068 CB46 MOV R11,R9
382 events_stat = OS_STAT_RDY;
383 pevents = pevents_pend;
\ 0000006A 4146 MOV R1,R8
384 pevent = *pevents;
\ 0000006C 0F68 LDR R7,[R1, #+0]
\ 0000006E 0DE0 B.N ??OSEventPendMulti_6
385 while (pevent != (OS_EVENT *)0) { /* See if any events already available */
386 switch (pevent->OSEventType) {
387 #if (OS_SEM_EN > 0)
388 case OS_EVENT_TYPE_SEM:
389 if (pevent->OSEventCnt > 0) { /* If semaphore count > 0, resource available; */
390 pevent->OSEventCnt--; /* ... decrement semaphore, ... */
\ ??OSEventPendMulti_7:
\ 00000070 521E SUBS R2,R2,#+1
\ 00000072 3A81 STRH R2,[R7, #+8]
391 *pevents_rdy++ = pevent; /* ... and return available semaphore event */
\ 00000074 2F60 STR R7,[R5, #+0]
\ 00000076 2D1D ADDS R5,R5,#+4
392 events_rdy = OS_TRUE;
\ 00000078 0122 MOVS R2,#+1
\ 0000007A 8DF80020 STRB R2,[SP, #+0]
393 *pmsgs_rdy++ = (void *)0; /* NO message returned for semaphores */
\ 0000007E C6F80090 STR R9,[R6, #+0]
\ 00000082 361D ADDS R6,R6,#+4
394 events_rdy_nbr++;
\ 00000084 029A LDR R2,[SP, #+8]
\ 00000086 9346 MOV R11,R2
395
396 } else {
397 events_stat |= OS_STAT_SEM; /* Configure multi-pend for semaphore events */
398 }
399 break;
400 #endif
401
402 #if (OS_MBOX_EN > 0)
403 case OS_EVENT_TYPE_MBOX:
404 if (pevent->OSEventPtr != (void *)0) { /* If mailbox NOT empty; ... */
405 /* ... return available message, ... */
406 *pmsgs_rdy++ = (void *)pevent->OSEventPtr;
407 pevent->OSEventPtr = (void *)0;
408 *pevents_rdy++ = pevent; /* ... and return available mailbox event */
409 events_rdy = OS_TRUE;
410 events_rdy_nbr++;
411
412 } else {
413 events_stat |= OS_STAT_MBOX; /* Configure multi-pend for mailbox events */
414 }
415 break;
416 #endif
417
418 #if ((OS_Q_EN > 0) && (OS_MAX_QS > 0))
419 case OS_EVENT_TYPE_Q:
420 pq = (OS_Q *)pevent->OSEventPtr;
421 if (pq->OSQEntries > 0) { /* If queue NOT empty; ... */
422 /* ... return available message, ... */
423 *pmsgs_rdy++ = (void *)*pq->OSQOut++;
424 if (pq->OSQOut == pq->OSQEnd) { /* If OUT ptr at queue end, ... */
425 pq->OSQOut = pq->OSQStart; /* ... wrap to queue start */
426 }
427 pq->OSQEntries--; /* Update number of queue entries */
428 *pevents_rdy++ = pevent; /* ... and return available queue event */
429 events_rdy = OS_TRUE;
430 events_rdy_nbr++;
431
432 } else {
433 events_stat |= OS_STAT_Q; /* Configure multi-pend for queue events */
434 }
435 break;
436 #endif
437
438 case OS_EVENT_TYPE_MUTEX:
439 case OS_EVENT_TYPE_FLAG:
440 default:
441 OS_EXIT_CRITICAL();
442 *pevents_rdy = (OS_EVENT *)0; /* NULL terminate return event array */
443 *perr = OS_ERR_EVENT_TYPE;
444 return (events_rdy_nbr);
445 }
446 pevents++;
\ ??OSEventPendMulti_8:
\ 00000088 091D ADDS R1,R1,#+4
447 pevent = *pevents;
\ 0000008A 0F68 LDR R7,[R1, #+0]
\ ??OSEventPendMulti_6:
\ 0000008C 5A46 MOV R2,R11
\ 0000008E 521C ADDS R2,R2,#+1
\ 00000090 92B2 UXTH R2,R2
\ 00000092 0292 STR R2,[SP, #+8]
\ 00000094 002F CMP R7,#+0
\ 00000096 27D0 BEQ.N ??OSEventPendMulti_9
\ 00000098 3A78 LDRB R2,[R7, #+0]
\ 0000009A 012A CMP R2,#+1
\ 0000009C 07D0 BEQ.N ??OSEventPendMulti_10
\ 0000009E 032A CMP R2,#+3
\ 000000A0 18D1 BNE.N ??OSEventPendMulti_11
\ 000000A2 3A89 LDRH R2,[R7, #+8]
\ 000000A4 002A CMP R2,#+0
\ 000000A6 E3D1 BNE.N ??OSEventPendMulti_7
\ 000000A8 50F00100 ORRS R0,R0,#0x1
\ 000000AC ECE7 B.N ??OSEventPendMulti_8
\ ??OSEventPendMulti_10:
\ 000000AE 7A68 LDR R2,[R7, #+4]
\ 000000B0 002A CMP R2,#+0
\ 000000B2 0BD0 BEQ.N ??OSEventPendMulti_12
\ 000000B4 3260 STR R2,[R6, #+0]
\ 000000B6 361D ADDS R6,R6,#+4
\ 000000B8 C7F80490 STR R9,[R7, #+4]
\ 000000BC 2F60 STR R7,[R5, #+0]
\ 000000BE 2D1D ADDS R5,R5,#+4
\ 000000C0 0122 MOVS R2,#+1
\ 000000C2 8DF80020 STRB R2,[SP, #+0]
\ 000000C6 029A LDR R2,[SP, #+8]
\ 000000C8 9346 MOV R11,R2
\ 000000CA DDE7 B.N ??OSEventPendMulti_8
\ ??OSEventPendMulti_12:
\ 000000CC 50F00200 ORRS R0,R0,#0x2
\ 000000D0 C0B2 UXTB R0,R0
\ 000000D2 D9E7 B.N ??OSEventPendMulti_8
\ ??OSEventPendMulti_11:
\ 000000D4 0198 LDR R0,[SP, #+4]
\ 000000D6 ........ _BLF OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rT
\ 000000DA C5F80090 STR R9,[R5, #+0]
\ 000000DE 0120 MOVS R0,#+1
\ 000000E0 2070 STRB R0,[R4, #+0]
\ 000000E2 5846 MOV R0,R11
\ 000000E4 80B2 UXTH R0,R0
\ 000000E6 84E0 B.N ??OSEventPendMulti_3
448 }
449
450 if ( events_rdy == OS_TRUE) { /* Return any events already available */
\ ??OSEventPendMulti_9:
\ 000000E8 9DF80010 LDRB R1,[SP, #+0]
\ 000000EC 0129 CMP R1,#+1
\ 000000EE 09D1 BNE.N ??OSEventPendMulti_13
451 *pevents_rdy = (OS_EVENT *)0; /* NULL terminate return event array */
\ 000000F0 C5F80090 STR R9,[R5, #+0]
452 OS_EXIT_CRITICAL();
\ 000000F4 0198 LDR R0,[SP, #+4]
\ 000000F6 ........ _BLF OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rT
453 *perr = OS_ERR_NONE;
\ 000000FA 4846 MOV R0,R9
\ 000000FC 2070 STRB R0,[R4, #+0]
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -