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

📄 os_sem.ls1

📁 AT89C55WD上移植的ucos-ii, 非常有用, 串口观看输出与调试。
💻 LS1
📖 第 1 页 / 共 5 页
字号:
                     718     ; /*$PAGE*/
                     719     ; /*
                     720     ; *****************************************************************************************
                             ****************
                     721     ; *                                         POST TO A SEMAPHORE
                     722     ; *
                     723     ; * Description: This function signals a semaphore
                     724     ; *
                     725     ; * Arguments  : pevent        is a pointer to the event control block associated with the 
                             desired
                     726     ; *                            semaphore.
                     727     ; *
                     728     ; * Returns    : OS_NO_ERR           The call was successful and the semaphore was signaled
                             .
                     729     ; *              OS_SEM_OVF          If the semaphore count exceeded its limit.  In other w
                             ords, you have
                     730     ; *                                  signalled the semaphore more often than you waited on 
                             it with either
                     731     ; *                                  OSSemAccept() or OSSemPend().
                     732     ; *              OS_ERR_EVENT_TYPE   If you didn't pass a pointer to a semaphore
                     733     ; *              OS_ERR_PEVENT_NULL  If 'pevent' is a NULL pointer.
                     734     ; *****************************************************************************************
                             ****************
                     735     ; */
                     736     ; 
                     737     ; INT8U  OSSemPost (OS_EVENT *pevent)LG_REENTRANT
                     738     
----                 739             RSEG  ?PR?_?OSSemPost?OS_SEM
0000                 740     _?OSSemPost:
                     741             USING   0
                     742                             ; SOURCE LINE # 308
