📄 os_cpu_a.lst
字号:
C51 COMPILER V7.08 OS_CPU_A 10/23/2007 17:47:44 PAGE 1
C51 COMPILER V7.08, COMPILATION OF MODULE OS_CPU_A
OBJECT MODULE PLACED IN OS_CPU_A.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE OS_CPU_A.C LARGE BROWSE DEBUG OBJECTEXTEND SRC(.\OS_CPU_A.SRC)
line level source
1 /*
2 *********************************************************************************************************
3 * uC/OS-II
4 * 实时内核
5 *
6 * (c) Copyright 1992-1998, Jean J. Labrosse, Plantation, FL
7 * 版权所有
8 *
9 * MCU-51 专用代码
10 * KEIL C51大模式编译
11 *
12 * 文件名 : OS_CPU_A.C
13 * 作者 : Jean J. Labrosse
14 * 改编 : 柯新 kexin28@126.com 深圳众芯科技有限公司软件部 2007.10.22
15 *********************************************************************************************************
16 */
17
18 //#define OS_CPU_GLOBALS
19 #include "includes.h"
20
21 OS_STK *UserStkSP_tmp;
22
23 #if CXBP_OK>0
24 #pragma asm
25 EXTRN DATA (?C_XBP) ;仿真堆栈指针用于重入局部变量保存
26 #pragma endasm
27 #endif
28
29 #pragma asm
30
31 PUSHALL MACRO
32
33 PUSH PSW
34 PUSH ACC
35 PUSH B
36 PUSH DPL
37 PUSH DPH
38 MOV A,R0 ;R0-R7入栈
39 PUSH ACC
40 MOV A,R1
41 PUSH ACC
42 MOV A,R2
43 PUSH ACC
44 MOV A,R3
45 PUSH ACC
46 MOV A,R4
47 PUSH ACC
48 MOV A,R5
49 PUSH ACC
50 MOV A,R6
51 PUSH ACC
52 MOV A,R7
53 PUSH ACC
54
55 ENDM
C51 COMPILER V7.08 OS_CPU_A 10/23/2007 17:47:44 PAGE 2
56
57 #pragma endasm
58
59 #pragma asm
60
61 POPALL MACRO
62
63 POP ACC ;R0-R7出栈
64 MOV R7,A
65 POP ACC
66 MOV R6,A
67 POP ACC
68 MOV R5,A
69 POP ACC
70 MOV R4,A
71 POP ACC
72 MOV R3,A
73 POP ACC
74 MOV R2,A
75 POP ACC
76 MOV R1,A
77 POP ACC
78 MOV R0,A
79 POP DPH
80 POP DPL
81 POP B
82 POP ACC
83 POP PSW
84
85 ENDM
86
87 #pragma endasm
88
89 void OSCtxSw(void)
90 {
91 1 OS_STK idata *SysStkSP;
92 1 OS_STK *UserStkSP;
93 1 INT8U STKCount;
94 1
95 1 #pragma asm
96 1 PUSHALL
97 1 #pragma endasm
98 1
99 1 SysStkSP=UserSysSP_Start;
100 1 STKCount=SP-UserSysSP_Start;
101 1 UserStkSP=OSTCBCur->OSTCBStkPtr;
102 1
103 1 *UserStkSP=STKCount;
104 1
105 1 do
106 1 {
107 2 SysStkSP++;
108 2 UserStkSP++;
109 2 *UserStkSP=*SysStkSP;
110 2 STKCount--;
111 2 }while(STKCount!=0);
112 1
113 1 #if CXBP_OK>0
114 1 UserStkSP++;
115 1 UserStkSP_tmp=UserStkSP;
116 1 #pragma asm
117 1 MOV R0,#LOW (UserStkSP_tmp)
C51 COMPILER V7.08 OS_CPU_A 10/23/2007 17:47:44 PAGE 3
118 1 ;MOV R0,#UserStkSP_tmp
119 1 ;INC R0
120 1 ;MOV DPH,@R0 ;变量 UserStkSP_tmp 在IDATA中
121 1 ;INC R0
122 1 ;MOV DPL,@R0
123 1
124 1 ;保存仿真堆栈指针?C_XBP
125 1 MOV A,?C_XBP ;?C_XBP 仿真堆栈指针高8位
126 1 ;MOVX @DPTR,A
127 1 MOVX @R0,A
128 1 INC R0
129 1 ;INC DPTR
130 1 MOV A,?C_XBP+1 ;?C_XBP 仿真堆栈指针低8位
131 1 ;MOVX @DPTR,A
132 1 MOVX @R0,A
133 1 #pragma endasm
134 1 #endif
135 1 OSTaskSwHook();
136 1
137 1
138 1 OSTCBCur=OSTCBHighRdy;
139 1 OSPrioCur=OSPrioHighRdy;
140 1
141 1 UserStkSP=OSTCBCur->OSTCBStkPtr;
142 1 SysStkSP=UserSysSP_Start;
143 1 STKCount=*UserStkSP;
144 1
145 1 SP=UserSysSP_Start+STKCount;
146 1
147 1 do{
148 2 UserStkSP++;
149 2 SysStkSP++;
150 2 *SysStkSP=*UserStkSP;
151 2 STKCount--;
152 2 }while(STKCount!=0);
153 1
154 1 #if CXBP_OK>0
155 1 UserStkSP++;
156 1 UserStkSP_tmp=UserStkSP;
157 1 #pragma asm
158 1 MOV R0,#LOW (UserStkSP_tmp)
159 1 ;MOV R0,#UserStkSP_tmp
160 1 ;INC R0
161 1 ;MOV DPH,@R0 ;变量UserStkSP在IDATA中
162 1 ;INC R0
163 1 ;MOV DPL,@R0
164 1
165 1 ;MOVX A,@DPTR
166 1 MOVX A,@R0
167 1 MOV ?C_XBP,A ;?C_XBP 仿真堆栈指针高8位
168 1 ;INC DPTR
169 1 INC R0
170 1 ;MOVX A,@DPTR
171 1 MOVX A,@R0
172 1 MOV ?C_XBP+1,A ;?C_XBP 仿真堆栈指针低8位
173 1 #pragma endasm
174 1 #endif
175 1
176 1 #pragma asm
177 1 POPALL
178 1 RETI
179 1 #pragma endasm
C51 COMPILER V7.08 OS_CPU_A 10/23/2007 17:47:44 PAGE 4
180 1
181 1 }
182
183 void OSTickISR(void) interrupt 1
184 {
185 1 /* OS_STK idata *SysStkSP;
186 1 OS_STK *UserStkSP;
187 1 INT8U STKCount;*/
188 1
189 1 TR0=0;
190 1 TH0=0x70;
191 1 TL0=0x00;
192 1 TR0 = 1;
193 1
194 1 OSIntEnter();
195 1 /* if (OSIntNesting == 1)
196 1 {
197 1 SysStkSP=UserSysSP_Start;
198 1 STKCount=SP-UserSysSP_Start;
199 1 UserStkSP=OSTCBCur->OSTCBStkPtr;
200 1
201 1 *UserStkSP=STKCount;
202 1
203 1 do
204 1 {
205 1 SysStkSP++;
206 1 UserStkSP++;
207 1 *UserStkSP=*SysStkSP;
208 1 STKCount--;
209 1 }while(STKCount!=0);
210 1 } */
211 1 OSTimeTick();
212 1 OSIntExit();
213 1 }
214
215 void OSIntCtxSw(void)
216 {
217 1 OS_STK idata *SysStkSP;
218 1 OS_STK *UserStkSP;
219 1 INT8U STKCount;
220 1
221 1 OSTaskSwHook();
222 1
223 1 OSTCBCur=OSTCBHighRdy;
224 1 OSPrioCur=OSPrioHighRdy;
225 1
226 1 UserStkSP=OSTCBCur->OSTCBStkPtr;
227 1 SysStkSP=UserSysSP_Start;
228 1 STKCount=*UserStkSP;
229 1 // STKCount-=4;
230 1 SP=UserSysSP_Start+STKCount;
231 1
232 1 do{
233 2 UserStkSP++;
234 2 SysStkSP++;
235 2 *SysStkSP=*UserStkSP;
236 2 STKCount--;
237 2 }while(STKCount!=0);
238 1
239 1 #if CXBP_OK>0
240 1 UserStkSP++;
241 1 UserStkSP_tmp=UserStkSP;
C51 COMPILER V7.08 OS_CPU_A 10/23/2007 17:47:44 PAGE 5
242 1 #pragma asm
243 1 MOV R0,#LOW (UserStkSP_tmp)
244 1 ;MOV R0,#UserStkSP_tmp
245 1 ;INC R0
246 1 ;MOV DPH,@R0 ;变量UserStkSP在IDATA中
247 1 ;INC R0
248 1 ;MOV DPL,@R0
249 1
250 1 ;MOVX A,@DPTR
251 1 MOVX A,@R0
252 1 MOV ?C_XBP,A ;?C_XBP 仿真堆栈指针高8位
253 1 ;INC DPTR
254 1 INC R0
255 1 ;MOVX A,@DPTR
256 1 MOVX A,@R0
257 1 MOV ?C_XBP+1,A ;?C_XBP 仿真堆栈指针低8位
258 1 #pragma endasm
259 1 #endif
260 1
261 1 #pragma asm
262 1 POPALL
263 1 RETI
264 1 #pragma endasm
265 1
266 1 }
267
268 void OSStartHighRdy(void)
269 {
270 1 OS_STK idata *SysStkSP;
271 1 OS_STK *UserStkSP;
272 1 INT8U STKCount;
273 1
274 1 OSTaskSwHook();
275 1
276 1
277 1 SysStkSP=UserSysSP_Start;
278 1 OSTCBCur=OSTCBHighRdy;
279 1 OSPrioCur=OSPrioHighRdy;
280 1
281 1 UserStkSP=OSTCBCur->OSTCBStkPtr;
282 1 STKCount=*UserStkSP;
283 1
284 1 SP=UserSysSP_Start+STKCount;
285 1
286 1 do{
287 2 UserStkSP++;
288 2 SysStkSP++;
289 2 *SysStkSP=*UserStkSP;
290 2 STKCount--;
291 2 }while(STKCount!=0);
292 1
293 1 #if CXBP_OK>0
294 1 UserStkSP++;
295 1 UserStkSP_tmp=UserStkSP;
296 1 #pragma asm
297 1 MOV R0,#LOW (UserStkSP_tmp)
298 1 ;MOV R0,#UserStkSP_tmp
299 1 ;INC R0
300 1 ;MOV DPH,@R0 ;变量UserStkSP在IDATA中
301 1 ;INC R0
302 1 ;MOV DPL,@R0
303 1
C51 COMPILER V7.08 OS_CPU_A 10/23/2007 17:47:44 PAGE 6
304 1 ;MOVX A,@DPTR
305 1 MOVX A,@R0
306 1 MOV ?C_XBP,A ;?C_XBP 仿真堆栈指针高8位
307 1 ;INC DPTR
308 1 INC R0
309 1 ;MOVX A,@DPTR
310 1 MOVX A,@R0
311 1 MOV ?C_XBP+1,A ;?C_XBP 仿真堆栈指针低8位
312 1 #pragma endasm
313 1 #endif
314 1
315 1 OSRunning = 1;
316 1
317 1 #pragma asm
318 1 POPALL
319 1 RETI
320 1 #pragma endasm
321 1 }
322
323 #if SERIAL_OK>0
324 void SerialISR(void) reentrant interrupt 4 using 0
325 {
326 1 // EA=0;
327 1 OSIntEnter();
328 1 serial();
329 1 // EA=1;
330 1 OSIntExit();
331 1 }
332 #endif
333
334
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 651 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = 3 ----
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -