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