📄 task_switch.ls1
字号:
008C 2400 F 504 ADD A,#LOW (OS_pcb+02H)
008E F8 505 MOV R0,A
008F 7600 506 MOV @R0,#00H
507 ; }
508 ; SOURCE LINE # 135
509 ; }
510 ; SOURCE LINE # 136
0091 511 ?C0016:
512 ; if(OS_pcb[i].Suspend==0) //查找未挂起任务
513 ; SOURCE LINE # 137
0091 EF 514 MOV A,R7
0092 75F005 515 MOV B,#05H
0095 A4 516 MUL AB
A51 MACRO ASSEMBLER TASK_SWITCH 02/25/2006 14:24:58 PAGE 9
0096 2400 F 517 ADD A,#LOW (OS_pcb+02H)
0098 F8 518 MOV R0,A
0099 E6 519 MOV A,@R0
009A 7019 520 JNZ ?C0015
521 ; {
522 ; SOURCE LINE # 138
523 ; if(OS_pcb[i].Priority<OS_pcb[OS_Current_ID].Priority) //如果优先级高,则切换之
524 ; SOURCE LINE # 139
009C AD00 F 525 MOV R5,OS_Current_ID
009E ED 526 MOV A,R5
009F 75F005 527 MOV B,#05H
00A2 A4 528 MUL AB
00A3 2400 F 529 ADD A,#LOW (OS_pcb+01H)
00A5 F9 530 MOV R1,A
00A6 EF 531 MOV A,R7
00A7 75F005 532 MOV B,#05H
00AA A4 533 MUL AB
00AB 2400 F 534 ADD A,#LOW (OS_pcb+01H)
00AD F8 535 MOV R0,A
00AE E6 536 MOV A,@R0
00AF C3 537 CLR C
00B0 97 538 SUBB A,@R1
00B1 5002 539 JNC ?C0015
540 ; {
541 ; SOURCE LINE # 140
542 ; OS_Current_ID=i;
543 ; SOURCE LINE # 141
00B3 8F00 F 544 MOV OS_Current_ID,R7
545 ; }
546 ; SOURCE LINE # 142
547 ; }
548 ; SOURCE LINE # 143
549 ; }
550 ; SOURCE LINE # 144
00B5 551 ?C0015:
552 ; temp<<=1; //调整temp的值,以检查下一个任务
553 ; SOURCE LINE # 145
00B5 EE 554 MOV A,R6
00B6 25E0 555 ADD A,ACC
00B8 FE 556 MOV R6,A
557 ; }
558 ; SOURCE LINE # 146
00B9 0F 559 INC R7
00BA BF05A6 560 CJNE R7,#05H,?C0012
00BD 561 ?C0013:
562 ;
563 ; SP=OS_pcb[OS_Current_ID].Task_SP; //任务堆栈指针切换
564 ; SOURCE LINE # 148
00BD AE00 F 565 MOV R6,OS_Current_ID
00BF EE 566 MOV A,R6
00C0 75F005 567 MOV B,#05H
00C3 A4 568 MUL AB
00C4 2400 F 569 ADD A,#LOW (OS_pcb)
00C6 F8 570 MOV R0,A
00C7 E6 571 MOV A,@R0
00C8 F581 572 MOV SP,A
573 ;
574 ; __asm POP 7
00CA D007 575 POP 7
576 ; __asm POP 6
00CC D006 577 POP 6
578 ; __asm POP 5
00CE D005 579 POP 5
580 ; __asm POP 4
00D0 D004 581 POP 4
582 ; __asm POP 3
A51 MACRO ASSEMBLER TASK_SWITCH 02/25/2006 14:24:58 PAGE 10
00D2 D003 583 POP 3
584 ; __asm POP 2
00D4 D002 585 POP 2
586 ; __asm POP 1
00D6 D001 587 POP 1
588 ; __asm POP 0
00D8 D000 589 POP 0
590 ; __asm POP DPH
00DA D083 591 POP DPH
592 ; __asm POP DPL //恢复任务寄存器
00DC D082 593 POP DPL
594 ;
595 ; EA=1; //开中断
596 ; SOURCE LINE # 161
00DE D2AF 597 SETB EA
598 ; }
599 ; SOURCE LINE # 162
00E0 D0D0 600 POP PSW
00E2 D0F0 601 POP B
00E4 D0E0 602 POP ACC
00E6 32 603 RETI
604 ; END OF Timer2ISR
605
606 END
A51 MACRO ASSEMBLER TASK_SWITCH 02/25/2006 14:24:58 PAGE 11
SYMBOL TABLE LISTING
------ ----- -------
N A M E T Y P E V A L U E ATTRIBUTES
?C0001 . . . . . . . . . . . . C ADDR 0030H R SEG=?PR?OS_TASK_SWITCH?TASK_SWITCH
?C0002 . . . . . . . . . . . . C ADDR 006AH R SEG=?PR?OS_TASK_SWITCH?TASK_SWITCH
?C0004 . . . . . . . . . . . . C ADDR 005DH R SEG=?PR?OS_TASK_SWITCH?TASK_SWITCH
?C0008 . . . . . . . . . . . . C ADDR 0048H R SEG=?PR?TIMER2ISR?TASK_SWITCH
?C0009 . . . . . . . . . . . . C ADDR 002BH R SEG=?PR?TIMER2ISR?TASK_SWITCH
?C0010 . . . . . . . . . . . . C ADDR 003FH R SEG=?PR?TIMER2ISR?TASK_SWITCH
?C0012 . . . . . . . . . . . . C ADDR 0063H R SEG=?PR?TIMER2ISR?TASK_SWITCH
?C0013 . . . . . . . . . . . . C ADDR 00BDH R SEG=?PR?TIMER2ISR?TASK_SWITCH
?C0015 . . . . . . . . . . . . C ADDR 00B5H R SEG=?PR?TIMER2ISR?TASK_SWITCH
?C0016 . . . . . . . . . . . . C ADDR 0091H R SEG=?PR?TIMER2ISR?TASK_SWITCH
?C0021 . . . . . . . . . . . . C ADDR 0050H R SEG=?PR?TIMER2ISR?TASK_SWITCH
?DT?TASK_SWITCH. . . . . . . . D SEG 0002H REL=UNIT
?PR?OS_TASK_SWITCH?TASK_SWITCH C SEG 0094H REL=UNIT
?PR?TIMER2ISR?TASK_SWITCH. . . C SEG 00E7H REL=UNIT
AC . . . . . . . . . . . . . . B ADDR 00D0H.6 A
ACC. . . . . . . . . . . . . . D ADDR 00E0H A
AR6. . . . . . . . . . . . . . D ADDR 000EH A
B. . . . . . . . . . . . . . . D ADDR 00F0H A
CP_RL2 . . . . . . . . . . . . B ADDR 00C8H.0 A
CY . . . . . . . . . . . . . . B ADDR 00D0H.7 A
C_T2 . . . . . . . . . . . . . B ADDR 00C8H.1 A
DPH. . . . . . . . . . . . . . D ADDR 0083H A
DPL. . . . . . . . . . . . . . D ADDR 0082H A
EA . . . . . . . . . . . . . . B ADDR 00A8H.7 A
ES . . . . . . . . . . . . . . B ADDR 00A8H.4 A
ET0. . . . . . . . . . . . . . B ADDR 00A8H.1 A
ET1. . . . . . . . . . . . . . B ADDR 00A8H.3 A
ET2. . . . . . . . . . . . . . B ADDR 00A8H.5 A
EX0. . . . . . . . . . . . . . B ADDR 00A8H.0 A
EX1. . . . . . . . . . . . . . B ADDR 00A8H.2 A
EXEN2. . . . . . . . . . . . . B ADDR 00C8H.3 A
EXF2 . . . . . . . . . . . . . B ADDR 00C8H.6 A
F0 . . . . . . . . . . . . . . B ADDR 00D0H.5 A
FL . . . . . . . . . . . . . . B ADDR 00D0H.1 A
I?040. . . . . . . . . . . . . D ADDR 0000H R SEG=?DT?TASK_SWITCH
IE . . . . . . . . . . . . . . D ADDR 00A8H A
IE0. . . . . . . . . . . . . . B ADDR 0088H.1 A
IE1. . . . . . . . . . . . . . B ADDR 0088H.3 A
INT0 . . . . . . . . . . . . . B ADDR 00B0H.2 A
INT1 . . . . . . . . . . . . . B ADDR 00B0H.3 A
IP . . . . . . . . . . . . . . D ADDR 00B8H A
IT0. . . . . . . . . . . . . . B ADDR 0088H.0 A
IT1. . . . . . . . . . . . . . B ADDR 0088H.2 A
OS_CURRENT_ID. . . . . . . . . D ADDR ----- EXT
OS_PCB . . . . . . . . . . . . I ADDR ----- EXT
OS_RUNNING . . . . . . . . . . D ADDR ----- EXT
OS_RUN_TIME. . . . . . . . . . D ADDR ----- EXT
OS_TASK_LIST . . . . . . . . . D ADDR ----- EXT
OS_TASK_SWITCH . . . . . . . . C ADDR 0000H R SEG=?PR?OS_TASK_SWITCH?TASK_SWITCH
OV . . . . . . . . . . . . . . B ADDR 00D0H.2 A
P. . . . . . . . . . . . . . . B ADDR 00D0H.0 A
P0 . . . . . . . . . . . . . . D ADDR 0080H A
P0_0 . . . . . . . . . . . . . B ADDR 0080H.0 A
P0_1 . . . . . . . . . . . . . B ADDR 0080H.1 A
P0_2 . . . . . . . . . . . . . B ADDR 0080H.2 A
P0_3 . . . . . . . . . . . . . B ADDR 0080H.3 A
P0_4 . . . . . . . . . . . . . B ADDR 0080H.4 A
P0_5 . . . . . . . . . . . . . B ADDR 0080H.5 A
P0_6 . . . . . . . . . . . . . B ADDR 0080H.6 A
P0_7 . . . . . . . . . . . . . B ADDR 0080H.7 A
A51 MACRO ASSEMBLER TASK_SWITCH 02/25/2006 14:24:58 PAGE 12
P1 . . . . . . . . . . . . . . D ADDR 0090H A
P1_0 . . . . . . . . . . . . . B ADDR 0090H.0 A
P1_1 . . . . . . . . . . . . . B ADDR 0090H.1 A
P1_2 . . . . . . . . . . . . . B ADDR 0090H.2 A
P1_3 . . . . . . . . . . . . . B ADDR 0090H.3 A
P1_4 . . . . . . . . . . . . . B ADDR 0090H.4 A
P1_5 . . . . . . . . . . . . . B ADDR 0090H.5 A
P1_6 . . . . . . . . . . . . . B ADDR 0090H.6 A
P1_7 . . . . . . . . . . . . . B ADDR 0090H.7 A
P2 . . . . . . . . . . . . . . D ADDR 00A0H A
P2_0 . . . . . . . . . . . . . B ADDR 00A0H.0 A
P2_1 . . . . . . . . . . . . . B ADDR 00A0H.1 A
P2_2 . . . . . . . . . . . . . B ADDR 00A0H.2 A
P2_3 . . . . . . . . . . . . . B ADDR 00A0H.3 A
P2_4 . . . . . . . . . . . . . B ADDR 00A0H.4 A
P2_5 . . . . . . . . . . . . . B ADDR 00A0H.5 A
P2_6 . . . . . . . . . . . . . B ADDR 00A0H.6 A
P2_7 . . . . . . . . . . . . . B ADDR 00A0H.7 A
P3 . . . . . . . . . . . . . . D ADDR 00B0H A
P3_0 . . . . . . . . . . . . . B ADDR 00B0H.0 A
P3_1 . . . . . . . . . . . . . B ADDR 00B0H.1 A
P3_2 . . . . . . . . . . . . . B ADDR 00B0H.2 A
P3_3 . . . . . . . . . . . . . B ADDR 00B0H.3 A
P3_4 . . . . . . . . . . . . . B ADDR 00B0H.4 A
P3_5 . . . . . . . . . . . . . B ADDR 00B0H.5 A
P3_6 . . . . . . . . . . . . . B ADDR 00B0H.6 A
P3_7 . . . . . . . . . . . . . B ADDR 00B0H.7 A
PCON . . . . . . . . . . . . . D ADDR 0087H A
PS . . . . . . . . . . . . . . B ADDR 00B8H.4 A
PSW. . . . . . . . . . . . . . D ADDR 00D0H A
PT0. . . . . . . . . . . . . . B ADDR 00B8H.1 A
PT1. . . . . . . . . . . . . . B ADDR 00B8H.3 A
PT2. . . . . . . . . . . . . . B ADDR 00B8H.5 A
PX0. . . . . . . . . . . . . . B ADDR 00B8H.0 A
PX1. . . . . . . . . . . . . . B ADDR 00B8H.2 A
RB8. . . . . . . . . . . . . . B ADDR 0098H.2 A
RCAP2H . . . . . . . . . . . . D ADDR 00CBH A
RCAP2L . . . . . . . . . . . . D ADDR 00CAH A
RCLK . . . . . . . . . . . . . B ADDR 00C8H.5 A
RD . . . . . . . . . . . . . . B ADDR 00B0H.7 A
REN. . . . . . . . . . . . . . B ADDR 0098H.4 A
RI . . . . . . . . . . . . . . B ADDR 0098H.0 A
RS0. . . . . . . . . . . . . . B ADDR 00D0H.3 A
RS1. . . . . . . . . . . . . . B ADDR 00D0H.4 A
RXD. . . . . . . . . . . . . . B ADDR 00B0H.0 A
SBUF . . . . . . . . . . . . . D ADDR 0099H A
SCON . . . . . . . . . . . . . D ADDR 0098H A
SM0. . . . . . . . . . . . . . B ADDR 0098H.7 A
SM1. . . . . . . . . . . . . . B ADDR 0098H.6 A
SM2. . . . . . . . . . . . . . B ADDR 0098H.5 A
SP . . . . . . . . . . . . . . D ADDR 0081H A
T0 . . . . . . . . . . . . . . B ADDR 00B0H.4 A
T1 . . . . . . . . . . . . . . B ADDR 00B0H.5 A
T2 . . . . . . . . . . . . . . B ADDR 0090H.0 A
T2CON. . . . . . . . . . . . . D ADDR 00C8H A
T2EX . . . . . . . . . . . . . B ADDR 0090H.1 A
T2MOD. . . . . . . . . . . . . D ADDR 00C9H A
TASK_SWITCH. . . . . . . . . . N NUMB -----
TB8. . . . . . . . . . . . . . B ADDR 0098H.3 A
TCLK . . . . . . . . . . . . . B ADDR 00C8H.4 A
TCON . . . . . . . . . . . . . D ADDR 0088H A
TEMP?041 . . . . . . . . . . . D ADDR 0001H R SEG=?DT?TASK_SWITCH
TF0. . . . . . . . . . . . . . B ADDR 0088H.5 A
TF1. . . . . . . . . . . . . . B ADDR 0088H.7 A
TF2. . . . . . . . . . . . . . B ADDR 00C8H.7 A
TH0. . . . . . . . . . . . . . D ADDR 008CH A
A51 MACRO ASSEMBLER TASK_SWITCH 02/25/2006 14:24:58 PAGE 13
TH1. . . . . . . . . . . . . . D ADDR 008DH A
TH2. . . . . . . . . . . . . . D ADDR 00CDH A
TI . . . . . . . . . . . . . . B ADDR 0098H.1 A
TIMER2ISR. . . . . . . . . . . C ADDR 0000H R SEG=?PR?TIMER2ISR?TASK_SWITCH
TL0. . . . . . . . . . . . . . D ADDR 008AH A
TL1. . . . . . . . . . . . . . D ADDR 008BH A
TL2. . . . . . . . . . . . . . D ADDR 00CCH A
TMOD . . . . . . . . . . . . . D ADDR 0089H A
TR0. . . . . . . . . . . . . . B ADDR 0088H.4 A
TR1. . . . . . . . . . . . . . B ADDR 0088H.6 A
TR2. . . . . . . . . . . . . . B ADDR 00C8H.2 A
TXD. . . . . . . . . . . . . . B ADDR 00B0H.1 A
WR . . . . . . . . . . . . . . B ADDR 00B0H.6 A
REGISTER BANK(S) USED: 0 1
ASSEMBLY COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -