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

📄 os_time.ls1

📁 uCOS-II_2.52在51上的移植程序
💻 LS1
📖 第 1 页 / 共 5 页
字号:
                     625     ; *****************************************************************************************
A51 MACRO ASSEMBLER  OS_TIME                                                              08/08/2005 11:36:58 PAGE    11

                             ****************
                     626     ; *                                         RESUME A DELAYED TASK
                     627     ; *
                     628     ; * Description: This function is used resume a task that has been delayed through a call t
                             o either
                     629     ; *              OSTimeDly() or OSTimeDlyHMSM().  Note that you MUST NOT call this function
                              to resume a
                     630     ; *              task that is waiting for an event with timeout.  This situation would make
                              the task look
                     631     ; *              like a timeout occurred (unless you desire this effect).  Also, you cannot
                              resume a task
                     632     ; *              that has called OSTimeDlyHMSM() with a combined time that exceeds 65535 cl
                             ock ticks.  In
                     633     ; *              other words, if the clock tick runs at 100 Hz then, you will not be able t
                             o resume a
                     634     ; *              delayed task that called OSTimeDlyHMSM(0, 10, 55, 350) or higher.
                     635     ; *
                     636     ; *                  (10 Minutes * 60 + 55 Seconds + 0.35) * 100 ticks/second.
                     637     ; *
                     638     ; * Arguments  : prio      specifies the priority of the task to resume
                     639     ; *
                     640     ; * Returns    : OS_NO_ERR                 Task has been resumed
                     641     ; *              OS_PRIO_INVALID           if the priority you specify is higher that the m
                             aximum allowed
                     642     ; *                                        (i.e. >= OS_LOWEST_PRIO)
                     643     ; *              OS_TIME_NOT_DLY           Task is not waiting for time to expire
                     644     ; *              OS_TASK_NOT_EXIST         The desired task has not been created
                     645     ; *****************************************************************************************
                             ****************
                     646     ; */
                     647     ; 
                     648     ; #if OS_TIME_DLY_RESUME_EN > 0
                     649     ; INT8U  OSTimeDlyResume (INT8U prio)
                     650     
