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

📄 os_time.lis

📁 ucos如何移植到单片机mega128
💻 LIS
字号:
                        .module OS_TIME.C
                        .area text(rom, con, rel)
 0000                   .dbfile E:\study\ucos_ii\ucos2_iccavr\iccavr\ucos2_without_cpu\OS_TIME.C
 0000                   .dbfunc e OSTimeDly _OSTimeDly fV
 0000           ;          ticks -> R20,R21
                        .even
 0000           _OSTimeDly::
 0000 0E940000          xcall push_gset1
 0004 A801              movw R20,R16
 0006                   .dbline -1
 0006                   .dbline 36
 0006           ; /*
 0006           ; *********************************************************************************************************
 0006           ; *                                                uC/OS-II
 0006           ; *                                          The Real-Time Kernel
 0006           ; *                                             TIME MANAGEMENT
 0006           ; *
 0006           ; *                          (c) Copyright 1992-2002, Jean J. Labrosse, Weston, FL
 0006           ; *                                           All Rights Reserved
 0006           ; *
 0006           ; * File : OS_TIME.C
 0006           ; * By   : Jean J. Labrosse
 0006           ; *********************************************************************************************************
 0006           ; */
 0006           ; 
 0006           ; #ifndef  OS_MASTER_FILE
 0006           ; #include "..\ucos2_application\includes.h"
 0006           ; #endif
 0006           ; 
 0006           ; /*
 0006           ; *********************************************************************************************************
 0006           ; *                                DELAY TASK 'n' TICKS   (n from 0 to 65535)
 0006           ; *
 0006           ; * Description: This function is called to delay execution of the currently running task until the
 0006           ; *              specified number of system ticks expires.  This, of course, directly equates to delaying
 0006           ; *              the current task for some time to expire.  No delay will result If the specified delay is
 0006           ; *              0.  If the specified delay is greater than 0 then, a context switch will result.
 0006           ; *
 0006           ; * Arguments  : ticks     is the time delay that the task will be suspended in number of clock 'ticks'.
 0006           ; *                        Note that by specifying 0, the task will not be delayed.
 0006           ; *
 0006           ; * Returns    : none
 0006           ; *********************************************************************************************************
 0006           ; */
 0006           ; 
 0006           ; void  OSTimeDly (INT16U ticks)
 0006           ; {
 0006                   .dbline 42
 0006           ; #if OS_CRITICAL_METHOD == 3                      /* Allocate storage for CPU status register           */
 0006           ;     OS_CPU_SR  cpu_sr;
 0006           ; #endif    
 0006           ; 
 0006           ; 
 0006           ;     if (ticks > 0) {                                                      /* 0 means no delay!         */
 0006 4030              cpi R20,0
 0008 4507              cpc R20,R21
 000A 09F4              brne X1
 000C 33C0              xjmp L4
 000E           X1:
 000E           X0:
 000E                   .dbline 42
 000E                   .dbline 43
 000E           ;         OS_ENTER_CRITICAL();
 000E 0A93              st -y,r16
 0010 0FB7              in r16,0x3F
 0012 F894              cli
 0014 0F93              push r16
 0016 0991              ld r16,y+
 0018                   .dbline 43
 0018                   .dbline 44
 0018           ;         if ((OSRdyTbl[OSTCBCur->OSTCBY] &= ~OSTCBCur->OSTCBBitX) == 0) {  /* Delay current task        */
 0018 80E0              ldi R24,<_OSRdyTbl
 001A 90E0              ldi R25,>_OSRdyTbl
 001C E0910000          lds R30,_OSTCBCur
 0020 F0910100          lds R31,_OSTCBCur+1
 0024 2684              ldd R2,z+14
 0026 3324              clr R3
 0028 280E              add R2,R24
 002A 391E              adc R3,R25
 002C E0910000          lds R30,_OSTCBCur
 0030 F0910100          lds R31,_OSTCBCur+1
 0034 4784              ldd R4,z+15
 0036 4094              com R4
 0038 F101              movw R30,R2
 003A 5080              ldd R5,z+0
 003C 5420              and R5,R4
 003E 452C              mov R4,R5
 0040 4082              std z+0,R4
 0042 5520              tst R5
 0044 59F4              brne L6
 0046                   .dbline 44
 0046                   .dbline 45
 0046           ;             OSRdyGrp &= ~OSTCBCur->OSTCBBitY;
 0046 E0910000          lds R30,_OSTCBCur
 004A F0910100          lds R31,_OSTCBCur+1
 004E 2088              ldd R2,z+16
 0050 2094              com R2
 0052 30900000          lds R3,_OSRdyGrp
 0056 3220              and R3,R2
 0058 30920000          sts _OSRdyGrp,R3
 005C                   .dbline 46
 005C           ;         }
 005C           L6:
 005C                   .dbline 47
 005C E0910000          lds R30,_OSTCBCur
 0060 F0910100          lds R31,_OSTCBCur+1
 0064 5287              std z+10,R21
 0066 4187              std z+9,R20
 0068                   .dbline 48
 0068 0A93              st -y,r16
 006A 0F91              pop r16
 006C 0FBF              out 0x3F,r16
 006E 0991              ld r16,y+
 0070                   .dbline 48
 0070                   .dbline 49
 0070 0E940000          xcall _OS_Sched
 0074                   .dbline 50
 0074           L4:
 0074                   .dbline -2
 0074           L3:
 0074 0E940000          xcall pop_gset1
 0078                   .dbline 0 ; func end
 0078 0895              ret
 007A                   .dbsym r ticks 20 i
 007A                   .dbend

⌨️ 快捷键说明

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