📄 os_cpu_a.lst
字号:
0056 D0E0 199 POP ACC ;A is register but ACC is direct ram
200
0058 D2AF 201 SETB EA ;after start, enable EA
005A 32 202 RETI
203
204
205
206 ; --------------------------------------------------
207 ; --------------------- OSCtxSw() ------------------
208 ; --------------------------------------------------
209
---- 210 RSEG ?PR?OSCtxSw?OS_CPU_A
0000 211 OSCtxSw:
212
213 ;-----------------
214 ; push registers
215 ;-----------------
0000 C0E0 216 PUSH ACC
0002 C0F0 217 PUSH B
0004 C083 218 PUSH DPH
0006 C082 219 PUSH DPL
0008 C0D0 220 PUSH PSW
000A C000 221 PUSH 00
000C C001 222 PUSH 01
000E C002 223 PUSH 02
0010 C003 224 PUSH 03
0012 C004 225 PUSH 04
0014 C005 226 PUSH 05
0016 C006 227 PUSH 06
0018 C007 228 PUSH 07
229
001A 230 OSCPUAUniformCtxSw:
231 ;assume register is pushed to hardware stack, in the format as discripted at the beginning
of this file
232 ;Before jump OSCPUAUniformCtxSw, OSCtxSw or OSIntCtxSw must first push registers to hardwar
e stack as this format.
233
234 ;----------------------
235 ;Get OSTCBCurRdy->OSTCBStkPtr to DPTR
236 ;-----------------------
237 ;high byte is at low address
238
239 ;OSTCBCurRdy to dptr
001A 758300 F 240 MOV DPH,#HIGH(OSTCBCur)
001D 758200 F 241 MOV DPL,#LOW (OSTCBCur)
0020 E0 242 MOVX A,@DPTR
0021 F8 243 MOV R0,A
0022 A3 244 INC DPTR
0023 E0 245 MOVX A,@DPTR
0024 8883 246 MOV DPH,R0
0026 F582 247 MOV DPL,A
248
249 ;OSTCBStkPtr to dptr
A51 MACRO ASSEMBLER OS_CPU_A 11/20/2008 19:25:22 PAGE 5
0028 E0 250 MOVX A,@DPTR
0029 F8 251 MOV R0,A
002A A3 252 INC DPTR
002B E0 253 MOVX A,@DPTR
002C 8883 254 MOV DPH,R0
002E F582 255 MOV DPL,A
256
257
258 ;--------------------
259 ;save stack
260 ;--------------------
261
262 ;store ?C_IBP
0030 E500 F 263 MOV A,?C_IBP
0032 F0 264 MOVX @DPTR,A
265
266 ;store simulated stack
0033 6008 267 JZ OSCPUASmltSaveOver ;simulated stack size == 0, that is A == 0x100
0035 F8 268 MOV R0,A
0036 269 OSCPUASmltSave:
0036 A3 270 INC DPTR
0037 E6 271 MOV A,@R0
0038 F0 272 MOVX @DPTR,A
0039 08 273 INC R0
003A B800F9 274 CJNE R0,#0,OSCPUASmltSave
003D 275 OSCPUASmltSaveOver:
276
277 ;store sp size
003D A3 278 INC DPTR
003E E581 279 MOV A,SP
0040 C3 280 CLR C
0041 9400 F 281 SUBB A,#StkBottom - 1
0043 F0 282 MOVX @DPTR,A
283
284 ;store hardware stack and registers
285 ;stack top is at high address
0044 F9 286 MOV R1,A ;caluate copy rotation times
0045 7800 F 287 MOV R0,#StkBottom - 1 ;start of stack defined by keilc system
0047 288 OSCPUASaveStk:
0047 08 289 INC R0
0048 A3 290 INC DPTR
0049 E6 291 MOV A,@R0
004A F0 292 MOVX @DPTR,A
004B D9FA 293 DJNZ R1,OSCPUASaveStk
294
295 ;-------------------
296 ;call OSTaskSwHook
297 ;-------------------
298
004D 120000 F 299 LCALL _?OSTaskSwHook
300
301 ;-------------------
302 ; OSTCBCur = OSTCBHighRdy
303 ;-------------------
304
0050 758300 F 305 MOV DPH,#HIGH (OSTCBHighRdy)
0053 758200 F 306 MOV DPL,#LOW (OSTCBHighRdy)
0056 E0 307 MOVX A,@DPTR
0057 FF 308 MOV R7,A ;store to R7/R6
0058 A3 309 INC DPTR
0059 E0 310 MOVX A,@DPTR
005A FE 311 MOV R6,A
312
005B 758300 F 313 MOV DPH,#HIGH (OSTCBCur)
005E 758200 F 314 MOV DPL,#LOW (OSTCBCur)
0061 EF 315 MOV A,R7
A51 MACRO ASSEMBLER OS_CPU_A 11/20/2008 19:25:22 PAGE 6
0062 F0 316 MOVX @DPTR,A
0063 EE 317 MOV A,R6
0064 A3 318 INC DPTR
0065 F0 319 MOVX @DPTR,A
320
321 ;-----------------
322 ; OSPrioCur = OSPrioHighRdy
323 ;-----------------
324
0066 758300 F 325 MOV DPH,#HIGH (OSPrioHighRdy)
0069 758200 F 326 MOV DPL,#LOW (OSPrioHighRdy)
006C E0 327 MOVX A,@DPTR
328
006D 758300 F 329 MOV DPH,#HIGH (OSPrioCur)
0070 758200 F 330 MOV DPL,#LOW (OSPrioCur)
0073 F0 331 MOVX @DPTR,A
332
333 ;-----------------
334 ; Restore Ctx
335 ;-----------------
0074 020000 F 336 LJMP OSCPUARstStk
337
338 ; -------------------------------------------
339 ; ---------------- OSIntCtxSw ---------------
340 ; -------------------------------------------
---- 341 RSEG ?PR?OSIntCtxSw?OS_CPU_A
0000 342 OSIntCtxSw:
343 ;------------------
344 ; adjust sp: delete stack content of OSIntExit(),OSIntCtxSw(). SP -= 4
345 ;------------------
346
0000 E581 347 MOV A,SP
0002 C3 348 CLR C
0003 9404 349 SUBB A,#4
0005 F581 350 MOV SP,A
351
0007 020000 F 352 LJMP OSCPUAUniformCtxSw
353
354
355
356
357 END
A51 MACRO ASSEMBLER OS_CPU_A 11/20/2008 19:25:22 PAGE 7
SYMBOL TABLE LISTING
------ ----- -------
N A M E T Y P E V A L U E ATTRIBUTES
?C_IBP. . . . . . . . . . . D ADDR ----- EXT
?PR?OSCTXSW?OS_CPU_A. . . . C SEG 0077H REL=UNIT
?PR?OSINTCTXSW?OS_CPU_A . . C SEG 000AH REL=UNIT
?PR?OSSTARTHIGHRDY?OS_CPU_A C SEG 005BH REL=UNIT
?STACK. . . . . . . . . . . I SEG 0000H 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
OSCPUARSTHARDSTK. . . . . . C ADDR 0038H R SEG=?PR?OSSTARTHIGHRDY?OS_CPU_A
OSCPUARSTSTK. . . . . . . . C ADDR 000BH R SEG=?PR?OSSTARTHIGHRDY?OS_CPU_A
OSCPUASAVESTK . . . . . . . C ADDR 0047H R SEG=?PR?OSCTXSW?OS_CPU_A
OSCPUASMLTRSTOVER . . . . . C ADDR 0030H R SEG=?PR?OSSTARTHIGHRDY?OS_CPU_A
OSCPUASMLTRSTSTK. . . . . . C ADDR 002AH R SEG=?PR?OSSTARTHIGHRDY?OS_CPU_A
OSCPUASMLTSAVE. . . . . . . C ADDR 0036H R SEG=?PR?OSCTXSW?OS_CPU_A
OSCPUASMLTSAVEOVER. . . . . C ADDR 003DH R SEG=?PR?OSCTXSW?OS_CPU_A
OSCPUAUNIFORMCTXSW. . . . . C ADDR 001AH R SEG=?PR?OSCTXSW?OS_CPU_A
OSCTXSW . . . . . . . . . . C ADDR 0000H R SEG=?PR?OSCTXSW?OS_CPU_A
OSINTCTXSW. . . . . . . . . C ADDR 0000H R SEG=?PR?OSINTCTXSW?OS_CPU_A
OSPRIOCUR . . . . . . . . . X ADDR ----- EXT
OSPRIOHIGHRDY . . . . . . . X ADDR ----- EXT
OSRUNNING . . . . . . . . . X ADDR ----- EXT
OSSTARTHIGHRDY. . . . . . . C ADDR 0000H R SEG=?PR?OSSTARTHIGHRDY?OS_CPU_A
OSTCBCUR. . . . . . . . . . X ADDR ----- EXT
OSTCBHIGHRDY. . . . . . . . X ADDR ----- EXT
OS_CPU_A. . . . . . . . . . N NUMB -----
PSW . . . . . . . . . . . . D ADDR 00D0H A
SP. . . . . . . . . . . . . D ADDR 0081H A
STKBOTTOM . . . . . . . . . I ADDR 0000H R SEG=?STACK
TR0 . . . . . . . . . . . . B ADDR 0088H.4 A
_?OSTASKSWHOOK. . . . . . . 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 + -