📄 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:
68 .global os_atomic_enable_interrupt
70 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 **** * www.wsn.net.cn
9:os.c **** * @copyright:nbicc_lpp
10:os.c **** * @data:2005.11.22
11:os.c **** * @version:0.0.1
12:os.c **** * @updata:$
13:os.c **** *
14:os.c **** */
15:os.c **** #include "os.h"
16:os.c ****
17:os.c **** //-----------------原子操作-函数---------------------------------------
18:os.c ****
19:os.c **** inline void os_atomic_enable_interrupt(void)
20:os.c ****
21:os.c **** {
72 .LM1:
73 /* prologue: frame size=0 */
74 /* prologue end (size=0) */
22:os.c **** __asm volatile ("sei");
76 .LM2:
77 /* #APP */
78 0000 7894 sei
79 /* #NOAPP */
80 /* epilogue: frame size=0 */
81 0002 0895 ret
82 /* epilogue end (size=1) */
83 /* function os_atomic_enable_interrupt size 3 (2) */
87 .global os_atomic_end
89 os_atomic_end:
23:os.c ****
24:os.c **** }
25:os.c ****
26:os.c **** inline void os_atomic_end(os_atomic_t oldSreg)
27:os.c **** {
91 .LM3:
92 /* prologue: frame size=0 */
93 /* prologue end (size=0) */
28:os.c **** * (volatile unsigned char *)(unsigned int )& * (volatile unsigned char *)(0x3F + 0x20) = oldSreg;
95 .LM4:
96 0004 8FBF out 95-0x20,r24
97 /* epilogue: frame size=0 */
98 0006 0895 ret
99 /* epilogue end (size=1) */
100 /* function os_atomic_end size 2 (1) */
103 .global os_atomic_start
105 os_atomic_start:
29:os.c **** }
30:os.c ****
31:os.c ****
32:os.c **** inline os_atomic_t os_atomic_start(void )
33:os.c **** {
107 .LM5:
108 /* prologue: frame size=0 */
109 /* prologue end (size=0) */
34:os.c **** os_atomic_t result = * (volatile unsigned char *)(unsigned int )& * (volatile unsigned char *)(0
111 .LM6:
112 0008 8FB7 in r24,95-0x20
35:os.c **** __asm volatile ("cli");
114 .LM7:
115 /* #APP */
116 000a F894 cli
36:os.c **** return result;
37:os.c **** }
118 .LM8:
119 /* #NOAPP */
120 000c 9927 clr r25
121 /* epilogue: frame size=0 */
122 000e 0895 ret
123 /* epilogue end (size=1) */
124 /* function os_atomic_start size 5 (4) */
128 .global OS_wait
130 OS_wait:
38:os.c ****
39:os.c ****
40:os.c **** //-----------------系统休眠函数--------------------------------------
41:os.c **** inline void OS_wait(void)
42:os.c **** {
132 .LM9:
133 /* prologue: frame size=0 */
134 /* prologue end (size=0) */
43:os.c **** __asm volatile ("nop");
136 .LM10:
137 /* #APP */
138 0010 0000 nop
44:os.c **** __asm volatile ("nop");}
140 .LM11:
141 0012 0000 nop
142 /* #NOAPP */
143 /* epilogue: frame size=0 */
144 0014 0895 ret
145 /* epilogue end (size=1) */
146 /* function OS_wait size 5 (4) */
149 .global OS_sleep
151 OS_sleep:
45:os.c ****
46:os.c **** inline void OS_sleep(void)
47:os.c **** {
153 .LM12:
154 /* prologue: frame size=0 */
155 /* prologue end (size=0) */
48:os.c ****
49:os.c **** * (volatile unsigned char *)(unsigned int )& * (volatile unsigned char *)(0x35 + 0x20) |= 1 << 5;
157 .LM13:
158 0016 85B7 in r24,85-0x20
159 0018 8062 ori r24,lo8(32)
160 001a 85BF out 85-0x20,r24
50:os.c **** __asm volatile ("sleep");}
162 .LM14:
163 /* #APP */
164 001c 8895 sleep
165 /* #NOAPP */
166 /* epilogue: frame size=0 */
167 001e 0895 ret
168 /* epilogue end (size=1) */
169 /* function OS_sleep size 6 (5) */
172 .global OS_sched_init
174 OS_sched_init:
51:os.c ****
52:os.c **** //-----------------任务调度初始化----------------------------------------
53:os.c ****
54:os.c **** inline void OS_sched_init(void )
55:os.c **** {
176 .LM15:
177 /* prologue: frame size=0 */
178 /* prologue end (size=0) */
56:os.c **** OS_sched_free = 0;
180 .LM16:
181 0020 1092 0000 sts OS_sched_free,__zero_reg__
57:os.c **** OS_sched_full = 0;
183 .LM17:
184 0024 1092 0000 sts OS_sched_full,__zero_reg__
185 /* epilogue: frame size=0 */
186 0028 0895 ret
187 /* epilogue end (size=1) */
188 /* function OS_sched_init size 5 (4) */
192 .global OS_post
194 OS_post:
58:os.c **** }
59:os.c ****
60:os.c **** //-----------------任务提交函数----------------------------------------
61:os.c ****
62:os.c **** bool OS_post(void (*tp)(void))
63:os.c **** {
196 .LM18:
197 /* prologue: frame size=0 */
198 /* prologue end (size=0) */
199 002a BC01 movw r22,r24
200 .LBB2:
201 .LBB3:
203 .LM19:
204 002c 8FB7 in r24,95-0x20
206 .LM20:
207 /* #APP */
208 002e F894 cli
209 /* #NOAPP */
210 0030 482F mov r20,r24
211 0032 5527 clr r21
212 .LBE3:
213 .LBE2:
64:os.c **** os_atomic_t fInterruptFlags;
65:os.c **** uint8_t tmp;
66:os.c **** fInterruptFlags = os_atomic_start();
67:os.c **** tmp = OS_sched_free;
215 .LM21:
216 0034 2091 0000 lds r18,OS_sched_free
68:os.c **** if (OS_queue[tmp].tp == (void *)0) {
218 .LM22:
219 0038 E22F mov r30,r18
220 003a FF27 clr r31
221 003c EE0F add r30,r30
222 003e FF1F adc r31,r31
223 0040 E050 subi r30,lo8(-(OS_queue))
224 0042 F040 sbci r31,hi8(-(OS_queue))
225 0044 8081 ld r24,Z
226 0046 9181 ldd r25,Z+1
227 0048 892B or r24,r25
228 004a 51F4 brne .L9
69:os.c **** OS_sched_free = (tmp + 1) & OS_TASK_BITMASK;
230 .LM23:
231 004c 2F5F subi r18,lo8(-(1))
232 004e 2770 andi r18,lo8(7)
233 0050 2093 0000 sts OS_sched_free,r18
70:os.c **** OS_queue[tmp].tp = tp;
235 .LM24:
236 0054 6083 st Z,r22
237 0056 7183 std Z+1,r23
238 .LBB4:
239 .LBB5:
241 .LM25:
242 0058 4FBF out 95-0x20,r20
243 .LBE5:
244 .LBE4:
71:os.c **** os_atomic_end(fInterruptFlags);
72:os.c ****
73:os.c **** return TRUE;
246 .LM26:
247 005a 81E0 ldi r24,lo8(1)
248 005c 90E0 ldi r25,hi8(1)
249 005e 0895 ret
250 .L9:
251 .LBB6:
252 .LBB7:
254 .LM27:
255 0060 4FBF out 95-0x20,r20
256 .LBE7:
257 .LBE6:
74:os.c **** }
75:os.c **** else {
76:os.c **** os_atomic_end(fInterruptFlags);
77:os.c ****
78:os.c **** return FALSE;
259 .LM28:
260 0062 80E0 ldi r24,lo8(0)
261 0064 90E0 ldi r25,hi8(0)
79:os.c **** }
80:os.c **** }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -