📄 os_cpu_a.lst
字号:
1 .file "OS_CPU_A.c"
2 .arch atmega16
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:
125 .global OSIntCtxSw
127 OSIntCtxSw:
1:OS_CPU_A.c **** /**************************************************************************************************
2:OS_CPU_A.c **** **-------------------------------------------------------------------------------------------------
3:OS_CPU_A.c **** ***************************************************************************************************
4:OS_CPU_A.c **** #define _OS_CPU_A_C
5:OS_CPU_A.c **** #include "CONFIG.H"
6:OS_CPU_A.c ****
7:OS_CPU_A.c **** extern void * OSTaskStackBottom[OS_MAX_TASKS + 2];
8:OS_CPU_A.c **** void LoadCtx(void);
9:OS_CPU_A.c **** void C_CtxSw(void);
10:OS_CPU_A.c **** void LinkCtxSw(void);
11:OS_CPU_A.c ****
12:OS_CPU_A.c ****
13:OS_CPU_A.c **** void OSIntCtxSw(void)
14:OS_CPU_A.c **** {
129 .LM1:
130 /* prologue: frame size=0 */
131 /* prologue end (size=0) */
15:OS_CPU_A.c **** uint8 * cp ;
16:OS_CPU_A.c ****
17:OS_CPU_A.c **** SP += 4; /* 释放两层函数调用所使用的堆栈 */
133 .LM2:
134 0000 8DB7 in r24,93-0x20
135 0002 9EB7 in r25,(93)+1-0x20
136 0004 0496 adiw r24,4
137 0006 9EBF out (93)+1-0x20,r25
138 0008 8DBF out 93-0x20,r24
18:OS_CPU_A.c ****
19:OS_CPU_A.c **** if(OSTaskID == OS_MAX_TASKS)
140 .LM3:
141 000a 8091 0000 lds r24,OSTaskID
142 000e 8430 cpi r24,lo8(4)
143 0010 31F4 brne .L2
20:OS_CPU_A.c **** {
21:OS_CPU_A.c **** SP += 15;
145 .LM4:
146 0012 8DB7 in r24,93-0x20
147 0014 9EB7 in r25,(93)+1-0x20
148 0016 0F96 adiw r24,15
149 0018 9EBF out (93)+1-0x20,r25
150 001a 8DBF out 93-0x20,r24
151 001c 12C0 rjmp .L3
152 .L2:
22:OS_CPU_A.c **** }
23:OS_CPU_A.c **** else
24:OS_CPU_A.c **** {
25:OS_CPU_A.c **** ExtraPush(); /* 第二部分寄存器堆入栈 */
154 .LM5:
155 /* #APP */
156 001e 2F92 PUSH R2
157 0020 3F92 PUSH R3
158 0022 4F92 PUSH R4
159 0024 5F92 PUSH R5
160 0026 6F92 PUSH R6
161 0028 7F92 PUSH R7
162 002a 8F92 PUSH R8
163 002c 9F92 PUSH R9
164 002e AF92 PUSH R10
165 0030 BF92 PUSH R11
166 0032 CF92 PUSH R12
167 0034 DF92 PUSH R13
168 0036 EF92 PUSH R14
169 0038 FF92 PUSH R15
170 003a 0F93 PUSH R16
171 003c 1F93 PUSH R17
172 003e CF93 PUSH R28
173 0040 DF93 PUSH R29
174
175 /* #NOAPP */
176 .L3:
26:OS_CPU_A.c **** }
27:OS_CPU_A.c ****
28:OS_CPU_A.c **** cp = (uint8 *)SP;
178 .LM6:
179 0042 EDB7 in r30,93-0x20
180 0044 FEB7 in r31,(93)+1-0x20
29:OS_CPU_A.c **** *cp-- = Os_Enter_Sum ; /* 保存关中断计数器 */
182 .LM7:
183 0046 8091 0000 lds r24,Os_Enter_Sum
184 004a 8083 st Z,r24
30:OS_CPU_A.c **** *cp-- = (uint8)(uint16)LinkCtxSw;
186 .LM8:
187 004c 80E0 ldi r24,lo8(pm(LinkCtxSw))
188 004e 90E0 ldi r25,hi8(pm(LinkCtxSw))
189 0050 8293 st -Z,r24
31:OS_CPU_A.c **** *cp-- = (uint8)((uint16)LinkCtxSw/256);
191 .LM9:
192 0052 892F mov r24,r25
193 0054 9927 clr r25
194 0056 8293 st -Z,r24
195 0058 3197 sbiw r30,1
32:OS_CPU_A.c **** SP = (uint16)cp;
197 .LM10:
198 005a FEBF out (93)+1-0x20,r31
199 005c EDBF out 93-0x20,r30
33:OS_CPU_A.c **** __asm__ __volatile__("reti"); /* 模拟中断返回 */
201 .LM11:
202 /* #APP */
203 005e 1895 reti
204 /* #NOAPP */
205 /* epilogue: frame size=0 */
206 0060 0895 ret
207 /* epilogue end (size=1) */
208 /* function OSIntCtxSw size 70 (69) */
213 .Lscope0:
215 .global LoadCtx
217 LoadCtx:
34:OS_CPU_A.c **** }
35:OS_CPU_A.c **** void LinkCtxSw(void)
36:OS_CPU_A.c **** {
37:OS_CPU_A.c **** cli(); /* 为了在执行RETI指令后立即执行CLI指令而构造的特殊函数 */
38:OS_CPU_A.c **** C_CtxSw();
39:OS_CPU_A.c **** }
40:OS_CPU_A.c ****
41:OS_CPU_A.c **** void OSCtxSw(void)
42:OS_CPU_A.c **** {
43:OS_CPU_A.c **** uint8 * cp;
44:OS_CPU_A.c ****
45:OS_CPU_A.c **** PUSHALL(); /* 全部寄存器堆入栈 */
46:OS_CPU_A.c ****
47:OS_CPU_A.c **** cp = (uint8 *)SP;
48:OS_CPU_A.c **** *cp-- = Os_Enter_Sum ;
49:OS_CPU_A.c **** SP = (uint16)cp ;
50:OS_CPU_A.c ****
51:OS_CPU_A.c **** C_CtxSw();
52:OS_CPU_A.c **** }
53:OS_CPU_A.c ****
54:OS_CPU_A.c ****
55:OS_CPU_A.c **** void C_CtxSw(void)
56:OS_CPU_A.c **** {
57:OS_CPU_A.c **** uint8 * cp1;
58:OS_CPU_A.c **** uint8 * cp2;
59:OS_CPU_A.c **** uint8 * cpt;
60:OS_CPU_A.c **** uint8 i ;
61:OS_CPU_A.c ****
62:OS_CPU_A.c **** SP += 4;
63:OS_CPU_A.c **** /* 动态堆栈移动前准备 */
64:OS_CPU_A.c **** cp1 = (uint8 *)SP ;
65:OS_CPU_A.c **** cp2 = (uint8 *)OSTaskStackBottom[OSTaskID+1] ;
66:OS_CPU_A.c **** cpt = (uint8 *)OSTaskStackBottom[OSNextTaskID+1] ;
67:OS_CPU_A.c ****
68:OS_CPU_A.c **** if(OSNextTaskID>OSTaskID)
69:OS_CPU_A.c **** {
70:OS_CPU_A.c **** while(cp2 != cpt) /* 堆栈移动 */
71:OS_CPU_A.c **** {
72:OS_CPU_A.c **** *cp1-- = *cp2-- ;
73:OS_CPU_A.c **** }
74:OS_CPU_A.c **** /* 修改SP,堆栈控制块 */
75:OS_CPU_A.c **** OSTaskID++;
76:OS_CPU_A.c **** OSNextTaskID++;
77:OS_CPU_A.c **** cpt = (uint8 *)SP - (uint16)(OSTaskStackBottom[OSTaskID]) ;
78:OS_CPU_A.c **** SP = (uint16)cp1 ;
79:OS_CPU_A.c **** for(i = OSTaskID;i < OSNextTaskID; i++)
80:OS_CPU_A.c **** {
81:OS_CPU_A.c **** cp1 = (uint8*)OSTaskStackBottom[i];
82:OS_CPU_A.c **** cp1 += (uint16)cpt;
83:OS_CPU_A.c **** OSTaskStackBottom[i] = (void*)cp1 ;
84:OS_CPU_A.c **** }
85:OS_CPU_A.c **** OSNextTaskID--;
86:OS_CPU_A.c **** OSTaskID = OSNextTaskID ;
87:OS_CPU_A.c **** }
88:OS_CPU_A.c **** else if(OSNextTaskID<OSTaskID)
89:OS_CPU_A.c **** {
90:OS_CPU_A.c **** while(cp1 != cpt)
91:OS_CPU_A.c **** {
92:OS_CPU_A.c **** *(++cp2) = *(++cp1) ;
93:OS_CPU_A.c **** }
94:OS_CPU_A.c ****
95:OS_CPU_A.c **** OSTaskID++;
96:OS_CPU_A.c **** OSNextTaskID++;
97:OS_CPU_A.c **** cpt = (uint8 *)SP - (uint16)OSTaskStackBottom[OSTaskID] ;
98:OS_CPU_A.c **** SP = (uint16)OSTaskStackBottom[OSNextTaskID] ;
99:OS_CPU_A.c **** for(i = OSNextTaskID;i < OSTaskID; i++)
100:OS_CPU_A.c **** {
101:OS_CPU_A.c **** cp1 = (uint8*)OSTaskStackBottom[i];
102:OS_CPU_A.c **** cp1 -= (uint16)cpt;
103:OS_CPU_A.c **** OSTaskStackBottom[i] = (void*)cp1;
104:OS_CPU_A.c **** }
105:OS_CPU_A.c **** OSNextTaskID--;
106:OS_CPU_A.c **** OSTaskID = OSNextTaskID;
107:OS_CPU_A.c **** }
108:OS_CPU_A.c ****
109:OS_CPU_A.c **** LoadCtx();
110:OS_CPU_A.c **** }
111:OS_CPU_A.c ****
112:OS_CPU_A.c **** void LoadCtx(void)
113:OS_CPU_A.c **** {
219 .LM12:
220 /* prologue: frame size=0 */
221 /* prologue end (size=0) */
114:OS_CPU_A.c **** uint8 * cp;
115:OS_CPU_A.c ****
116:OS_CPU_A.c **** SP += 2 ;
223 .LM13:
224 0062 8DB7 in r24,93-0x20
225 0064 9EB7 in r25,(93)+1-0x20
226 0066 0296 adiw r24,2
227 0068 9EBF out (93)+1-0x20,r25
228 006a 8DBF out 93-0x20,r24
117:OS_CPU_A.c **** cp = (uint8 *)SP;
230 .LM14:
231 006c EDB7 in r30,93-0x20
232 006e FEB7 in r31,(93)+1-0x20
118:OS_CPU_A.c **** Os_Enter_Sum = *(++cp); /* 恢复关中断计数器 */
234 .LM15:
235 0070 3196 adiw r30,1
236 0072 9081 ld r25,Z
237 0074 9093 0000 sts Os_Enter_Sum,r25
119:OS_CPU_A.c **** SP = (uint16)cp;
239 .LM16:
240 0078 FEBF out (93)+1-0x20,r31
241 007a EDBF out 93-0x20,r30
120:OS_CPU_A.c ****
121:OS_CPU_A.c **** if(OSTaskID != OS_MAX_TASKS)
243 .LM17:
244 007c 8091 0000 lds r24,OSTaskID
245 0080 8430 cpi r24,lo8(4)
246 0082 09F4 brne .+2
247 0084 22C0 rjmp .L5
122:OS_CPU_A.c **** {
123:OS_CPU_A.c **** POPALL(); /* 全部寄存器堆出栈 */
249 .LM18:
250 /* #APP */
251 0086 DF91 POP R29
252 0088 CF91 POP R28
253 008a 1F91 POP R17
254 008c 0F91 POP R16
255 008e FF90 POP R15
256 0090 EF90 POP R14
257 0092 DF90 POP R13
258 0094 CF90 POP R12
259 0096 BF90 POP R11
260 0098 AF90 POP R10
261 009a 9F90 POP R9
262 009c 8F90 POP R8
263 009e 7F90 POP R7
264 00a0 6F90 POP R6
265 00a2 5F90 POP R5
266 00a4 4F90 POP R4
267 00a6 3F90 POP R3
268 00a8 2F90 POP R2
269 00aa FF91 POP R31
270 00ac EF91 POP R30
271 00ae BF91 POP R27
272 00b0 AF91 POP R26
273 00b2 9F91 POP R25
274 00b4 8F91 POP R24
275 00b6 7F91 POP R23
276 00b8 6F91 POP R22
277 00ba 5F91 POP R21
278 00bc 4F91 POP R20
279 00be 3F91 POP R19
280 00c0 2F91 POP R18
281 00c2 0F90 POP R0
282 00c4 0FBE OUT 0x3F,R0
283 00c6 0F90 POP R0
284 00c8 1F90 POP R1
285
286 /* #NOAPP */
287 .L5:
124:OS_CPU_A.c **** }
125:OS_CPU_A.c ****
126:OS_CPU_A.c **** if(Os_Enter_Sum==0)
289 .LM19:
290 00ca 9923 tst r25
291 00cc 09F4 brne .L6
127:OS_CPU_A.c **** {
128:OS_CPU_A.c **** sei();
293 .LM20:
294 /* #APP */
295 00ce 7894 sei
296 /* #NOAPP */
297 .L6:
129:OS_CPU_A.c **** }
130:OS_CPU_A.c **** __asm__ __volatile__("ret");
299 .LM21:
300 /* #APP */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -