⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 os_mutex.ls1

📁 uCOS-II_2.52在51上的移植程序
💻 LS1
📖 第 1 页 / 共 4 页
字号:
                     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 + -