os_time.ls1

来自「在51单片机上移植成功的UCOS-II操作系统源代码,包括源代码及相关注释」· LS1 代码 · 共 1,130 行 · 第 1/5 页

LS1
1,130
字号
                     625     ; /*$PAGE*/
A51 MACRO ASSEMBLER  OS_TIME                                                              09/09/2007 21:13:22 PAGE    11

                     626     ; /*
                     627     ; *****************************************************************************************
                             ****************
                     628     ; *                                         RESUME A DELAYED TASK
                     629     ; *
                     630     ; * Description: This function is used resume a task that has been delayed through a call t
                             o either
                     631     ; *              OSTimeDly() or OSTimeDlyHMSM().  Note that you MUST NOT call this function
                              to resume a 
                     632     ; *              task that is waiting for an event with timeout.  This situation would make
                              the task look 
                     633     ; *              like a timeout occurred (unless you desire this effect).  Also, you cannot
                              resume a task 
                     634     ; *              that has called OSTimeDlyHMSM() with a combined time that exceeds 65535 cl
                             ock ticks.  In 
                     635     ; *              other words, if the clock tick runs at 100 Hz then, you will not be able t
                             o resume a 
                     636     ; *              delayed task that called OSTimeDlyHMSM(0, 10, 55, 350) or higher.  
                     637     ; *
                     638     ; *                  (10 Minutes * 60 + 55 Seconds + 0.35) * 100 ticks/second.
                     639     ; *
                     640     ; * Arguments  : prio      specifies the priority of the task to resume
                     641     ; *
                     642     ; * Returns    : OS_NO_ERR                 Task has been resumed
                     643     ; *              OS_PRIO_INVALID           if the priority you specify is higher that the m
                             aximum allowed 
                     644     ; *                                        (i.e. >= OS_LOWEST_PRIO)
                     645     ; *              OS_TIME_NOT_DLY           Task is not waiting for time to expire
                     646     ; *              OS_TASK_NOT_EXIST         The desired task has not been created
                     647     ; *****************************************************************************************
                             ****************
                     648     ; */
                     649     ; 
                     650     ; INT8U OSTimeDlyResume (INT8U prio) reentrant
                     651     
----                 652             RSEG  ?PR?_?OSTimeDlyResume?OS_TIME
0000                 653     _?OSTimeDlyResume:
                     654             USING   0
                     655                             ; SOURCE LINE # 133
