os_q.ls1
来自「在51单片机上移植成功的UCOS-II操作系统源代码,包括源代码及相关注释」· LS1 代码 · 共 740 行 · 第 1/4 页
LS1
740 行
425 ; */
426 ;
427 ; INT8U OSQPostFront (OS_EVENT *pevent, void *msg) reentrant
428 ; {
429 ; OS_Q *pq;
430 ;
431 ;
432 ; OS_ENTER_CRITICAL();
433 ; if (pevent->OSEventType != OS_EVENT_TYPE_Q) { /* Validate event block type
*/
434 ; OS_EXIT_CRITICAL();
435 ; return (OS_ERR_EVENT_TYPE);
436 ; }
437 ; if (pevent->OSEventGrp) { /* See if any task pending on queue
*/
438 ; OSEventTaskRdy(pevent, msg, OS_STAT_Q); /* Ready highest priority task wait
ing on event */
439 ; OS_EXIT_CRITICAL();
440 ; OSSched(); /* Find highest priority task ready
to run */
441 ; return (OS_NO_ERR);
442 ; } else {
443 ; pq = pevent->OSEventPtr; /* Point to queue control block
*/
444 ; if (pq->OSQEntries >= pq->OSQSize) { /* Make sure queue is not full
*/
445 ; OS_EXIT_CRITICAL();
446 ; return (OS_Q_FULL);
447 ; } else {
448 ; if (pq->OSQOut == pq->OSQStart) { /* Wrap OUT ptr if we are at the 1s
t queue entry */
449 ; pq->OSQOut = pq->OSQEnd;
450 ; }
451 ; pq->OSQOut--;
452 ; *pq->OSQOut = msg; /* Insert message into queue
*/
453 ; pq->OSQEntries++; /* Update the nbr of entries in the
queue */
454 ; OS_EXIT_CRITICAL();
455 ; }
456 ; return (OS_NO_ERR);
457 ; }
458 ; }
459 ; /*$PAGE*/
460 ; /*
461 ; *****************************************************************************************
****************
462 ; * QUERY A MESSAGE QUEUE
463 ; *
464 ; * Description: This function obtains information about a message queue.
465 ; *
466 ; * Arguments : pevent is a pointer to the event control block associated with the
desired mailbox
467 ; *
468 ; * pdata is a pointer to a structure that will contain information ab
out the message
A51 MACRO ASSEMBLER OS_Q 09/09/2007 21:12:59 PAGE 10
469 ; * queue.
470 ; *
471 ; * Returns : OS_NO_ERR The call was successful and the message was sent
472 ; * OS_ERR_EVENT_TYPE If you are attempting to obtain data from a non queue.
473 ; *****************************************************************************************
****************
474 ; */
475 ;
476 ; INT8U OSQQuery (OS_EVENT *pevent, OS_Q_DATA *ppdata) reentrant
477 ; {
478 ; OS_Q *pq;
479 ; INT8U i;
480 ; INT8U *psrc;
481 ; INT8U *pdest;
482 ;
483 ;
484 ; OS_ENTER_CRITICAL();
485 ; if (pevent->OSEventType != OS_EVENT_TYPE_Q) { /* Validate event block type
*/
486 ; OS_EXIT_CRITICAL();
487 ; return (OS_ERR_EVENT_TYPE);
488 ; }
489 ; ppdata->OSEventGrp = pevent->OSEventGrp; /* Copy message mailbox wait
list */
490 ; psrc = &pevent->OSEventTbl[0];
491 ; pdest = &ppdata->OSEventTbl[0];
492 ; for (i = 0; i < OS_EVENT_TBL_SIZE; i++) {
493 ; *pdest++ = *psrc++;
494 ; }
495 ; pq = (OS_Q *)pevent->OSEventPtr;
496 ; if (pq->OSQEntries > 0) {
497 ; ppdata->OSMsg = pq->OSQOut; /* Get next message to return
if available */
498 ; } else {
499 ; ppdata->OSMsg = (void *)0;
500 ; }
501 ; ppdata->OSNMsgs = pq->OSQEntries;
502 ; ppdata->OSQSize = pq->OSQSize;
503 ; OS_EXIT_CRITICAL();
504 ; return (OS_NO_ERR);
505 ; }
506 ; #endif
507 ; *** sync lost ***
508 ; *** sync lost ***
509 ; *** sync lost ***
510 END
A51 MACRO ASSEMBLER OS_Q 09/09/2007 21:12:59 PAGE 11
SYMBOL TABLE LISTING
------ ----- -------
N A M E T Y P E V A L U E ATTRIBUTES
AC . . . . . . . . B ADDR 00D0H.6 A
ACC. . . . . . . . D ADDR 00E0H A
B. . . . . . . . . D ADDR 00F0H A
CY . . . . . . . . B ADDR 00D0H.7 A
DPH. . . . . . . . D ADDR 0083H A
DPL. . . . . . . . D ADDR 0082H A
EA . . . . . . . . B ADDR 00A8H.7 A
ES . . . . . . . . B ADDR 00A8H.4 A
ET0. . . . . . . . B ADDR 00A8H.1 A
ET1. . . . . . . . B ADDR 00A8H.3 A
EX0. . . . . . . . B ADDR 00A8H.0 A
EX1. . . . . . . . B ADDR 00A8H.2 A
F0 . . . . . . . . B ADDR 00D0H.5 A
IE . . . . . . . . D ADDR 00A8H A
IE0. . . . . . . . B ADDR 0088H.1 A
IE1. . . . . . . . B ADDR 0088H.3 A
INT0 . . . . . . . B ADDR 00B0H.2 A
INT1 . . . . . . . B ADDR 00B0H.3 A
IP . . . . . . . . D ADDR 00B8H A
IT0. . . . . . . . B ADDR 0088H.0 A
IT1. . . . . . . . B ADDR 0088H.2 A
OS_Q . . . . . . . N NUMB -----
OV . . . . . . . . B ADDR 00D0H.2 A
P. . . . . . . . . B ADDR 00D0H.0 A
P0 . . . . . . . . D ADDR 0080H A
P1 . . . . . . . . D ADDR 0090H A
P2 . . . . . . . . D ADDR 00A0H A
P3 . . . . . . . . D ADDR 00B0H A
PCON . . . . . . . D ADDR 0087H A
PS . . . . . . . . B ADDR 00B8H.4 A
PSW. . . . . . . . D ADDR 00D0H A
PT0. . . . . . . . B ADDR 00B8H.1 A
PT1. . . . . . . . B ADDR 00B8H.3 A
PX0. . . . . . . . B ADDR 00B8H.0 A
PX1. . . . . . . . B ADDR 00B8H.2 A
RB8. . . . . . . . B ADDR 0098H.2 A
RD . . . . . . . . B ADDR 00B0H.7 A
REN. . . . . . . . B ADDR 0098H.4 A
RI . . . . . . . . B ADDR 0098H.0 A
RS0. . . . . . . . B ADDR 00D0H.3 A
RS1. . . . . . . . B ADDR 00D0H.4 A
RXD. . . . . . . . B ADDR 00B0H.0 A
SBUF . . . . . . . D ADDR 0099H A
SCON . . . . . . . D ADDR 0098H A
SM0. . . . . . . . B ADDR 0098H.7 A
SM1. . . . . . . . B ADDR 0098H.6 A
SM2. . . . . . . . B ADDR 0098H.5 A
SP . . . . . . . . D ADDR 0081H A
T0 . . . . . . . . B ADDR 00B0H.4 A
T1 . . . . . . . . B ADDR 00B0H.5 A
TB8. . . . . . . . B ADDR 0098H.3 A
TCON . . . . . . . D ADDR 0088H A
TF0. . . . . . . . B ADDR 0088H.5 A
TF1. . . . . . . . B ADDR 0088H.7 A
TH0. . . . . . . . D ADDR 008CH A
TH1. . . . . . . . D ADDR 008DH A
TI . . . . . . . . B ADDR 0098H.1 A
TL0. . . . . . . . D ADDR 008AH A
TL1. . . . . . . . D ADDR 008BH A
TMOD . . . . . . . D ADDR 0089H A
A51 MACRO ASSEMBLER OS_Q 09/09/2007 21:12:59 PAGE 12
TR0. . . . . . . . B ADDR 0088H.4 A
TR1. . . . . . . . B ADDR 0088H.6 A
TXD. . . . . . . . B ADDR 00B0H.1 A
WR . . . . . . . . B ADDR 00B0H.6 A
REGISTER BANK(S) USED: 0
ASSEMBLY COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?