?? os_cpu_a.lst
字號:
0020 7601 148 MOV @R0,#01
149
150 POPALL
0044 D2AF 173 SETB EA ;開中斷
0046 32 174 RETI
175 ;-------------------------------------------------------------------------
---- 176 RSEG ?PR?OSCtxSw?OS_CPU_A
0000 177 OSCtxSw:
178 PUSHALL
201
0022 202 OSIntCtxSw_in:
203
204 ;獲得堆棧長度和起址
0022 E581 205 MOV A,SP
0024 C3 206 CLR C
0025 9400 F 207 SUBB A,#OSStkStart
0027 FD 208 MOV R5,A ;獲得堆棧長度
209
210 ;OSTCBCur ===> DPTR 獲得當前TCB指針,詳見C51.PDF第178頁
0028 7800 F 211 MOV R0,#LOW (OSTCBCur) ;獲得OSTCBCur指針低地址,指針占3字節。+0類型+1高8位數據+2低8位數據
002A 08 212 INC R0
002B 8683 213 MOV DPH,@R0 ;全局變量OSTCBCur在IDATA中
002D 08 214 INC R0
002E 8682 215 MOV DPL,@R0
216
217 ;OSTCBCur->OSTCBStkPtr ===> DPTR 獲得用戶堆棧指針
0030 A3 218 INC DPTR ;指針占3字節。+0類型+1高8位數據+2低8位數據
0031 E0 219 MOVX A,@DPTR ;.OSTCBStkPtr是void指針
0032 F8 220 MOV R0,A
0033 A3 221 INC DPTR
0034 E0 222 MOVX A,@DPTR
0035 F9 223 MOV R1,A
0036 8883 224 MOV DPH,R0
0038 8982 225 MOV DPL,R1
226
227 ;保存堆棧長度
003A ED 228 MOV A,R5
003B F0 229 MOVX @DPTR,A
230
003C 7800 F 231 MOV R0,#OSStkStart ;獲得堆棧起址
003E 232 save_stack:
A51 MACRO ASSEMBLER OS_CPU_A 09/30/2006 10:50:44 PAGE 4
233
003E A3 234 INC DPTR
003F 08 235 INC R0
0040 E6 236 MOV A,@R0
0041 F0 237 MOVX @DPTR,A
0042 DDFA 238 DJNZ R5,save_stack
239
240 ;調用用戶程序
241 ;LCALL _?OSTaskSwHook
242
243 ;OSTCBCur = OSTCBHighRdy
0044 7800 F 244 MOV R0,#OSTCBCur
0046 7900 F 245 MOV R1,#OSTCBHighRdy
0048 E7 246 MOV A,@R1
0049 F6 247 MOV @R0,A
004A 08 248 INC R0
004B 09 249 INC R1
004C E7 250 MOV A,@R1
004D F6 251 MOV @R0,A
004E 08 252 INC R0
004F 09 253 INC R1
0050 E7 254 MOV A,@R1
0051 F6 255 MOV @R0,A
256
257 ;OSPrioCur = OSPrioHighRdy 使用這兩個變量主要目的是為了使指針比較變為字節比較,以便節省時間
。
0052 7800 F 258 MOV R0,#OSPrioCur
0054 7900 F 259 MOV R1,#OSPrioHighRdy
0056 E7 260 MOV A,@R1
0057 F6 261 MOV @R0,A
262
0058 020000 F 263 LJMP OSCtxSw_in
264 ;-------------------------------------------------------------------------
---- 265 RSEG ?PR?OSIntCtxSw?OS_CPU_A
266
0000 267 OSIntCtxSw:
268
269 ;調整SP指針去掉在調用OSIntExit(),OSIntCtxSw()過程中壓入堆棧的多余內容
270 ;SP=SP-4
271
0000 E581 272 MOV A,SP
0002 C3 273 CLR C
0003 9404 274 SUBB A,#4
0005 F581 275 MOV SP,A
276
0007 020000 F 277 LJMP OSIntCtxSw_in
278 ;-------------------------------------------------------------------------
---- 279 CSEG AT 000BH ;OSTickISR
000B 020000 F 280 LJMP OSTickISR ;使用定時器0
---- 281 RSEG ?PR?OSTickISR?OS_CPU_A
282
0000 283 OSTickISR:
284
285 USING 0
286 PUSHALL
309
0022 C28C 310 CLR TR0
0024 758C70 311 MOV TH0,#70H ;定義Tick=50次/秒(即0.02秒/次)
0027 758A00 312 MOV TL0,#00H ;OS_CPU_C.C 和 OS_TICKS_PER_SEC
002A D28C 313 SETB TR0
314
002C 120000 F 315 LCALL _?OSIntEnter
002F 120000 F 316 LCALL _?OSTimeTick
0032 120000 F 317 LCALL _?OSIntExit
318 POPALL
341
A51 MACRO ASSEMBLER OS_CPU_A 09/30/2006 10:50:44 PAGE 5
0057 32 342 RETI
343 end
A51 MACRO ASSEMBLER OS_CPU_A 09/30/2006 10:50:44 PAGE 6
SYMBOL TABLE LISTING
------ ----- -------
N A M E T Y P E V A L U E ATTRIBUTES
?PR?OSCTXSW?OS_CPU_A. . . . C SEG 005BH REL=UNIT
?PR?OSINTCTXSW?OS_CPU_A . . C SEG 000AH REL=UNIT
?PR?OSSTARTHIGHRDY?OS_CPU_A C SEG 0047H REL=UNIT
?PR?OSTICKISR?OS_CPU_A. . . C SEG 0058H REL=UNIT
?STACK. . . . . . . . . . . I SEG 0040H REL=UNIT
ACC . . . . . . . . . . . . D ADDR 00E0H A
B . . . . . . . . . . . . . D ADDR 00F0H A
DPH . . . . . . . . . . . . D ADDR 0083H A
DPL . . . . . . . . . . . . D ADDR 0082H A
EA. . . . . . . . . . . . . B ADDR 00A8H.7 A
OSCTXSW . . . . . . . . . . C ADDR 0000H R SEG=?PR?OSCTXSW?OS_CPU_A
OSCTXSW_IN. . . . . . . . . C ADDR 0000H R SEG=?PR?OSSTARTHIGHRDY?OS_CPU_A
OSINTCTXSW. . . . . . . . . C ADDR 0000H R SEG=?PR?OSINTCTXSW?OS_CPU_A
OSINTCTXSW_IN . . . . . . . C ADDR 0022H R SEG=?PR?OSCTXSW?OS_CPU_A
OSPRIOCUR . . . . . . . . . I ADDR ----- EXT
OSPRIOHIGHRDY . . . . . . . I ADDR ----- EXT
OSRUNNING . . . . . . . . . I ADDR ----- EXT
OSSTACK . . . . . . . . . . I ADDR 0000H R SEG=?STACK
OSSTARTHIGHRDY. . . . . . . C ADDR 0000H R SEG=?PR?OSSTARTHIGHRDY?OS_CPU_A
OSSTKSTART. . . . . . . . . I ADDR FFFFH R SEG=?STACK
OSTCBCUR. . . . . . . . . . I ADDR ----- EXT
OSTCBHIGHRDY. . . . . . . . I ADDR ----- EXT
OSTICKISR . . . . . . . . . C ADDR 0000H R SEG=?PR?OSTICKISR?OS_CPU_A
OS_CPU_A. . . . . . . . . . N NUMB -----
PSW . . . . . . . . . . . . D ADDR 00D0H A
RESTORE_STACK . . . . . . . C ADDR 0016H R SEG=?PR?OSSTARTHIGHRDY?OS_CPU_A
SAVE_STACK. . . . . . . . . C ADDR 003EH R SEG=?PR?OSCTXSW?OS_CPU_A
SP. . . . . . . . . . . . . D ADDR 0081H A
TH0 . . . . . . . . . . . . D ADDR 008CH A
TL0 . . . . . . . . . . . . D ADDR 008AH A
TR0 . . . . . . . . . . . . B ADDR 0088H.4 A
_?OSINTENTER. . . . . . . . C ADDR ----- EXT
_?OSINTEXIT . . . . . . . . C ADDR ----- EXT
_?OSTIMETICK. . . . . . . . C ADDR ----- EXT
REGISTER BANK(S) USED: 0
ASSEMBLY COMPLETE. 0 WARNING(S), 0 ERROR(S)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -