📄 os.lst
字号:
1 .file "os.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:
96 .global os_atomic_enable_interrupt
98 os_atomic_enable_interrupt:
1:os.c **** //----------------------------------------------------//
2:os.c **** //-------Institute Of Computing Technology-----------//
3:os.c **** //------------Chinese Academic Science---------------//
4:os.c **** //-----中国科学院计算技术研究所先进测试技术实验室-----//
5:os.c **** //----------------------------------------------------//
6:os.c ****
7:os.c **** // **************************************************
8:os.c **** // * @copyright:nbicc_lpp
9:os.c **** // * @this is OS code head
10:os.c **** // * @author zhouqiang (zhouhongren@163.com)
11:os.c **** // * liulingyi (lingyiliu@ict.ac.cn)
12:os.c **** // * @data:2005.11.05
13:os.c **** // * @version:0.0.1
14:os.c **** // * @updata:$
15:os.c **** // **************************************************
16:os.c ****
17:os.c **** #include "os.h"
18:os.c ****
19:os.c **** //-----------------原子操作-函数---------------------------------------
20:os.c ****
21:os.c **** inline void os_atomic_enable_interrupt(void)
22:os.c ****
23:os.c **** {
100 .LM1:
101 /* prologue: frame size=0 */
102 /* prologue end (size=0) */
24:os.c **** __asm volatile ("sei");
104 .LM2:
105 /* #APP */
106 0000 7894 sei
107 /* #NOAPP */
108 /* epilogue: frame size=0 */
109 0002 0895 ret
110 /* epilogue end (size=1) */
111 /* function os_atomic_enable_interrupt size 3 (2) */
115 .global os_atomic_end
117 os_atomic_end:
25:os.c ****
26:os.c **** }
27:os.c ****
28:os.c **** inline void os_atomic_end(os_atomic_t oldSreg)
29:os.c **** {
119 .LM3:
120 /* prologue: frame size=0 */
121 /* prologue end (size=0) */
30:os.c **** * (volatile unsigned char *)(unsigned int )& * (volatile unsigned char *)(0x3F + 0x20) = oldSreg;
123 .LM4:
124 0004 8FBF out 95-0x20,r24
125 /* epilogue: frame size=0 */
126 0006 0895 ret
127 /* epilogue end (size=1) */
128 /* function os_atomic_end size 2 (1) */
131 .global os_atomic_start
133 os_atomic_start:
31:os.c **** }
32:os.c ****
33:os.c ****
34:os.c **** inline os_atomic_t os_atomic_start(void )
35:os.c **** {
135 .LM5:
136 /* prologue: frame size=0 */
137 /* prologue end (size=0) */
36:os.c **** os_atomic_t result = * (volatile unsigned char *)(unsigned int )& * (volatile unsigned char *)(0
139 .LM6:
140 0008 8FB7 in r24,95-0x20
37:os.c **** __asm volatile ("cli");
142 .LM7:
143 /* #APP */
144 000a F894 cli
38:os.c **** return result;
39:os.c **** }
146 .LM8:
147 /* #NOAPP */
148 000c 9927 clr r25
149 /* epilogue: frame size=0 */
150 000e 0895 ret
151 /* epilogue end (size=1) */
152 /* function os_atomic_start size 5 (4) */
156 .global OS_wait
158 OS_wait:
40:os.c ****
41:os.c ****
42:os.c **** //-----------------系统休眠函数--------------------------------------
43:os.c **** inline void OS_wait(void)
44:os.c **** {
160 .LM9:
161 /* prologue: frame size=0 */
162 /* prologue end (size=0) */
45:os.c **** __asm volatile ("nop");
164 .LM10:
165 /* #APP */
166 0010 0000 nop
46:os.c **** __asm volatile ("nop");}
168 .LM11:
169 0012 0000 nop
170 /* #NOAPP */
171 /* epilogue: frame size=0 */
172 0014 0895 ret
173 /* epilogue end (size=1) */
174 /* function OS_wait size 5 (4) */
177 .global OS_sleep
179 OS_sleep:
47:os.c ****
48:os.c **** inline void OS_sleep(void)
49:os.c **** {
181 .LM12:
182 /* prologue: frame size=0 */
183 /* prologue end (size=0) */
50:os.c ****
51:os.c **** * (volatile unsigned char *)(unsigned int )& * (volatile unsigned char *)(0x35 + 0x20) |= 1 << 5;
185 .LM13:
186 0016 85B7 in r24,85-0x20
187 0018 8062 ori r24,lo8(32)
188 001a 85BF out 85-0x20,r24
52:os.c ****
53:os.c **** __asm volatile ("sleep");}
190 .LM14:
191 /* #APP */
192 001c 8895 sleep
193 /* #NOAPP */
194 /* epilogue: frame size=0 */
195 001e 0895 ret
196 /* epilogue end (size=1) */
197 /* function OS_sleep size 6 (5) */
200 .global OS_sched_init
202 OS_sched_init:
54:os.c ****
55:os.c **** //-----------------任务调度初始化----------------------------------------
56:os.c ****
57:os.c **** inline void OS_sched_init(void )
58:os.c **** {
204 .LM15:
205 /* prologue: frame size=0 */
206 /* prologue end (size=0) */
59:os.c **** OS_sched_free = 0;
208 .LM16:
209 0020 1092 0000 sts OS_sched_free,__zero_reg__
60:os.c **** OS_sched_full = 0;
211 .LM17:
212 0024 1092 0000 sts OS_sched_full,__zero_reg__
213 /* epilogue: frame size=0 */
214 0028 0895 ret
215 /* epilogue end (size=1) */
216 /* function OS_sched_init size 5 (4) */
220 .global OS_post
222 OS_post:
61:os.c **** }
62:os.c ****
63:os.c **** //-----------------任务提交函数----------------------------------------
64:os.c ****
65:os.c **** bool OS_post(void (*tp)(void))
66:os.c **** {
224 .LM18:
225 /* prologue: frame size=0 */
226 /* prologue end (size=0) */
227 002a BC01 movw r22,r24
228 .LBB2:
229 .LBB3:
231 .LM19:
232 002c 8FB7 in r24,95-0x20
234 .LM20:
235 /* #APP */
236 002e F894 cli
237 /* #NOAPP */
238 0030 482F mov r20,r24
239 0032 5527 clr r21
240 .LBE3:
241 .LBE2:
67:os.c **** os_atomic_t fInterruptFlags;
68:os.c **** uint8_t tmp;
69:os.c **** fInterruptFlags = os_atomic_start();
70:os.c **** tmp = OS_sched_free;
243 .LM21:
244 0034 2091 0000 lds r18,OS_sched_free
71:os.c **** if (OS_queue[tmp].tp == (void *)0) {
246 .LM22:
247 0038 E22F mov r30,r18
248 003a FF27 clr r31
249 003c EE0F add r30,r30
250 003e FF1F adc r31,r31
251 0040 E050 subi r30,lo8(-(OS_queue))
252 0042 F040 sbci r31,hi8(-(OS_queue))
253 0044 8081 ld r24,Z
254 0046 9181 ldd r25,Z+1
255 0048 892B or r24,r25
256 004a 51F4 brne .L9
72:os.c **** OS_sched_free = (tmp + 1) & OS_TASK_BITMASK;
258 .LM23:
259 004c 2F5F subi r18,lo8(-(1))
260 004e 2770 andi r18,lo8(7)
261 0050 2093 0000 sts OS_sched_free,r18
73:os.c **** OS_queue[tmp].tp = tp;
263 .LM24:
264 0054 6083 st Z,r22
265 0056 7183 std Z+1,r23
266 .LBB4:
267 .LBB5:
269 .LM25:
270 0058 4FBF out 95-0x20,r20
271 .LBE5:
272 .LBE4:
74:os.c ****
75:os.c **** os_atomic_end(fInterruptFlags);
76:os.c ****
77:os.c **** return TRUE;
274 .LM26:
275 005a 81E0 ldi r24,lo8(1)
276 005c 90E0 ldi r25,hi8(1)
277 005e 0895 ret
278 .L9:
279 .LBB6:
280 .LBB7:
282 .LM27:
283 0060 4FBF out 95-0x20,r20
284 .LBE7:
285 .LBE6:
78:os.c **** }
79:os.c **** else {
80:os.c **** os_atomic_end(fInterruptFlags);
81:os.c ****
82:os.c **** return FALSE;
287 .LM28:
288 0062 80E0 ldi r24,lo8(0)
289 0064 90E0 ldi r25,hi8(0)
83:os.c **** }
84:os.c **** }
291 .LM29:
292 0066 0895 ret
293 /* epilogue: frame size=0 */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -