📄 os_mutex.ls1
字号:
494 ; OSTCBCur->OSTCBPrio = prio;
495 ; OSTCBCur->OSTCBY = prio >> 3;
496 ; OSTCBCur->OSTCBBitY = OSMapTbl[OSTCBCur->OSTCBY];
497 ; OSTCBCur->OSTCBX = prio & 0x07;
498 ; OSTCBCur->OSTCBBitX = OSMapTbl[OSTCBCur->OSTCBX];
499 ; OSRdyGrp |= OSTCBCur->OSTCBBitY;
500 ; OSRdyTbl[OSTCBCur->OSTCBY] |= OSTCBCur->OSTCBBitX;
501 ; OSTCBPrioTbl[prio] = (OS_TCB *)OSTCBCur;
502 ; }
503 ; OSTCBPrioTbl[pip] = (OS_TCB *)1; /* Reserve table entry
*/
504 ; if (pevent->OSEventGrp != 0x00) { /* Any task waiting for the mutex?
*/
505 ; /* Yes, Make HPT waiting for mutex
ready */
506 ; prio = OS_EventTaskRdy(pevent, (void *)0, OS_STAT_MUTEX);
507 ; pevent->OSEventCnt &= OS_MUTEX_KEEP_UPPER_8; /* Save priority of mutex's ne
w owner */
508 ; pevent->OSEventCnt |= prio;
A51 MACRO ASSEMBLER OS_MUTEX 08/08/2005 11:36:49 PAGE 11
509 ; pevent->OSEventPtr = OSTCBPrioTbl[prio]; /* Link to mutex owner's OS_TC
B */
510 ; OS_EXIT_CRITICAL();
511 ; OS_Sched(); /* Find highest priority task
ready to run */
512 ; return (OS_NO_ERR);
513 ; }
514 ; pevent->OSEventCnt |= OS_MUTEX_AVAILABLE; /* No, Mutex is now available
*/
515 ; pevent->OSEventPtr = (void *)0;
516 ; OS_EXIT_CRITICAL();
517 ; return (OS_NO_ERR);
518 ; }
519 ; /*$PAGE*/
520 ; /*
521 ; *****************************************************************************************
****************
522 ; * QUERY A MUTUAL EXCLUSION SEMAPHORE
523 ; *
524 ; * Description: This function obtains information about a mutex
525 ; *
526 ; * Arguments : pevent is a pointer to the event control block associated with the
desired mutex
527 ; *
528 ; * pdata is a pointer to a structure that will contain information ab
out the mutex
529 ; *
530 ; * Returns : OS_NO_ERR The call was successful and the message was sent
531 ; * OS_ERR_QUERY_ISR If you called this function from an ISR
532 ; * OS_ERR_PEVENT_NULL 'pevent' is a NULL pointer
533 ; * OS_ERR_EVENT_TYPE If you are attempting to obtain data from a non mutex
.
534 ; *****************************************************************************************
****************
535 ; */
536 ;
537 ; #if OS_MUTEX_QUERY_EN > 0
538 ; INT8U OSMutexQuery (OS_EVENT *pevent, OS_MUTEX_DATA *ppdata)
539 ; {
540 ;
541 ; INT8U *psrc;
542 ; INT8U *pdest;
543 ;
544 ;
545 ; if (OSIntNesting > 0) { /* See if called from ISR ...
*/
546 ; return (OS_ERR_QUERY_ISR); /* ... can't QUERY mutex from
an ISR */
547 ; }
548 ; #if OS_ARG_CHK_EN > 0
549 ; if (pevent == (OS_EVENT *)0) { /* Validate 'pevent'
*/
550 ; return (OS_ERR_PEVENT_NULL);
551 ; }
552 ; if (pevent->OSEventType != OS_EVENT_TYPE_MUTEX) { /* Validate event block type
*/
553 ; return (OS_ERR_EVENT_TYPE);
554 ; }
555 ; #endif
556 ; OS_ENTER_CRITICAL();
557 ; ppdata->OSMutexPIP = (INT8U)(pevent->OSEventCnt >> 8);
558 ; ppdata->OSOwnerPrio = (INT8U)(pevent->OSEventCnt & OS_MUTEX_KEEP_LOWER_8);
559 ; if (ppdata->OSOwnerPrio == 0xFF) {
560 ; ppdata->OSValue = 1;
561 ; } else {
562 ; ppdata->OSValue = 0;
A51 MACRO ASSEMBLER OS_MUTEX 08/08/2005 11:36:49 PAGE 12
563 ; }
564 ; ppdata->OSEventGrp = pevent->OSEventGrp; /* Copy wait list
*/
565 ; psrc = &pevent->OSEventTbl[0];
566 ; pdest = &ppdata->OSEventTbl[0];
567 ; #if OS_EVENT_TBL_SIZE > 0
568 ; *pdest++ = *psrc++;
569 ; #endif
570 ;
571 ; #if OS_EVENT_TBL_SIZE > 1
572 ; *pdest++ = *psrc++;
573 ; #endif
574 ;
575 ; #if OS_EVENT_TBL_SIZE > 2
576 ; *pdest++ = *psrc++;
577 ; #endif
578 ;
579 ; #if OS_EVENT_TBL_SIZE > 3
580 ; *pdest++ = *psrc++;
581 ; #endif
582 ;
583 ; #if OS_EVENT_TBL_SIZE > 4
584 ; *pdest++ = *psrc++;
585 ; #endif
586 ;
587 ; #if OS_EVENT_TBL_SIZE > 5
588 ; *pdest++ = *psrc++;
589 ; #endif
590 ;
591 ; #if OS_EVENT_TBL_SIZE > 6
592 ; *pdest++ = *psrc++;
593 ; #endif
594 ;
595 ; #if OS_EVENT_TBL_SIZE > 7
596 ; *pdest = *psrc;
597 ; #endif
598 ; OS_EXIT_CRITICAL();
599 ; return (OS_NO_ERR);
600 ; }
601 ; #endif /* OS_MUTEX_QUERY_EN
*/
602 ; #endif /* OS_MUTEX_EN
*/
603 ; *** sync lost ***
604 ; *** sync lost ***
605 ; *** sync lost ***
606 END
A51 MACRO ASSEMBLER OS_MUTEX 08/08/2005 11:36:49 PAGE 13
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_MUTEX . . . . . 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_MUTEX 08/08/2005 11:36:49 PAGE 14
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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -