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

📄 os_sem.ls1

📁 uCOS-II_2.52在51上的移植程序
💻 LS1
📖 第 1 页 / 共 3 页
字号:
                     358     ; *
                     359     ; * Arguments  : pevent        is a pointer to the event control block associated with the 
                             desired
                     360     ; *                            semaphore.
                     361     ; *
                     362     ; * Returns    : OS_NO_ERR           The call was successful and the semaphore was signaled
                             .
A51 MACRO ASSEMBLER  OS_SEM                                                               08/08/2005 11:36:53 PAGE     8

                     363     ; *              OS_SEM_OVF          If the semaphore count exceeded its limit.  In other w
                             ords, you have
                     364     ; *                                  signalled the semaphore more often than you waited on 
                             it with either
                     365     ; *                                  OSSemAccept() or OSSemPend().
                     366     ; *              OS_ERR_EVENT_TYPE   If you didn't pass a pointer to a semaphore
                     367     ; *              OS_ERR_PEVENT_NULL  If 'pevent' is a NULL pointer.
                     368     ; *****************************************************************************************
                             ****************
                     369     ; */
                     370     ; 
                     371     ; INT8U  OSSemPost (OS_EVENT *pevent)
                     372     ; {
                     373     ;   
                     374     ; 
                     375     ; 
                     376     ; #if OS_ARG_CHK_EN > 0
                     377     ;     if (pevent == (OS_EVENT *)0) {                         /* Validate 'pevent'          
                                           */
                     378     ;         return (OS_ERR_PEVENT_NULL);
                     379     ;     }
                     380     ;     if (pevent->OSEventType != OS_EVENT_TYPE_SEM) {        /* Validate event block type  
                                           */
                     381     ;         return (OS_ERR_EVENT_TYPE);
                     382     ;     }
                     383     ; #endif
                     384     ;     OS_ENTER_CRITICAL();
                     385     ;     if (pevent->OSEventGrp != 0x00) {                      /* See if any task waiting for
                              semaphore    */
                     386     ;         OS_EventTaskRdy(pevent, (void *)0, OS_STAT_SEM);   /* Ready highest prio task wai
                             ting on event */
                     387     ;         OS_EXIT_CRITICAL();
                     388     ;         OS_Sched();                                        /* Find highest priority task 
                             ready to run  */
                     389     ;         return (OS_NO_ERR);
                     390     ;     }
                     391     ;     if (pevent->OSEventCnt < 65535) {                 /* Make sure semaphore will not ove
                             rflow         */
                     392     ;         pevent->OSEventCnt++;                         /* Increment semaphore count to reg
                             ister event   */
                     393     ;         OS_EXIT_CRITICAL();
                     394     ;         return (OS_NO_ERR);
                     395     ;     }
                     396     ;     OS_EXIT_CRITICAL();                               /* Semaphore value has reached its 
                             maximum       */
                     397     ;     return (OS_SEM_OVF);
                     398     ; }
                     399     ; /*$PAGE*/
                     400     ; /*
                     401     ; *****************************************************************************************
                             ****************
                     402     ; *                                          QUERY A SEMAPHORE
                     403     ; *
                     404     ; * Description: This function obtains information about a semaphore
                     405     ; *
                     406     ; * Arguments  : pevent        is a pointer to the event control block associated with the 
                             desired
                     407     ; *                            semaphore
                     408     ; *
                     409     ; *              pdata         is a pointer to a structure that will contain information ab
                             out the
                     410     ; *                            semaphore.
                     411     ; *
                     412     ; * Returns    : OS_NO_ERR           The call was successful and the message was sent
                     413     ; *              OS_ERR_EVENT_TYPE   If you are attempting to obtain data from a non semaph
                             ore.
A51 MACRO ASSEMBLER  OS_SEM                                                               08/08/2005 11:36:53 PAGE     9

                     414     ; *              OS_ERR_PEVENT_NULL  If 'pevent' is a NULL pointer.
                     415     ; *****************************************************************************************
                             ****************
                     416     ; */
                     417     ; 
                     418     ; #if OS_SEM_QUERY_EN > 0
                     419     ; INT8U  OSSemQuery (OS_EVENT *pevent, OS_SEM_DATA *ppdata)
                     420     ; {
                     421     ;    
                     422     ;     INT8U     *psrc;
                     423     ;     INT8U     *pdest;
                     424     ; 
                     425     ; 
                     426     ; #if OS_ARG_CHK_EN > 0
                     427     ;     if (pevent == (OS_EVENT *)0) {                         /* Validate 'pevent'          
                                           */
                     428     ;         return (OS_ERR_PEVENT_NULL);
                     429     ;     }
                     430     ;     if (pevent->OSEventType != OS_EVENT_TYPE_SEM) {        /* Validate event block type  
                                           */
                     431     ;         return (OS_ERR_EVENT_TYPE);
                     432     ;     }
                     433     ; #endif
                     434     ;     OS_ENTER_CRITICAL();
                     435     ;     ppdata->OSEventGrp = pevent->OSEventGrp;                /* Copy message mailbox wait 
                             list           */
                     436     ;     psrc              = &pevent->OSEventTbl[0];
                     437     ;     pdest             = &ppdata->OSEventTbl[0];
                     438     ; #if OS_EVENT_TBL_SIZE > 0
                     439     ;     *pdest++          = *psrc++;
                     440     ; #endif
                     441     ; 
                     442     ; #if OS_EVENT_TBL_SIZE > 1
                     443     ;     *pdest++          = *psrc++;
                     444     ; #endif
                     445     ; 
                     446     ; #if OS_EVENT_TBL_SIZE > 2
                     447     ;     *pdest++          = *psrc++;
                     448     ; #endif
                     449     ; 
                     450     ; #if OS_EVENT_TBL_SIZE > 3
                     451     ;     *pdest++          = *psrc++;
                     452     ; #endif
                     453     ; 
                     454     ; #if OS_EVENT_TBL_SIZE > 4
                     455     ;     *pdest++          = *psrc++;
                     456     ; #endif
                     457     ; 
                     458     ; #if OS_EVENT_TBL_SIZE > 5
                     459     ;     *pdest++          = *psrc++;
                     460     ; #endif
                     461     ; 
                     462     ; #if OS_EVENT_TBL_SIZE > 6
                     463     ;     *pdest++          = *psrc++;
                     464     ; #endif
                     465     ; 
                     466     ; #if OS_EVENT_TBL_SIZE > 7
                     467     ;     *pdest            = *psrc;
                     468     ; #endif
                     469     ;     ppdata->OSCnt      = pevent->OSEventCnt;                /* Get semaphore count       
                                            */
                     470     ;     OS_EXIT_CRITICAL();
                     471     ;     return (OS_NO_ERR);
                     472     ; }
                     473     ; #endif                                                     /* OS_SEM_QUERY_EN            
                                           */
A51 MACRO ASSEMBLER  OS_SEM                                                               08/08/2005 11:36:53 PAGE    10

                     474     ; #endif                                                     /* OS_SEM_EN                  
                                           */
                     475     ; *** sync lost ***
                     476     ; *** sync lost ***
                     477     ; *** sync lost ***
                     478             END
A51 MACRO ASSEMBLER  OS_SEM                                                               08/08/2005 11:36:53 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_SEM . . . . . .  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_SEM                                                               08/08/2005 11:36:53 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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -