📄 os_cpu_a.lst
字号:
196 1
197 1 // UsrStkSP = OSTCBHighRdy ->OSTCBStkPtr;
198 1 //#Lin@恢复仿真堆栈内容到系统堆栈
199 1
200 1 UserStkCount = *OSTCBHighRdy ->OSTCBStkPtr; //#Lin@获取堆栈使用长度
201 1 UserSysStkSP = UserSysSP_Start; //#Lin@获取系统堆栈基地址
202 1 UserUsrStkSP = OSTCBHighRdy ->OSTCBStkPtr; //#Lin@获取用户仿真堆栈基地址
203 1
204 1 // UserUsrStkSP -= UserStkCount;
205 1
206 1 SP = UserSysSP_Start + UserStkCount; //#Lin@系统堆栈定位
207 1
208 1 //#Lin@数据传输
209 1
210 1 do
211 1 {
212 2 UserUsrStkSP ++;
213 2 UserSysStkSP ++;
214 2 *UserSysStkSP = *UserUsrStkSP;
215 2 UserStkCount --;
216 2 }
217 1 while(UserStkCount != 0);
218 1
219 1
220 1 #pragma asm
221 1
222 1 USERPOPALL
223 1 RETI //#Lin@仿真中断返回
224 1
225 1 #pragma endasm
226 1 }
227 //
228 //=======================================================================================================
229
230 //=======================================================================================================
231 //
232 //#Lin@中断服务
233
234 void OSTickISR(void) interrupt 1 //using 3
235 {
236 1
237 1 // EA = 0;
238 1 // OS_STK idata *UsrStkSP;
239 1
240 1 // *UsrStkSP = SP;
C51 COMPILER V7.06 OS_CPU_A 07/29/2003 20:45:13 PAGE 5
241 1 OS_STK idata *UserSysStkSP;
242 1 OS_STK *UserUsrStkSP;
243 1 INT8U UserStkCount;
244 1
245 1 TR0 = 0;
246 1 TH0 = 0x70;
247 1 TL0 = 0x0;
248 1 TR0 = 1;
249 1
250 1 P1 ^= 0x80;
251 1
252 1 OSIntEnter();
253 1 if (OSIntNesting == 1){
254 2
255 2 // OSTCBCur ->OSTCBStkPtr = UsrStkSP;
256 2 UserSysStkSP = UserSysSP_Start;
257 2 UserStkCount = SP - UserSysSP_Start;
258 2 UserUsrStkSP = OSTCBCur ->OSTCBStkPtr;
259 2
260 2 // SP = UserSysSP_Start;//?
261 2
262 2 // UserUsrStkSP += UserStkCount;
263 2 *UserUsrStkSP = UserStkCount;
264 2
265 2 // OSTCBCur ->OSTCBStkPtr = UserUsrStkSP;
266 2
267 2 do
268 2 {
269 3 UserUsrStkSP ++;
270 3 UserSysStkSP ++;
271 3 *UserUsrStkSP = *UserSysStkSP;
272 3 UserStkCount --;
273 3 }
274 2 while(UserStkCount != 0);
275 2 }
276 1
277 1 OSTimeTick();
278 1 OSIntExit();
279 1
280 1 // EA = 1;
281 1 }
282 //
283 //=======================================================================================================
284
285 //=======================================================================================================
286 //
287 //#Lin@在ISR中执行任务切换
288
289 void OSIntCtxSw(void) //using 3
290 {
291 1
292 1 // OS_STK idata *UsrStkSP;
293 1
294 1 // *UsrStkSP = SP;
295 1
296 1 OS_STK idata *UserSysStkSP;
297 1 OS_STK *UserUsrStkSP;
298 1 INT8U UserStkCount;
299 1
300 1 OSTaskSwHook();
301 1
302 1
C51 COMPILER V7.06 OS_CPU_A 07/29/2003 20:45:13 PAGE 6
303 1 OSTCBCur = OSTCBHighRdy;
304 1 OSPrioCur = OSPrioHighRdy;
305 1
306 1 // UsrStkSP = OSTCBHighRdy ->OSTCBStkPtr;
307 1 UserStkCount = *OSTCBHighRdy ->OSTCBStkPtr;
308 1 UserSysStkSP = UserSysSP_Start;
309 1 UserUsrStkSP = OSTCBHighRdy ->OSTCBStkPtr;
310 1
311 1 // UserUsrStkSP -= UserStkCount;
312 1
313 1 SP = UserSysSP_Start + UserStkCount;
314 1
315 1 do
316 1 {
317 2 UserUsrStkSP ++;
318 2 UserSysStkSP ++;
319 2 *UserSysStkSP = *UserUsrStkSP;
320 2 UserStkCount --;
321 2 }
322 1 while(UserStkCount != 0);
323 1
324 1
325 1
326 1 #pragma asm
327 1
328 1 USERPOPALL
329 1 RETI
330 1
331 1 #pragma endasm
332 1 }
333 //
334 //=======================================================================================================
335
336 //=======================================================================================================
337 //#Lin@起始
338
339 void OSStartHighRdy(void) //using 3
340 {
341 1 // OS_STK idata *UsrStkSP;
342 1
343 1 // *UsrStkSP = SP;
344 1 OS_STK idata *UserSysStkSP;
345 1 OS_STK *UserUsrStkSP;
346 1 INT8U UserStkCount;
347 1
348 1 // UserSysSP_Start = SP;
349 1
350 1 OSTaskSwHook();
351 1
352 1 OSRunning = TRUE;
353 1
354 1 // UsrStkSP = OSTCBHighRdy ->OSTCBStkPtr;
355 1 UserStkCount = *OSTCBHighRdy ->OSTCBStkPtr;
356 1 UserSysStkSP = UserSysSP_Start;
357 1 UserUsrStkSP = OSTCBHighRdy ->OSTCBStkPtr;
358 1
359 1 // UserUsrStkSP -= UserStkCount;
360 1
361 1 SP = UserSysSP_Start + UserStkCount;
362 1
363 1 do
364 1 {
C51 COMPILER V7.06 OS_CPU_A 07/29/2003 20:45:13 PAGE 7
365 2 UserUsrStkSP ++;
366 2 UserSysStkSP ++;
367 2 *UserSysStkSP = *UserUsrStkSP;
368 2 UserStkCount --;
369 2 }
370 1 while(UserStkCount != 0);
371 1
372 1
373 1
374 1 #pragma asm
375 1
376 1 USERPOPALL
377 1 RETI
378 1
379 1 #pragma endasm
380 1
381 1 }
382
383 //
384 //=======================================================================================================
385
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 407 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
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 + -