0000 90FFFF          656             MOV     DPTR,#0FFFFH
0003 120000   F      657             LCALL   ?C?ADDXBP
0006 EF              658             MOV     A,R7
0007 F0              659             MOVX    @DPTR,A
0008 90FFFD          660             MOV     DPTR,#0FFFDH
000B 120000   F      661             LCALL   ?C?ADDXBP
                     662     ; {
                     663     ;     OS_TCB *ptcb;
                     664     ; 
                     665     ; 
                     666     ;     if (prio >= OS_LOWEST_PRIO) {
                     667                             ; SOURCE LINE # 138
000E 900003          668             MOV     DPTR,#03H
0011 120000   F      669             LCALL   ?C?XBPOFF
0014 E0              670             MOVX    A,@DPTR
0015 FE              671             MOV     R6,A
0016 C3              672             CLR     C
0017 941C            673             SUBB    A,#01CH
0019 4005            674             JC      ?C0013
                     675     ;         return (OS_PRIO_INVALID);
                     676                             ; SOURCE LINE # 139
001B 7F2A            677             MOV     R7,#02AH
001D 020000   F      678             LJMP    ?C0014
                     679     ;     }
                     680                             ; SOURCE LINE # 140
0020                 681     ?C0013:
                     682     ;     OS_ENTER_CRITICAL();
A51 MACRO ASSEMBLER  OS_TIME                                                              09/09/2007 21:13:22 PAGE    12

                     683                             ; SOURCE LINE # 141
0020 C2AF            684             CLR     EA
                     685     ;     ptcb = (OS_TCB *)OSTCBPrioTbl[prio];                   /* Make sure that task exist  
                                           */
                     686                             ; SOURCE LINE # 142
0022 EE              687             MOV     A,R6
0023 75F003          688             MOV     B,#03H
0026 A4              689             MUL     AB
0027 2400     F      690             ADD     A,#LOW (OSTCBPrioTbl)
0029 F582            691             MOV     DPL,A
002B E4              692             CLR     A
002C 3400     F      693             ADDC    A,#HIGH (OSTCBPrioTbl)
002E F583            694             MOV     DPH,A
0030 E0              695             MOVX    A,@DPTR
0031 F9              696             MOV     R1,A
0032 A3              697             INC     DPTR
0033 E0              698             MOVX    A,@DPTR
0034 FA              699             MOV     R2,A
0035 A3              700             INC     DPTR
0036 E0              701             MOVX    A,@DPTR
0037 850083   F      702             MOV     DPH,?C_XBP
003A 850082   F      703             MOV     DPL,?C_XBP+01H
003D C9              704             XCH     A,R1
003E F0              705             MOVX    @DPTR,A
003F A3              706             INC     DPTR
0040 EA              707             MOV     A,R2
0041 F0              708             MOVX    @DPTR,A
0042 A3              709             INC     DPTR
0043 E9              710             MOV     A,R1
0044 F0              711             MOVX    @DPTR,A
                     712     ;     if (ptcb != (OS_TCB *)0) {
                     713                             ; SOURCE LINE # 143
0045 850083   F      714             MOV     DPH,?C_XBP
0048 850082   F      715             MOV     DPL,?C_XBP+01H
004B E0              716             MOVX    A,@DPTR
004C FB              717             MOV     R3,A
004D A3              718             INC     DPTR
004E E0              719             MOVX    A,@DPTR
004F FA              720             MOV     R2,A
0050 A3              721             INC     DPTR
0051 E0              722             MOVX    A,@DPTR
0052 4A              723             ORL     A,R2
0053 4B              724             ORL     A,R3
0054 7003            725             JNZ     $ + 5H
0056 020000   F      726             LJMP    ?C0015
                     727     ;         if (ptcb->OSTCBDly != 0) {                         /* See if task is delayed     
                                           */
                     728                             ; SOURCE LINE # 144
0059 850083   F      729             MOV     DPH,?C_XBP
005C 850082   F      730             MOV     DPL,?C_XBP+01H
005F E0              731             MOVX    A,@DPTR
0060 FB              732             MOV     R3,A
0061 A3              733             INC     DPTR
0062 E0              734             MOVX    A,@DPTR
0063 FA              735             MOV     R2,A
0064 A3              736             INC     DPTR
0065 E0              737             MOVX    A,@DPTR
0066 F9              738             MOV     R1,A
0067 900009          739             MOV     DPTR,#09H
006A 120000   F      740             LCALL   ?C?ILDOPTR
006D 45F0            741             ORL     A,B
006F 6070            742             JZ      ?C0016
                     743     ;             ptcb->OSTCBDly  = 0;                           /* Clear the time delay       
                                           */
                     744                             ; SOURCE LINE # 145
0071 900009          745             MOV     DPTR,#09H
A51 MACRO ASSEMBLER  OS_TIME                                                              09/09/2007 21:13:22 PAGE    13

0074 E4              746             CLR     A
0075 F5F0            747             MOV     B,A
0077 120000   F      748             LCALL   ?C?ISTOPTR
                     749     ;             if (!(ptcb->OSTCBStat & OS_STAT_SUSPEND)) {    /* See if task is ready to run
                                           */
                     750                             ; SOURCE LINE # 146
007A 90000B          751             MOV     DPTR,#0BH
007D 120000   F      752             LCALL   ?C?CLDOPTR
0080 20E358          753             JB      ACC.3,?C0017
                     754     ;                 OSRdyGrp               |= ptcb->OSTCBBitY; /* Make task ready to run     
                                           */
                     755                             ; SOURCE LINE # 147
0083 900000   F      756             MOV     DPTR,#OSRdyGrp
0086 E0              757             MOVX    A,@DPTR
0087 FF              758             MOV     R7,A
0088 850083   F      759             MOV     DPH,?C_XBP
008B 850082   F      760             MOV     DPL,?C_XBP+01H
008E E0              761             MOVX    A,@DPTR
008F FB              762             MOV     R3,A
0090 A3              763             INC     DPTR
0091 E0              764             MOVX    A,@DPTR
0092 FA              765             MOV     R2,A
0093 A3              766             INC     DPTR
0094 E0              767             MOVX    A,@DPTR
0095 F9              768             MOV     R1,A
0096 900010          769             MOV     DPTR,#010H
0099 120000   F      770             LCALL   ?C?CLDOPTR
009C FE              771             MOV     R6,A
009D EF              772             MOV     A,R7
009E 4E              773             ORL     A,R6
009F 900000   F      774             MOV     DPTR,#OSRdyGrp
00A2 F0              775             MOVX    @DPTR,A
                     776     ;                 OSRdyTbl[ptcb->OSTCBY] |= ptcb->OSTCBBitX;
                     777                             ; SOURCE LINE # 148
00A3 90000E          778             MOV     DPTR,#0EH
00A6 120000   F      779             LCALL   ?C?CLDOPTR
00A9 2400     F      780             ADD     A,#LOW (OSRdyTbl)
00AB F582            781             MOV     DPL,A
00AD E4              782             CLR     A
00AE 3400     F      783             ADDC    A,#HIGH (OSRdyTbl)
00B0 F583            784             MOV     DPH,A
00B2 C083            785             PUSH    DPH
00B4 C082            786             PUSH    DPL
00B6 E0              787             MOVX    A,@DPTR
00B7 FF              788             MOV     R7,A
00B8 850083   F      789             MOV     DPH,?C_XBP
00BB 850082   F      790             MOV     DPL,?C_XBP+01H
00BE E0              791             MOVX    A,@DPTR
00BF FB              792             MOV     R3,A
00C0 A3              793             INC     DPTR
00C1 E0              794             MOVX    A,@DPTR
00C2 FA              795             MOV     R2,A
00C3 A3              796             INC     DPTR
00C4 E0              797             MOVX    A,@DPTR
00C5 F9              798             MOV     R1,A
00C6 90000F          799             MOV     DPTR,#0FH
00C9 120000   F      800             LCALL   ?C?CLDOPTR
00CC FE              801             MOV     R6,A
00CD EF              802             MOV     A,R7
00CE 4E              803             ORL     A,R6
00CF D082            804             POP     DPL
00D1 D083            805             POP     DPH
00D3 F0              806             MOVX    @DPTR,A
                     807     ;                 OS_EXIT_CRITICAL();
                     808                             ; SOURCE LINE # 149
00D4 D2AF            809             SETB    EA
A51 MACRO ASSEMBLER  OS_TIME                                                              09/09/2007 21:13:22 PAGE    14

                     810     ;                 OSSched();                                 /* See if this is new highest 
                             priority      */
                     811                             ; SOURCE LINE # 150
00D6 120000   F      812             LCALL   _?OSSched
                     813     ;             } else {
                     814                             ; SOURCE LINE # 151
00D9 8002            815             SJMP    ?C0018
00DB                 816     ?C0017:
                     817     ;                 OS_EXIT_CRITICAL();                        /* Task may be suspended      
                                           */
                     818                             ; SOURCE LINE # 152
00DB D2AF            819             SETB    EA
                     820     ;             }
                     821                             ; SOURCE LINE # 153
00DD                 822     ?C0018:
                     823     ;             return (OS_NO_ERR);
                     824                             ; SOURCE LINE # 154
00DD 7F00            825             MOV     R7,#00H
00DF 800A            826             SJMP    ?C0014

⌨️ 快捷键说明

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