📄 os_cpu_a.lst
字号:
+1 234
+1 235
+1 236
+1 237
+1 238
+1 239
+1 240
+1 241
+1 242
+1 243
A51 MACRO ASSEMBLER OS_CPU_A 07/02/2005 23:47:38 PAGE 5
+1 244
+1 245
+1 246
+1 247
+1 248
+1 249
+1 250
+1 251
+1 252
+1 253
+1 254
+1
+1
+1 257
+1
+1
+1
+1
+1
+1 263
+1 264
+1 265
266
267
268
271
272
273
274
275 NAME OS_CPU_A_ASM
276
277 ?PR?OSCtxSw?OS_CPU_A SEGMENT CODE
278 ?PR?OSIntCtxSw?OS_CPU_A SEGMENT CODE
279 ?PR?LoadCtx?OS_CPU_A SEGMENT CODE
280 ?PR?C_OSCtxSw?OS_CPU_A SEGMENT CODE
281 ?PR?_OSTaskStkInit?OS_CPU_A SEGMENT CODE
282
283
284 EXTRN CODE (OSMapTbl)
285 EXTRN DATA (OSFastSwap)
286 EXTRN DATA (OSTaskID)
287 EXTRN DATA (OSNextTaskID)
288 EXTRN DATA (OSTsakStackBotton)
289 EXTRN DATA (Os_Enter_Sum)
290 IF 0 <> 0
EXTRN IDATA (Sp2)
ENDIF
293 IF 0 > 0
EXTRN DATA (?C_XBP)
ENDIF
296
297 PUBLIC _OSTaskStkInit
298 PUBLIC LoadCtx
299 PUBLIC OSIntCtxSw
300 PUBLIC OSCtxSw
301 PUBLIC STACK
302 PUBLIC C_OSCtxSw
303
304 ;****************************************************************************************
305 ;?STACK SEGMENT IDATA
306
307 ?STACK SEGMENT IDATA
308
---- 309 RSEG ?STACK
A51 MACRO ASSEMBLER OS_CPU_A 07/02/2005 23:47:38 PAGE 6
0000 310 STACK: ;堆栈
0000 311 DS 1
312
313 ; /****************************************************************************************
*****************
314 ; ** 函数名称: OSTaskStkInit
315 ; ** 功能描述: 任务堆栈初始化
316 ; ** 输 入: 无
317 ; ** 输 出 : 无
318 ; ** 全局变量: OSTaskID,OSTsakStackBotton,SP
319 ; ** 调用模块: LoadCtx
320 ; **
321 ; ** 作 者: 陈明计
322 ; ** 日 期: 2002年2月22日
323 ; **---------------------------------------------------------------------------------------
----------------
324 ; ** 修改人:
325 ; ** 日 期:
326 ; **---------------------------------------------------------------------------------------
----------------
327 ; *****************************************************************************************
***************/
328
---- 329 RSEG ?PR?_OSTaskStkInit?OS_CPU_A
0000 330 _OSTaskStkInit:
331 USING 0
332 ;---- Variable 'cp?147' assigned to Register 'R0' ----
333 ;---- Variable 'cp?146' assigned to Register 'R1' ----
334 ;---- Variable 'i?145' assigned to Register 'R2' ----
335 ;---- Variable 'TaskID?144' assigned to Register 'R3' ----
336 ;---- Variable 'ptos?143' assigned to Register 'R4/R5' ----
337
0000 C006 338 PUSH AR6
0002 C007 339 PUSH AR7
340 ; {
341
342 ; OSFastSwap[0] &= ~OSMapTbl[TaskID];
0004 EB 343 MOV A,R3
0005 900000 F 344 MOV DPTR,#OSMapTbl
0008 93 345 MOVC A,@A+DPTR
0009 4200 F 346 ORL OSFastSwap,A
A51 MACRO ASSEMBLER OS_CPU_A 07/02/2005 23:47:38 PAGE 7
372
373 ; if (TaskID < OSRunningTaskID())
000B EB 374 MOV A,R3
000C C3 375 CLR C
000D 9500 F 376 SUBB A,OSTaskID
000F 502E 377 JNC StkInit5
378 ; {
379 ; i = OSRunningTaskID() - TaskID;
0011 C3 380 CLR C
0012 E500 F 381 MOV A,OSTaskID
0014 9B 382 SUBB A,R3
0015 FA 383 MOV R2,A
384 ; cp = (uint8 idata *)(&(OSTsakStackBotton[TaskID + 1]));
0016 7400 F 385 MOV A,#LOW (OSTsakStackBotton+01H)
0018 2B 386 ADD A,R3
0019 F9 387 MOV R1,A
001A 388 StkInit8:
389 ; do
390 ; {
391 ; *cp += SP_ADD_BYTE;
001A 7403 392 MOV A,#3
001C 27 393 ADD A,@R1
001D F7 394 MOV @R1,A
395 ; cp++;
001E 09 396 INC R1
397 ; } while (--i != 0);
001F DAF9 398 DJNZ R2,StkInit8
399
400 ; cp1 = (uint8 idata *)SP;
0021 A881 401 MOV R0,SP
402 ; SP = SP + SP_ADD_BYTE;
403 ; SOURCE LINE # 172
0023 7403 404 MOV A,#3
0025 2581 405 ADD A,SP
0027 F581 406 MOV SP,A
407 ; i = SP - (uint8)(OSTsakStackBotton[TaskID + 1]) + 1;
0029 7400 F 408 MOV A,#LOW (OSTsakStackBotton+01H)
002B 2B 409 ADD A,R3
002C F9 410 MOV R1,A
002D 8707 411 MOV AR7,@R1
002F C3 412 CLR C
0030 E581 413 MOV A,SP
0032 9F 414 SUBB A,R7
0033 FA 415 MOV R2,A
0034 0A 416 INC R2
417 ; cp = (uint8 idata *)SP;
0035 A981 418 MOV R1,SP
0037 419 StkInit11:
420 ; do
421 ; {
422 ; *cp-- = *cp1--;
0037 E6 423 MOV A,@R0
0038 F7 424 MOV @R1,A
0039 18 425 DEC R0
003A 19 426 DEC R1
427 ; } while (--i != 0);
003B DAFA 428 DJNZ R2,StkInit11
429 ; }
003D 802C 430 SJMP StkInit12
003F 431 StkInit5:
432 ; else
433 ; {
434 ; cp1 = (uint8 idata *)(&(OSTsakStackBotton[OSRunningTaskID() + 1]));
003F 7400 F 435 MOV A,#LOW (OSTsakStackBotton+01H)
0041 2500 F 436 ADD A,OSTaskID
0043 F8 437 MOV R0,A
A51 MACRO ASSEMBLER OS_CPU_A 07/02/2005 23:47:38 PAGE 8
438 ; i = TaskID - OSRunningTaskID();
0044 C3 439 CLR C
0045 EB 440 MOV A,R3
0046 9500 F 441 SUBB A,OSTaskID
0048 FA 442 MOV R2,A
0049 443 StkInit15:
444 ; do
445 ; {
446 ; *cp1 -= SP_ADD_BYTE;
0049 74FD 447 MOV A,#(-3)
004B 26 448 ADD A,@R0
004C F6 449 MOV @R0,A
450 ; cp1++;
004D 08 451 INC R0
452 ; } while (--i != 0);
004E DAF9 453 DJNZ R2,StkInit15
454 ;
455 ; cp = OSTsakStackBotton[OSRunningTaskID() + 1];
0050 7400 F 456 MOV A,#LOW (OSTsakStackBotton+01H)
0052 2500 F 457 ADD A,OSTaskID
0054 F8 458 MOV R0,A
0055 E6 459 MOV A,@R0
0056 F9 460 MOV R1,A
461 ; i = OSTsakStackBotton[TaskID] - cp - SP_ADD_BYTE;
0057 E9 462 MOV A,R1
0058 24FD 463 ADD A,#(-3)
005A FF 464 MOV R7,A
465
005B 7400 F 466 MOV A,#LOW (OSTsakStackBotton)
005D 2B 467 ADD A,R3
005E F8 468 MOV R0,A
005F E6 469 MOV A,@R0
0060 C3 470 CLR C
0061 9F 471 SUBB A,R7
0062 FA 472 MOV R2,A
473 ; cp1 = cp - SP_ADD_BYTE;
0063 A807 474 MOV R0,AR7
0065 475 StkInit18:
476 ; do
477 ; {
478 ; *cp1++ = *cp++;
0065 E7 479 MOV A,@R1
0066 F6 480 MOV @R0,A
0067 08 481 INC R0
0068 09 482 INC R1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -