📄 os_time.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 + -