📄 task_switch.lst
字号:
A51 MACRO ASSEMBLER TASK_SWITCH 06/09/2008 17:17:41 PAGE 1
MACRO ASSEMBLER A51 V7.08a
OBJECT MODULE PLACED IN task_switch.OBJ
ASSEMBLER INVOKED BY: D:\Program Files\Keil\C51\BIN\A51.EXE task_switch.a51 GEN SET(SMALL) DEBUG XREF EP
LOC OBJ LINE SOURCE
1
2 NAME OS_TASK_SWITCH
3
4 EXTRN CODE (OSTimeTick)
5 EXTRN CODE (OSIntExit)
6
7 ?PR?OSTickISR?OS_TASK_SWITCH SEGMENT CODE
8 ?DT?OSTickISR?OS_TASK_SWITCH SEGMENT DATA OVERLAYABLE
9 ;---------------------------
10
11 PUBLIC OSTickISR
12 ;---------------------------
13 ;--------------------------------------------
14 PUBLIC STACK
15 ;--------------------------------------------
16 ;?STACK SEGMENT IDATA
17
18 ?STACK SEGMENT IDATA
19
---- 20 RSEG ?STACK
0000 21 STACK: ;堆栈
0000 22 DS 0
23 ;--------------------------------------------
24
---- 25 RSEG ?DT?OSTickISR?OS_TASK_SWITCH
0000 26 ?OSTickISR?BYTE:
0000 27 IEtemp?350: DS 1
28
29 ;---------------------------
30
---- 31 CSEG AT 0000BH
000B 020000 F 32 LJMP OSTickISR
33 ; //功能描述: 系统时钟中断服务函数
34 ; //#pragma disable //禁止所有中断
35 ; void OSTickISR(void) interrupt 1 //OS_TIME_ISR
36
---- 37 RSEG ?PR?OSTickISR?OS_TASK_SWITCH
38 USING 0
0000 39 OSTickISR:
40 ;--------------------------------
41 ; IEtemp=IE;//保存中断
42 ; SOURCE LINE # 202
0000 85A800 F 43 MOV IEtemp?350,IE
44 ; OS_AllIRQ_Unable(); //总中断禁止
45 ; SOURCE LINE # 203
0003 C2AF 46 CLR EA
47 ;--------------------------------
0005 C0E0 48 PUSH ACC
0007 C0F0 49 PUSH B
0009 C083 50 PUSH DPH
000B C082 51 PUSH DPL
000D C0D0 52 PUSH PSW
000F 75D000 53 MOV PSW,#00H
0012 C000 54 PUSH AR0
0014 C001 55 PUSH AR1
0016 C002 56 PUSH AR2
0018 C003 57 PUSH AR3
001A C004 58 PUSH AR4
A51 MACRO ASSEMBLER TASK_SWITCH 06/09/2008 17:17:41 PAGE 2
001C C005 59 PUSH AR5
001E C006 60 PUSH AR6
0020 C007 61 PUSH AR7
62 USING 0
63 ; SOURCE LINE # 196
64 ; {uint8 data IEtemp;
65 ;
66 ;-----------------------------------------
67 ;在后面先判断再设置
68 ; TH0=T0H_COUNTER;
69 ; SOURCE LINE # 199
70 ;--- MOV TH0,#070H
71 ; TL0=T0L_COUNTER;
72 ; SOURCE LINE # 200
73 ;--- MOV TL0,#00H
74 ;------------------------------------------
75 ;修改到前面--------------------------------
76 ; IEtemp=IE;//保存中断
77 ; SOURCE LINE # 202
78 ;--- MOV IEtemp?350,IE
79 ; OS_AllIRQ_Unable(); //总中断禁止
80 ; SOURCE LINE # 203
81 ;--- CLR EA
82 ;--------------------------------
83 ; //IE &= B0000_0000; //IE &= B0000_0001; //保留外部中断原来状态,屏蔽掉其他中断
84 ;
85 ;
86 ; //#if EN_TIMER_SHARING > 0
87 ;--------------------------------
88 ; if(TH0==0)//==0说明是定时器溢出中断,!=0表示是软件设置的定时器中断
89 ; SOURCE LINE # 211
0022 E58C 90 MOV A,TH0
0024 7008 91 JNZ ?C0011
92 ; {
93 ; SOURCE LINE # 212
94 ; TH0=T0H_COUNTER;
95 ; SOURCE LINE # 213
0026 758C70 96 MOV TH0,#070H
97 ; TL0=T0L_COUNTER;
98 ; SOURCE LINE # 214
0029 F58A 99 MOV TL0,A
100 ; OSTimeTick(); //调用系统时钟处理函数
101 ; SOURCE LINE # 215
002B 120000 F 102 LCALL OSTimeTick
103 ; }//
104 ; SOURCE LINE # 216
002E 105 ?C0011:
106 ;--------------------------------
107
108 ; //#else
109 ; // OSIntSendSignal(TIME_ISR_TASK_ID); // 唤醒ID为TIME_ISR_TASK_ID的任务
110 ; //#endif
111 ;
112 ;
113 ; OSIntExit(); //在完全退出中断时,才进行任务切换
114 ; SOURCE LINE # 215
002E 120000 F 115 LCALL OSIntExit
116 ;修改到后面--------------------------------
117 ; //OS_AllIRQ_Enable(); //总中断允许
118 ; IE=IEtemp; //恢复所有中断状态
119 ; SOURCE LINE # 218
120 ;--- MOV IE,IEtemp?350
121 ;--------------------------------
122 ; }
123 ; SOURCE LINE # 219
0031 D007 124 POP AR7
A51 MACRO ASSEMBLER TASK_SWITCH 06/09/2008 17:17:41 PAGE 3
0033 D006 125 POP AR6
0035 D005 126 POP AR5
0037 D004 127 POP AR4
0039 D003 128 POP AR3
003B D002 129 POP AR2
003D D001 130 POP AR1
003F D000 131 POP AR0
0041 D0D0 132 POP PSW
0043 D082 133 POP DPL
0045 D083 134 POP DPH
0047 D0F0 135 POP B
0049 D0E0 136 POP ACC
137 ;--------------------------------
138 ; //OS_AllIRQ_Enable(); //总中断允许
139 ; IE=IEtemp; //恢复所有中断状态
140 ; SOURCE LINE # 218
004B 8500A8 F 141 MOV IE,IEtemp?350
142 ;--------------------------------
004E 32 143 RETI
144 ; END OF OSTickISR
145
146
147 END
A51 MACRO ASSEMBLER TASK_SWITCH 06/09/2008 17:17:41 PAGE 4
XREF SYMBOL TABLE LISTING
---- ------ ----- -------
N A M E T Y P E V A L U E ATTRIBUTES / REFERENCES
?C0011 . . . . . . . . . . . C ADDR 002EH R SEG=?PR?OSTICKISR?OS_TASK_SWITCH 91 105#
?DT?OSTICKISR?OS_TASK_SWITCH D SEG 0001H REL=UNIT 8# 25
?OSTICKISR?BYTE. . . . . . . D ADDR 0000H R SEG=?DT?OSTICKISR?OS_TASK_SWITCH 26#
?PR?OSTICKISR?OS_TASK_SWITCH C SEG 004FH REL=UNIT 7# 37
?STACK . . . . . . . . . . . I SEG 0000H REL=UNIT 18# 20
ACC. . . . . . . . . . . . . D ADDR 00E0H A 48 136
AR0. . . . . . . . . . . . . D ADDR 0000H A 54 131
AR1. . . . . . . . . . . . . D ADDR 0001H A 55 130
AR2. . . . . . . . . . . . . D ADDR 0002H A 56 129
AR3. . . . . . . . . . . . . D ADDR 0003H A 57 128
AR4. . . . . . . . . . . . . D ADDR 0004H A 58 127
AR5. . . . . . . . . . . . . D ADDR 0005H A 59 126
AR6. . . . . . . . . . . . . D ADDR 0006H A 60 125
AR7. . . . . . . . . . . . . D ADDR 0007H A 61 124
B. . . . . . . . . . . . . . D ADDR 00F0H A 49 135
DPH. . . . . . . . . . . . . D ADDR 0083H A 50 134
DPL. . . . . . . . . . . . . D ADDR 0082H A 51 133
EA . . . . . . . . . . . . . B ADDR 00A8H.7 A 46
IE . . . . . . . . . . . . . D ADDR 00A8H A 43 141
IETEMP?350 . . . . . . . . . D ADDR 0000H R SEG=?DT?OSTICKISR?OS_TASK_SWITCH 27# 43 141
OSINTEXIT. . . . . . . . . . C ADDR ----- EXT 5# 115
OSTICKISR. . . . . . . . . . C ADDR 0000H R SEG=?PR?OSTICKISR?OS_TASK_SWITCH 11 32 39#
OSTIMETICK . . . . . . . . . C ADDR ----- EXT 4# 102
OS_TASK_SWITCH . . . . . . . N NUMB ----- 2
PSW. . . . . . . . . . . . . D ADDR 00D0H A 52 53 132
STACK. . . . . . . . . . . . I ADDR 0000H R SEG=?STACK 14 21#
TH0. . . . . . . . . . . . . D ADDR 008CH A 90 96
TL0. . . . . . . . . . . . . D ADDR 008AH A 99
REGISTER BANK(S) USED: 0
ASSEMBLY COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -