os_time.lst
来自「称植到lpc2124上的UCOS2.85版 是本人初学移植和ARM的成果 可」· LST 代码 · 共 748 行 · 第 1/3 页
LST
748 行
1 .file "os_time.c"
2 .arch atmega128
3 __SREG__ = 0x3f
4 __SP_H__ = 0x3e
5 __SP_L__ = 0x3d
6 __tmp_reg__ = 0
7 __zero_reg__ = 1
8 .global __do_copy_data
9 .global __do_clear_bss
11 .text
12 .Ltext0:
108 .global OSTimeDly
110 OSTimeDly:
1:../OSsrc/os_time.c **** /*
2:../OSsrc/os_time.c **** ***************************************************************************************************
3:../OSsrc/os_time.c **** * uC/OS-II
4:../OSsrc/os_time.c **** * The Real-Time Kernel
5:../OSsrc/os_time.c **** * TIME MANAGEMENT
6:../OSsrc/os_time.c **** *
7:../OSsrc/os_time.c **** * (c) Copyright 1992-2007, Jean J. Labrosse, Weston, FL
8:../OSsrc/os_time.c **** * All Rights Reserved
9:../OSsrc/os_time.c **** *
10:../OSsrc/os_time.c **** * File : OS_TIME.C
11:../OSsrc/os_time.c **** * By : Jean J. Labrosse
12:../OSsrc/os_time.c **** * Version : V2.85
13:../OSsrc/os_time.c **** *
14:../OSsrc/os_time.c **** * LICENSING TERMS:
15:../OSsrc/os_time.c **** * ---------------
16:../OSsrc/os_time.c **** * uC/OS-II is provided in source form for FREE evaluation, for educational use or for peaceful re
17:../OSsrc/os_time.c **** * If you plan on using uC/OS-II in a commercial product you need to contact Micri祄 to properly l
18:../OSsrc/os_time.c **** * its use in your product. We provide ALL the source code for your convenience and to help you expe
19:../OSsrc/os_time.c **** * uC/OS-II. The fact that the source is provided does NOT mean that you can use it without pa
20:../OSsrc/os_time.c **** * licensing fee.
21:../OSsrc/os_time.c **** ***************************************************************************************************
22:../OSsrc/os_time.c **** */
23:../OSsrc/os_time.c ****
24:../OSsrc/os_time.c **** #ifndef OS_MASTER_FILE
25:../OSsrc/os_time.c **** #include <ucos_ii.h>
26:../OSsrc/os_time.c **** #endif
27:../OSsrc/os_time.c ****
28:../OSsrc/os_time.c **** /*
29:../OSsrc/os_time.c **** ***************************************************************************************************
30:../OSsrc/os_time.c **** * DELAY TASK 'n' TICKS (n from 0 to 65535)
31:../OSsrc/os_time.c **** *
32:../OSsrc/os_time.c **** * Description: This function is called to delay execution of the currently running task until the
33:../OSsrc/os_time.c **** * specified number of system ticks expires. This, of course, directly equates to dela
34:../OSsrc/os_time.c **** * the current task for some time to expire. No delay will result If the specified del
35:../OSsrc/os_time.c **** * 0. If the specified delay is greater than 0 then, a context switch will result.
36:../OSsrc/os_time.c **** *
37:../OSsrc/os_time.c **** * Arguments : ticks is the time delay that the task will be suspended in number of clock 'tick
38:../OSsrc/os_time.c **** * Note that by specifying 0, the task will not be delayed.
39:../OSsrc/os_time.c **** *
40:../OSsrc/os_time.c **** * Returns : none
41:../OSsrc/os_time.c **** ***************************************************************************************************
42:../OSsrc/os_time.c **** */
43:../OSsrc/os_time.c ****
44:../OSsrc/os_time.c **** void OSTimeDly (INT16U ticks)
45:../OSsrc/os_time.c **** {
112 .LM1:
113 /* prologue: frame size=0 */
114 0000 CF93 push r28
115 0002 DF93 push r29
116 /* prologue end (size=2) */
117 0004 9C01 movw r18,r24
46:../OSsrc/os_time.c **** INT8U y;
47:../OSsrc/os_time.c **** #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register
48:../OSsrc/os_time.c **** OS_CPU_SR cpu_sr = 0;
49:../OSsrc/os_time.c **** #endif
50:../OSsrc/os_time.c ****
51:../OSsrc/os_time.c ****
52:../OSsrc/os_time.c ****
53:../OSsrc/os_time.c **** if (OSIntNesting > 0) { /* See if trying to call from an ISR
119 .LM2:
120 0006 8091 0000 lds r24,OSIntNesting
121 000a 8823 tst r24
122 000c 11F5 brne .L1
54:../OSsrc/os_time.c **** return;
55:../OSsrc/os_time.c **** }
56:../OSsrc/os_time.c **** if (ticks > 0) { /* 0 means no delay!
124 .LM3:
125 000e 2115 cp r18,__zero_reg__
126 0010 3105 cpc r19,__zero_reg__
127 0012 F9F0 breq .L1
57:../OSsrc/os_time.c **** OS_ENTER_CRITICAL();
129 .LM4:
130 /* #APP */
131 0014 F894 cli
58:../OSsrc/os_time.c **** y = OSTCBCur->OSTCBY; /* Delay current task
133 .LM5:
134 /* #NOAPP */
135 0016 A091 0000 lds r26,OSTCBCur
136 001a B091 0000 lds r27,(OSTCBCur)+1
137 001e ED01 movw r28,r26
138 0020 8D8D ldd r24,Y+29
59:../OSsrc/os_time.c **** OSRdyTbl[y] &= ~OSTCBCur->OSTCBBitX;
140 .LM6:
141 0022 E82F mov r30,r24
142 0024 FF27 clr r31
143 0026 E050 subi r30,lo8(-(OSRdyTbl))
144 0028 F040 sbci r31,hi8(-(OSRdyTbl))
145 002a 9E8D ldd r25,Y+30
146 002c 9095 com r25
147 002e 8081 ld r24,Z
148 0030 8923 and r24,r25
149 0032 8083 st Z,r24
60:../OSsrc/os_time.c **** if (OSRdyTbl[y] == 0) {
151 .LM7:
152 0034 8823 tst r24
153 0036 39F4 brne .L4
61:../OSsrc/os_time.c **** OSRdyGrp &= ~OSTCBCur->OSTCBBitY;
155 .LM8:
156 0038 9F8D ldd r25,Y+31
157 003a 9095 com r25
158 003c 8091 0000 lds r24,OSRdyGrp
159 0040 8923 and r24,r25
160 0042 8093 0000 sts OSRdyGrp,r24
161 .L4:
62:../OSsrc/os_time.c **** }
63:../OSsrc/os_time.c **** OSTCBCur->OSTCBDly = ticks; /* Load ticks in TCB
163 .LM9:
164 0046 FD01 movw r30,r26
165 0048 308F std Z+24,r19
166 004a 278B std Z+23,r18
64:../OSsrc/os_time.c **** OS_EXIT_CRITICAL();
168 .LM10:
169 /* #APP */
170 004c 7894 sei
65:../OSsrc/os_time.c **** OS_Sched(); /* Find next task to run!
172 .LM11:
173 /* #NOAPP */
174 004e 0E94 0000 call OS_Sched
175 .L1:
176 /* epilogue: frame size=0 */
177 0052 DF91 pop r29
178 0054 CF91 pop r28
179 0056 0895 ret
180 /* epilogue end (size=3) */
181 /* function OSTimeDly size 46 (41) */
186 .Lscope0:
192 .global OSTimeDlyHMSM
194 OSTimeDlyHMSM:
66:../OSsrc/os_time.c **** }
67:../OSsrc/os_time.c **** }
68:../OSsrc/os_time.c **** /*$PAGE*/
69:../OSsrc/os_time.c **** /*
70:../OSsrc/os_time.c **** ***************************************************************************************************
71:../OSsrc/os_time.c **** * DELAY TASK FOR SPECIFIED TIME
72:../OSsrc/os_time.c **** *
73:../OSsrc/os_time.c **** * Description: This function is called to delay execution of the currently running task until some
74:../OSsrc/os_time.c **** * expires. This call allows you to specify the delay time in HOURS, MINUTES, SECONDS
75:../OSsrc/os_time.c **** * MILLISECONDS instead of ticks.
76:../OSsrc/os_time.c **** *
77:../OSsrc/os_time.c **** * Arguments : hours specifies the number of hours that the task will be delayed (max. is 255)
78:../OSsrc/os_time.c **** * minutes specifies the number of minutes (max. 59)
79:../OSsrc/os_time.c **** * seconds specifies the number of seconds (max. 59)
80:../OSsrc/os_time.c **** * milli specifies the number of milliseconds (max. 999)
81:../OSsrc/os_time.c **** *
82:../OSsrc/os_time.c **** * Returns : OS_ERR_NONE
83:../OSsrc/os_time.c **** * OS_ERR_TIME_INVALID_MINUTES
84:../OSsrc/os_time.c **** * OS_ERR_TIME_INVALID_SECONDS
85:../OSsrc/os_time.c **** * OS_ERR_TIME_INVALID_MS
86:../OSsrc/os_time.c **** * OS_ERR_TIME_ZERO_DLY
87:../OSsrc/os_time.c **** * OS_ERR_TIME_DLY_ISR
88:../OSsrc/os_time.c **** *
89:../OSsrc/os_time.c **** * Note(s) : The resolution on the milliseconds depends on the tick rate. For example, you can't
90:../OSsrc/os_time.c **** * a 10 mS delay if the ticker interrupts every 100 mS. In this case, the delay would
91:../OSsrc/os_time.c **** * set to 0. The actual delay is rounded to the nearest tick.
92:../OSsrc/os_time.c **** ***************************************************************************************************
93:../OSsrc/os_time.c **** */
94:../OSsrc/os_time.c ****
95:../OSsrc/os_time.c **** #if OS_TIME_DLY_HMSM_EN > 0
96:../OSsrc/os_time.c **** INT8U OSTimeDlyHMSM (INT8U hours, INT8U minutes, INT8U seconds, INT16U ms)
97:../OSsrc/os_time.c **** {
196 .LM12:
197 /* prologue: frame size=0 */
198 0058 AF92 push r10
199 005a BF92 push r11
200 005c CF92 push r12
201 005e DF92 push r13
202 0060 EF92 push r14
203 0062 FF92 push r15
204 0064 0F93 push r16
205 0066 1F93 push r17
206 0068 CF93 push r28
207 006a DF93 push r29
208 /* prologue end (size=10) */
209 006c 982F mov r25,r24
210 006e A62E mov r10,r22
211 0070 D42E mov r13,r20
212 0072 E901 movw r28,r18
98:../OSsrc/os_time.c **** INT32U ticks;
99:../OSsrc/os_time.c **** INT16U loops;
100:../OSsrc/os_time.c ****
101:../OSsrc/os_time.c ****
102:../OSsrc/os_time.c **** if (OSIntNesting > 0) { /* See if trying to call from an ISR
214 .LM13:
215 0074 8091 0000 lds r24,OSIntNesting
216 0078 8823 tst r24
217 007a 19F0 breq .L6
103:../OSsrc/os_time.c **** return (OS_ERR_TIME_DLY_ISR);
219 .LM14:
220 007c 85E5 ldi r24,lo8(85)
221 007e 90E0 ldi r25,hi8(85)
222 0080 82C0 rjmp .L5
223 .L6:
104:../OSsrc/os_time.c **** }
105:../OSsrc/os_time.c **** #if OS_ARG_CHK_EN > 0
106:../OSsrc/os_time.c **** if (hours == 0) {
225 .LM15:
226 0082 9923 tst r25
227 0084 49F4 brne .L7
107:../OSsrc/os_time.c **** if (minutes == 0) {
229 .LM16:
230 0086 6623 tst r22
231 0088 39F4 brne .L7
108:../OSsrc/os_time.c **** if (seconds == 0) {
233 .LM17:
234 008a 4423 tst r20
235 008c 59F4 brne .L11
109:../OSsrc/os_time.c **** if (ms == 0) {
237 .LM18:
238 008e 232B or r18,r19
239 0090 79F4 brne .L12
110:../OSsrc/os_time.c **** return (OS_ERR_TIME_ZERO_DLY);
241 .LM19:
242 0092 84E5 ldi r24,lo8(84)
243 0094 90E0 ldi r25,hi8(84)
244 0096 77C0 rjmp .L5
245 .L7:
111:../OSsrc/os_time.c **** }
112:../OSsrc/os_time.c **** }
113:../OSsrc/os_time.c **** }
114:../OSsrc/os_time.c **** }
115:../OSsrc/os_time.c **** if (minutes > 59) {
247 .LM20:
248 0098 8BE3 ldi r24,lo8(59)
249 009a 8A15 cp r24,r10
250 009c 18F4 brsh .L11
116:../OSsrc/os_time.c **** return (OS_ERR_TIME_INVALID_MINUTES); /* Validate arguments to be within range
252 .LM21:
253 009e 81E5 ldi r24,lo8(81)
254 00a0 90E0 ldi r25,hi8(81)
255 00a2 71C0 rjmp .L5
256 .L11:
117:../OSsrc/os_time.c **** }
118:../OSsrc/os_time.c **** if (seconds > 59) {
258 .LM22:
259 00a4 ABE3 ldi r26,lo8(59)
260 00a6 AD15 cp r26,r13
261 00a8 18F4 brsh .L12
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?