----                 651             RSEG  ?PR?_OSTimeDlyResume?OS_TIME
0000                 652     _OSTimeDlyResume:
                     653             USING   0
                     654                             ; SOURCE LINE # 136
                     655     ;---- Variable 'prio?247' assigned to Register 'R7' ----
                     656     ; {
                     657                             ; SOURCE LINE # 137
                     658     ;    
                     659     ;     OS_TCB    *ptcb;
                     660     ; 
                     661     ; 
                     662     ;     if (prio >= OS_LOWEST_PRIO) {
                     663                             ; SOURCE LINE # 142
0000 EF              664             MOV     A,R7
0001 C3              665             CLR     C
0002 940C            666             SUBB    A,#0CH
0004 4003            667             JC      ?C0012
                     668     ;         return (OS_PRIO_INVALID);
                     669                             ; SOURCE LINE # 143
0006 7F2A            670             MOV     R7,#02AH
0008 22              671             RET     
                     672     ;     }
                     673                             ; SOURCE LINE # 144
0009                 674     ?C0012:
                     675     ;     OS_ENTER_CRITICAL();
                     676                             ; SOURCE LINE # 145
0009 C2AF            677             CLR     EA
                     678     ;     ptcb = (OS_TCB *)OSTCBPrioTbl[prio];                   /* Make sure that task exist  
                                           */
                     679                             ; SOURCE LINE # 146
000B EF              680             MOV     A,R7
000C 75F003          681             MOV     B,#03H
A51 MACRO ASSEMBLER  OS_TIME                                                              08/08/2005 11:36:58 PAGE    12

000F A4              682             MUL     AB
0010 2400     F      683             ADD     A,#LOW (OSTCBPrioTbl)
0012 F582            684             MOV     DPL,A
0014 E4              685             CLR     A
0015 3400     F      686             ADDC    A,#HIGH (OSTCBPrioTbl)
0017 F583            687             MOV     DPH,A
0019 E0              688             MOVX    A,@DPTR
001A F9              689             MOV     R1,A
001B A3              690             INC     DPTR
001C E0              691             MOVX    A,@DPTR
001D FA              692             MOV     R2,A
001E A3              693             INC     DPTR
001F E0              694             MOVX    A,@DPTR
0020 900000   F      695             MOV     DPTR,#ptcb?248
0023 C9              696             XCH     A,R1
0024 F0              697             MOVX    @DPTR,A
0025 A3              698             INC     DPTR
0026 EA              699             MOV     A,R2
0027 F0              700             MOVX    @DPTR,A
0028 A3              701             INC     DPTR
0029 E9              702             MOV     A,R1
002A F0              703             MOVX    @DPTR,A
                     704     ;     if (ptcb != (OS_TCB *)0) {
                     705                             ; SOURCE LINE # 147
002B 900000   F      706             MOV     DPTR,#ptcb?248
002E E0              707             MOVX    A,@DPTR
002F FB              708             MOV     R3,A
0030 A3              709             INC     DPTR
0031 E0              710             MOVX    A,@DPTR
0032 FA              711             MOV     R2,A
0033 A3              712             INC     DPTR
0034 E0              713             MOVX    A,@DPTR
0035 4A              714             ORL     A,R2
0036 4B              715             ORL     A,R3
0037 6074            716             JZ      ?C0014
                     717     ;         if (ptcb->OSTCBDly != 0) {                         /* See if task is delayed     
                                           */
                     718                             ; SOURCE LINE # 148
0039 900000   F      719             MOV     DPTR,#ptcb?248
003C A3              720             INC     DPTR
003D A3              721             INC     DPTR
003E E0              722             MOVX    A,@DPTR
003F F9              723             MOV     R1,A
0040 900009          724             MOV     DPTR,#09H
0043 120000   F      725             LCALL   ?C?ILDOPTR
0046 45F0            726             ORL     A,B
0048 605E            727             JZ      ?C0015
                     728     ;             ptcb->OSTCBDly  = 0;                           /* Clear the time delay       
                                           */
                     729                             ; SOURCE LINE # 149
004A 900009          730             MOV     DPTR,#09H
004D E4              731             CLR     A
004E F5F0            732             MOV     B,A
0050 120000   F      733             LCALL   ?C?ISTOPTR
                     734     ;             if ((ptcb->OSTCBStat & OS_STAT_SUSPEND) == OS_STAT_RDY) {  /* See if task is 
                             ready to run  */
                     735                             ; SOURCE LINE # 150
0053 90000B          736             MOV     DPTR,#0BH
0056 120000   F      737             LCALL   ?C?CLDOPTR
0059 20E347          738             JB      ACC.3,?C0016
                     739     ;                 OSRdyGrp               |= ptcb->OSTCBBitY;             /* Make task ready
                              to run       */
                     740                             ; SOURCE LINE # 151
005C 900000   F      741             MOV     DPTR,#OSRdyGrp
005F E0              742             MOVX    A,@DPTR
0060 FF              743             MOV     R7,A
A51 MACRO ASSEMBLER  OS_TIME                                                              08/08/2005 11:36:58 PAGE    13

0061 900000   F      744             MOV     DPTR,#ptcb?248
0064 E0              745             MOVX    A,@DPTR
0065 FB              746             MOV     R3,A
0066 A3              747             INC     DPTR
0067 E0              748             MOVX    A,@DPTR
0068 FA              749             MOV     R2,A
0069 A3              750             INC     DPTR
006A E0              751             MOVX    A,@DPTR
006B F9              752             MOV     R1,A
006C 900010          753             MOV     DPTR,#010H
006F 120000   F      754             LCALL   ?C?CLDOPTR
0072 FE              755             MOV     R6,A
0073 EF              756             MOV     A,R7
0074 4E              757             ORL     A,R6
0075 900000   F      758             MOV     DPTR,#OSRdyGrp
0078 F0              759             MOVX    @DPTR,A
                     760     ;                 OSRdyTbl[ptcb->OSTCBY] |= ptcb->OSTCBBitX;
                     761                             ; SOURCE LINE # 152
0079 90000E          762             MOV     DPTR,#0EH
007C 120000   F      763             LCALL   ?C?CLDOPTR
007F 2400     F      764             ADD     A,#LOW (OSRdyTbl)
0081 F582            765             MOV     DPL,A
0083 E4              766             CLR     A
0084 3400     F      767             ADDC    A,#HIGH (OSRdyTbl)
0086 F583            768             MOV     DPH,A
0088 C083            769             PUSH    DPH
008A C082            770             PUSH    DPL
008C E0              771             MOVX    A,@DPTR
008D FF              772             MOV     R7,A
008E 90000F          773             MOV     DPTR,#0FH
0091 120000   F      774             LCALL   ?C?CLDOPTR
0094 FE              775             MOV     R6,A
0095 EF              776             MOV     A,R7
0096 4E              777             ORL     A,R6
0097 D082            778             POP     DPL
0099 D083            779             POP     DPH
009B F0              780             MOVX    @DPTR,A
                     781     ;                 OS_EXIT_CRITICAL();
                     782                             ; SOURCE LINE # 153
009C D2AF            783             SETB    EA
                     784     ;                 OS_Sched();                                /* See if this is new highest 
                             priority      */
                     785                             ; SOURCE LINE # 154
009E 120000   F      786             LCALL   OS_Sched
                     787     ;             } else {
                     788                             ; SOURCE LINE # 155
00A1 8002            789             SJMP    ?C0017
00A3                 790     ?C0016:
                     791     ;                 OS_EXIT_CRITICAL();                        /* Task may be suspended      
                                           */
                     792                             ; SOURCE LINE # 156
00A3 D2AF            793             SETB    EA
                     794     ;             }
                     795                             ; SOURCE LINE # 157
00A5                 796     ?C0017:
                     797     ;             return (OS_NO_ERR);
                     798                             ; SOURCE LINE # 158
00A5 7F00            799             MOV     R7,#00H
00A7 22              800             RET     
                     801     ;         } else {
                     802                             ; SOURCE LINE # 159
00A8                 803     ?C0015:
                     804     ;             OS_EXIT_CRITICAL();
                     805                             ; SOURCE LINE # 160
00A8 D2AF            806             SETB    EA
                     807     ;             return (OS_TIME_NOT_DLY);                      /* Indicate that task was not 
A51 MACRO ASSEMBLER  OS_TIME                                                              08/08/2005 11:36:58 PAGE    14

                             delayed       */
                     808                             ; SOURCE LINE # 161
00AA 7F50            809             MOV     R7,#050H
00AC 22              810             RET     
                     811     ;         }
                     812                             ; SOURCE LINE # 162
                     813     ;     }
                     814                             ; SOURCE LINE # 163
00AD                 815     ?C0014:
                     816     ;     OS_EXIT_CRITICAL();
                     817                             ; SOURCE LINE # 164
00AD D2AF            818             SETB    EA
                     819     ;     return (OS_TASK_NOT_EXIST);                            /* The task does not exist    
                                           */
                     820                             ; SOURCE LINE # 165
00AF 7F0B            821             MOV     R7,#0BH
                     822     ; }
                     823                             ; SOURCE LINE # 166
00B1                 824     ?C0013:

⌨️ 快捷键说明

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