0000 90FFFD          743             MOV     DPTR,#0FFFDH
0003 120000   F      744             LCALL   ?C?ADDXBP
0006 120000   F      745             LCALL   ?C?PSTXDATA
                     746     ; {
                     747     ; #if OS_CRITICAL_METHOD == 3                                /* Allocate storage for CPU st
                             atus register */
                     748     ;     OS_CPU_SR  cpu_sr;                               
                     749     ; #endif    
A51 MACRO ASSEMBLER  OS_SEM                                                               05/17/2005 11:19:57 PAGE    14

                     750     ; 
                     751     ; 
                     752     ; #if OS_ARG_CHK_EN > 0
                     753     ;     if (pevent == (OS_EVENT *)0) {                         /* Validate 'pevent'          
                                           */
                     754                             ; SOURCE LINE # 316
0009 850083   F      755             MOV     DPH,?C_XBP
000C 850082   F      756             MOV     DPL,?C_XBP+01H
000F 120000   F      757             LCALL   ?C?PLDXDATA
0012 E9              758             MOV     A,R1
0013 4A              759             ORL     A,R2
0014 4B              760             ORL     A,R3
0015 7004            761             JNZ     ?C0011
                     762     ;         return (OS_ERR_PEVENT_NULL);
                     763                             ; SOURCE LINE # 317
0017 7F04            764             MOV     R7,#04H
0019 8077            765             SJMP    ?C0012
                     766     ;     }
                     767                             ; SOURCE LINE # 318
001B                 768     ?C0011:
                     769     ;     if (pevent->OSEventType != OS_EVENT_TYPE_SEM) {        /* Validate event block type  
                                           */
                     770                             ; SOURCE LINE # 319
001B 850083   F      771             MOV     DPH,?C_XBP
001E 850082   F      772             MOV     DPL,?C_XBP+01H
0021 120000   F      773             LCALL   ?C?PLDXDATA
0024 120000   F      774             LCALL   ?C?CLDPTR
0027 6403            775             XRL     A,#03H
0029 6004            776             JZ      ?C0013
                     777     ;         return (OS_ERR_EVENT_TYPE);
                     778                             ; SOURCE LINE # 320
002B 7F01            779             MOV     R7,#01H
002D 8063            780             SJMP    ?C0012
                     781     ;     }
                     782                             ; SOURCE LINE # 321
002F                 783     ?C0013:
                     784     ; #endif
                     785     ;     OS_ENTER_CRITICAL();
                     786                             ; SOURCE LINE # 323
002F C2AF            787             CLR     EA
                     788     ;     if (pevent->OSEventGrp != 0x00) {                      /* See if any task waiting for
                              semaphore    */
                     789                             ; SOURCE LINE # 324
0031 900001          790             MOV     DPTR,#01H
0034 120000   F      791             LCALL   ?C?CLDOPTR
0037 602D            792             JZ      ?C0014
                     793     ;         OS_EventTaskRdy(pevent, (void *)0, OS_STAT_SEM);   /* Ready highest prio task wai
                             ting on event */
                     794                             ; SOURCE LINE # 325
0039 90FFFF          795             MOV     DPTR,#0FFFFH
003C 120000   F      796             LCALL   ?C?ADDXBP
003F 7401            797             MOV     A,#01H
0041 F0              798             MOVX    @DPTR,A
0042 7B00            799             MOV     R3,#00H
0044 7A00            800             MOV     R2,#00H
0046 7900            801             MOV     R1,#00H
0048 90FFFD          802             MOV     DPTR,#0FFFDH
004B 120000   F      803             LCALL   ?C?ADDXBP
004E 120000   F      804             LCALL   ?C?PSTXDATA
0051 900004          805             MOV     DPTR,#04H
0054 120000   F      806             LCALL   ?C?XBPOFF
0057 120000   F      807             LCALL   ?C?PLDXDATA
005A 120000   F      808             LCALL   _?OS_EventTaskRdy
                     809     ;         OS_EXIT_CRITICAL();
                     810                             ; SOURCE LINE # 326
005D D2AF            811             SETB    EA
A51 MACRO ASSEMBLER  OS_SEM                                                               05/17/2005 11:19:57 PAGE    15

                     812     ;         OS_Sched();                                        /* Find highest priority task 
                             ready to run  */
                     813                             ; SOURCE LINE # 327
005F 120000   F      814             LCALL   _?OS_Sched
                     815     ;         return (OS_NO_ERR);
                     816                             ; SOURCE LINE # 328
0062 7F00            817             MOV     R7,#00H
0064 802C            818             SJMP    ?C0012
                     819     ;     }
                     820                             ; SOURCE LINE # 329
0066                 821     ?C0014:
                     822     ;     if (pevent->OSEventCnt < 65535) {                 /* Make sure semaphore will not ove
                             rflow         */
                     823                             ; SOURCE LINE # 330
0066 850083   F      824             MOV     DPH,?C_XBP
0069 850082   F      825             MOV     DPL,?C_XBP+01H
006C 120000   F      826             LCALL   ?C?PLDXDATA
006F 900002          827             MOV     DPTR,#02H
0072 120000   F      828             LCALL   ?C?ILDOPTR
0075 C3              829             CLR     C
0076 94FF            830             SUBB    A,#0FFH
0078 E5F0            831             MOV     A,B
007A 94FF            832             SUBB    A,#0FFH
007C 5010            833             JNC     ?C0015
                     834     ;         pevent->OSEventCnt++;                         /* Increment semaphore count to reg
                             ister event   */
                     835                             ; SOURCE LINE # 331
007E 900002          836             MOV     DPTR,#02H
0081 E4              837             CLR     A
0082 75F001          838             MOV     B,#01H
0085 120000   F      839             LCALL   ?C?IILDOPTR
                     840     ;         OS_EXIT_CRITICAL();
                     841                             ; SOURCE LINE # 332
0088 D2AF            842             SETB    EA
                     843     ;         return (OS_NO_ERR);
                     844                             ; SOURCE LINE # 333
008A 7F00            845             MOV     R7,#00H
008C 8004            846             SJMP    ?C0012
                     847     ;     }
                     848                             ; SOURCE LINE # 334
008E                 849     ?C0015:
                     850     ;     OS_EXIT_CRITICAL();                               /* Semaphore value has reached its 
                             maximum       */
                     851                             ; SOURCE LINE # 335
008E D2AF            852             SETB    EA
                     853     ;     return (OS_SEM_OVF);
                     854                             ; SOURCE LINE # 336
0090 7F32            855             MOV     R7,#032H
                     856     ; }
                     857                             ; SOURCE LINE # 337
0092                 858     ?C0012:
0092 900003          859             MOV     DPTR,#03H
0095 020000   F      860             LJMP    ?C?ADDXBP
                     861     ; END OF _?OSSemPost
                     862     
                     863             END
