📄 os_cpu_a.lst
字号:
187 POP DPL
188 POP B
189 POP ACC
190 POP PSW
A51 MACRO ASSEMBLER OS_CPU_A 05/10/2005 00:01:35 PAGE 4
191 ENDM
192 ;//----------------------------------------------------------------
---- 193 RSEG ?PR?OSStartHighRdy?OS_CPU_A
0000 194 OSStartHighRdy:
195 USING 0
0000 C2AF 196 CLR EA
0002 120000 F 197 LCALL OSTaskSwHook
0005 858100 F 198 MOV STKStart,SP
0008 199 _OSStartHighRdyGet:
200 ;//------------------------------------------
201 ;// load the low byte of address of (name)
202 ;// and load the TCB of OSTCBHighRdy to DPTR
0008 7800 F 203 MOV R0,#LOW (OSTCBCur)
000A 08 204 INC R0
000B 8683 205 MOV DPH,@R0
000D 08 206 INC R0
000E 8682 207 MOV DPL,@R0
208
209 ;//------------------------------------------
210 ;// get the STK of OSTCBCur task TCB
0010 A3 211 INC DPTR
0011 E0 212 MOVX A, @DPTR
0012 F9 213 MOV R1,A
0013 A3 214 INC DPTR
0014 E0 215 MOVX A, @DPTR
0015 F8 216 MOV R0,A
0016 8983 217 MOV DPH, R1
0018 8882 218 MOV DPL, R0
219
220 ;//------------------------------------------
221 ;// DPTR --> STK of task
001A A3 222 INC DPTR
001B E0 223 MOVX A, @DPTR
001C FD 224 MOV R5,A
225
226 ;//------------------------------------------
227 ;// copy user to system
001D A900 F 228 MOV R1, STKStart
001F 19 229 DEC R1
0020 ED 230 MOV A, R5
0021 FC 231 MOV R4, A
0022 232 COPY_STK:
0022 A3 233 INC DPTR
0023 09 234 INC R1
0024 E0 235 MOVX A, @DPTR
0025 F7 236 MOV @R1, A
0026 DCFA 237 DJNZ R4, COPY_STK
238
239 ;//------------------------------------------
240 ;// OSRunning = 1; multitask start
0028 7800 F 241 MOV R0, #LOW(OSRunning)
002A 7601 242 MOV @R0,#01
243
244 ;//------------------------------------------
245 ;// Now R1 is the new task SP
002C 8981 246 MOV SP, R1
247 PopAll
0056 D2AF 272 SETB EA
0058 32 273 RETI
274
275
276 ;//----------------------------------------------------------------
277
278 ;//----------------------------------------------------------------
---- 279 RSEG ?PR?OSCtxSw?OS_CPU_A
0000 280 OSCtxSw:
A51 MACRO ASSEMBLER OS_CPU_A 05/10/2005 00:01:35 PAGE 5
0000 C2AF 281 CLR EA
282 PushAll
002A 308 OSCtxSw2:
309 ;//------------------------------------------
310 ;// SP - STKStart ===> R5
002A E581 311 MOV A, SP
002C C3 312 CLR C
002D 9500 F 313 SUBB A, STKStart
002F FD 314 MOV R5,A
0030 A900 F 315 MOV R1,STKStart
0032 ED 316 MOV A, R5
0033 2401 317 ADD A, #01
0035 FD 318 MOV R5,A
319
320 ;//------------------------------------------
0036 850083 F 321 MOV DPH, User_SP
0039 850082 F 322 MOV DPL, User_SP+1
323
324 ;//------------------------------------------
325 ;// DPTR - R5
003C E582 326 MOV A, DPL ; Adjust the xstack pointer
003E C3 327 CLR C
003F 9D 328 SUBB A, R5
0040 F582 329 MOV DPL,A
0042 E583 330 MOV A, DPH
0044 9400 331 SUBB A, #00H
0046 F583 332 MOV DPH,A
333
334 ;//------------------------------------------
335 ;// User_SP ===> DPTR
0048 858300 F 336 MOV User_SP, DPH
004B 858200 F 337 MOV User_SP+1, DPL
338
004E A3 339 INC DPTR
340
341 ;//------------------------------------------
342 ;// Save the number of bytes saved
004F ED 343 MOV A, R5
0050 F0 344 MOVX @DPTR,A
345
346 ;//------------------------------------------
347 ;// Save to user stk
0051 ED 348 MOV A, R5
0052 FC 349 MOV R4,A
0053 19 350 DEC R1
0054 351 SAVE_STK:
0054 A3 352 INC DPTR
0055 09 353 INC R1
0056 E7 354 MOV A, @R1
0057 F0 355 MOVX @DPTR, A
0058 DCFA 356 DJNZ R4, SAVE_STK
357
358 ;//------------------------------------------
005A 7800 F 359 MOV R0,#LOW(OSTCBCur)
005C 08 360 INC R0
005D 8683 361 MOV DPH,@R0
005F 08 362 INC R0
0060 8682 363 MOV DPL,@R0
364
0062 A3 365 INC DPTR
0063 E500 F 366 MOV A,User_SP
0065 F0 367 MOVX @DPTR,A
0066 A3 368 INC DPTR
0067 E500 F 369 MOV A,User_SP+1
0069 F0 370 MOVX @DPTR,A
371
A51 MACRO ASSEMBLER OS_CPU_A 05/10/2005 00:01:35 PAGE 6
372 ;//------------------------------------------
006A 120000 F 373 LCALL OSTaskSwHook
006D 120000 F 374 LCALL OSTCBSWHook
0070 020000 F 375 LJMP _OSStartHighRdyGet
376 ;//------------------------------------------
377
378 ;//----------------------------------------------------------------
379
380 ;//----------------------------------------------------------------
---- 381 RSEG ?PR?OSIntCtxSw?OS_CPU_A
0000 382 OSIntCtxSw:
383 ;//------------------------------------------
384 ;// Adjust the stack pointer to remove call to:
385 ;// - call to OSIntExit (2 bytes)
386 ;// - call to OSIntCtxSw (2 bytes)
387 ;// - locals (0 bytes)
0000 C2AF 388 CLR EA
0002 E581 389 MOV A, SP
0004 C3 390 CLR C
0005 9404 391 SUBB A, #4
0007 F581 392 MOV SP,A
0009 020000 F 393 LJMP OSCtxSw2
394 ;//----------------------------------------------------------------
395
396 ;//----------------------------------------------------------------
---- 397 CSEG AT 0000BH
000B 020000 F 398 LJMP OSTickISR
399
---- 400 RSEG ?PR?OSTickISR?OS_CPU_A
0000 401 OSTickISR:
402 USING 0
403 PushAll
0028 C2AF 429 CLR EA
002A C28C 430 CLR TR0
002C 758C3C 431 MOV TH0,#3CH
002F 758AB0 432 MOV TL0,#0B0H
0032 D28C 433 SETB TR0
434
0034 D5000F F 435 DJNZ TickTimeInit,OSTI_1
0037 120000 F 436 LCALL TickTime
003A 120000 F 437 LCALL OSTickISRHook
003D 120000 F 438 LCALL OSIntEnter
0040 120000 F 439 LCALL OSTimeTick
0043 120000 F 440 LCALL OSIntExit
441
0046 442 OSTI_1:
443 PopAll
006E D2AF 468 SETB EA
0070 32 469 RETI
470 ;//----------------------------------------------------------------
471 ;//----------------------------------------------------------------
---- 472 CSEG AT 00003H
0003 020000 F 473 LJMP Extern_0_ISR
---- 474 RSEG ?PR?_EXTERN_0_ISR_?OS_CPU_A
0000 475 Extern_0_ISR:
476 USING 0
0000 C2AF 477 CLR EA
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -