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

📄 os_time.lis

📁 使用mega8和iccavr编译器的一段ucos操作系统程序
💻 LIS
字号:
                        .module OS_TIME.C
                        .area text(rom, con, rel)
 0000                   .dbfile G:\IccPro\ucos_m8_icc\source\OS_TIME.C
 0000                   .dbfunc e OSTimeDly _OSTimeDly fV
 0000           ;          ticks -> R10,R11
                        .even
 0000           _OSTimeDly::
 0000 00D0              rcall push_gset3x
 0002 5801              movw R10,R16
 0004                   .dbline -1
 0004                   .dbline 23
 0004           ; 
 0004           ; #ifndef  OS_MASTER_FILE
 0004           ; #include "includes.h"
 0004           ; #endif
 0004           ; 
 0004           ; /*
 0004           ; *********************************************************************************************************
 0004           ; *                                DELAY TASK 'n' TICKS   (n from 0 to 65535)
 0004           ; *
 0004           ; * Description: This function is called to delay execution of the currently running task until the 
 0004           ; *              specified number of system ticks expires.  This, of course, directly equates to delaying
 0004           ; *              the current task for some time to expire.  No delay will result If the specified delay is 
 0004           ; *              0.  If the specified delay is greater than 0 then, a context switch will result.
 0004           ; *
 0004           ; * Arguments  : ticks     is the time delay that the task will be suspended in number of clock 'ticks'.  
 0004           ; *                        Note that by specifying 0, the task will not be delayed.
 0004           ; *
 0004           ; * Returns    : none
 0004           ; *********************************************************************************************************
 0004           ; */
 0004           ; 
 0004           ; void OSTimeDly (INT16U ticks)
 0004           ; {
 0004                   .dbline 24
 0004           ;     if (ticks > 0) {                                                      /* 0 means no delay!         */
 0004 AA20              tst R10
 0006 19F4              brne X0
 0008 BB20              tst R11
 000A 09F4              brne X1
 000C 32C0              rjmp L3
 000E           X1:
 000E           X0:
 000E                   .dbline 24
 000E                   .dbline 25
 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 25
 0018                   .dbline 26
 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 2384              ldd R2,z+11
 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 4484              ldd R4,z+12
 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 L5
 0046                   .dbline 26
 0046                   .dbline 27
 0046           ;             OSRdyGrp &= ~OSTCBCur->OSTCBBitY;
 0046 E0910000          lds R30,_OSTCBCur
 004A F0910100          lds R31,_OSTCBCur+1
 004E 2584              ldd R2,z+13
 0050 2094              com R2
 0052 30900000          lds R3,_OSRdyGrp
 0056 3220              and R3,R2
 0058 30920000          sts _OSRdyGrp,R3
 005C                   .dbline 28
 005C           ;         }
 005C           L5:
 005C                   .dbline 29
 005C E0910000          lds R30,_OSTCBCur
 0060 F0910100          lds R31,_OSTCBCur+1
 0064 B782              std z+7,R11
 0066 A682              std z+6,R10
 0068                   .dbline 30
 0068 0A93              st -y,r16
 006A 0F91              pop r16
 006C 0FBF              out 0x3F,r16
 006E 0991              ld r16,y+
 0070                   .dbline 30
 0070                   .dbline 31
 0070 00D0              rcall _OSSched
 0072                   .dbline 32
 0072           L3:
 0072                   .dbline -2
 0072           L2:
 0072 00D0              rcall pop_gset3x
 0074                   .dbline 0 ; func end
 0074 0895              ret
 0076                   .dbsym r ticks 10 i
 0076                   .dbend

⌨️ 快捷键说明

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