A51 MACRO ASSEMBLER  OS_SEM                                                               05/17/2005 11:19:57 PAGE    16

SYMBOL TABLE LISTING
------ ----- -------


N A M E                   T Y P E  V A L U E   ATTRIBUTES

?C0001 . . . . . . . . .  C ADDR   0023H   R   SEG=?PR?_?OSSEMCREATE?OS_SEM
?C0002 . . . . . . . . .  C ADDR   00BCH   R   SEG=?PR?_?OSSEMCREATE?OS_SEM
?C0003 . . . . . . . . .  C ADDR   0051H   R   SEG=?PR?_?OSSEMCREATE?OS_SEM
?C0004 . . . . . . . . .  C ADDR   00B3H   R   SEG=?PR?_?OSSEMCREATE?OS_SEM
?C0005 . . . . . . . . .  C ADDR   002BH   R   SEG=?PR?_?OSSEMPEND?OS_SEM
?C0006 . . . . . . . . .  C ADDR   012BH   R   SEG=?PR?_?OSSEMPEND?OS_SEM
?C0007 . . . . . . . . .  C ADDR   0047H   R   SEG=?PR?_?OSSEMPEND?OS_SEM
?C0008 . . . . . . . . .  C ADDR   0065H   R   SEG=?PR?_?OSSEMPEND?OS_SEM
?C0009 . . . . . . . . .  C ADDR   0098H   R   SEG=?PR?_?OSSEMPEND?OS_SEM
?C0010 . . . . . . . . .  C ADDR   0104H   R   SEG=?PR?_?OSSEMPEND?OS_SEM
?C0011 . . . . . . . . .  C ADDR   001BH   R   SEG=?PR?_?OSSEMPOST?OS_SEM
?C0012 . . . . . . . . .  C ADDR   0092H   R   SEG=?PR?_?OSSEMPOST?OS_SEM
?C0013 . . . . . . . . .  C ADDR   002FH   R   SEG=?PR?_?OSSEMPOST?OS_SEM
?C0014 . . . . . . . . .  C ADDR   0066H   R   SEG=?PR?_?OSSEMPOST?OS_SEM
?C0015 . . . . . . . . .  C ADDR   008EH   R   SEG=?PR?_?OSSEMPOST?OS_SEM
?C0020 . . . . . . . . .  C ADDR   0044H   R   SEG=?PR?_?OSSEMPEND?OS_SEM
?C0021 . . . . . . . . .  C ADDR   0062H   R   SEG=?PR?_?OSSEMPEND?OS_SEM
?C0022 . . . . . . . . .  C ADDR   0095H   R   SEG=?PR?_?OSSEMPEND?OS_SEM
?C0023 . . . . . . . . .  C ADDR   0102H   R   SEG=?PR?_?OSSEMPEND?OS_SEM
?C0024 . . . . . . . . .  C ADDR   0128H   R   SEG=?PR?_?OSSEMPEND?OS_SEM
?C?ADDXBP. . . . . . . .  C ADDR   -----       EXT
?C?CLDOPTR . . . . . . .  C ADDR   -----       EXT
?C?CLDPTR. . . . . . . .  C ADDR   -----       EXT
?C?CSTPTR. . . . . . . .  C ADDR   -----       EXT
?C?IILDOPTR. . . . . . .  C ADDR   -----       EXT
?C?ILDOPTR . . . . . . .  C ADDR   -----       EXT
?C?ISTOPTR . . . . . . .  C ADDR   -----       EXT
?C?PLDOPTR . . . . . . .  C ADDR   -----       EXT
?C?PLDXDATA. . . . . . .  C ADDR   -----       EXT
?C?PSTOPTR . . . . . . .  C ADDR   -----       EXT
?C?PSTXDATA. . . . . . .  C ADDR   -----       EXT
?C?XBPOFF. . . . . . . .  C ADDR   -----       EXT
?C_XBP . . . . . . . . .  D ADDR   -----       EXT
?PR?_?OSSEMCREATE?OS_SEM  C SEG    00C2H       REL=UNIT
?PR?_?OSSEMPEND?OS_SEM .  C SEG    0131H       REL=UNIT
?PR?_?OSSEMPOST?OS_SEM .  C SEG    0098H       REL=UNIT
AC . . . . 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -