📄 os_cpu_a.lst
字号:
0174 D4360600 3 301 MOV R3,[R6+#06h] ; Get Task STATUS
0178 D4460800 2 302 MOV R4,[R6+#08h] ; Get Task DPP1
017C D4060A00 1 303 MOV R0,[R6+#0Ah] ; Get Task R0
0180 F6F402FE 304 MOV DPP1,R4
305
0184 C4350400 306 MOV [R5+#04h],R3 ; Load "saved" PSW
0188 C4150200 307 MOV [R5+#02h],R1 ; Load "saved" CSP
018C B825 308 MOV [R5],R2 ; Load "saved" IP
309
018E 9810 310 MOV R1,[R0+] ; Restore MDL
0190 F6F10EFE 311 MOV MDL,R1 ;
0194 9810 312 MOV R1,[R0+] ; Restore MDH
0196 F6F10CFE 313 MOV MDH,R1 ;
019A 9810 314 MOV R1,[R0+] ; Restore MDC
019C F6F10EFF 315 MOV MDC,R1 ;
01A0 9810 316 MOV R1,[R0+] ; Restore DPP0
01A2 F6F100FE 317 MOV DPP0,R1 ;
01A6 9810 318 MOV R1,[R0+] ; Restore DPP2
01A8 F6F104FE 319 MOV DPP2,R1 ;
01AC 9810 320 MOV R1,[R0+] ; Restore DPP3
01AE F6F106FE 321 MOV DPP3,R1 ;
01B2 9810 322 MOV R1,[R0+] ; Restore CP
01B4 F6F110FE 323 MOV CP,R1 ;
01B8 CC00 324 NOP
01BA 98F0 325 MOV R15,[R0+] ; Restore R15
01BC 98E0 326 MOV R14,[R0+] ; Restore R14
01BE 98D0 327 MOV R13,[R0+] ; Restore R13
01C0 98C0 328 MOV R12,[R0+] ; Restore R12
C166/ST10 assembler v6.0 r2 SN00082920-083 (c) 1998 TASKING, Inc. Date: Dec 5 2000 Time: 10:02:43 Page: 7
os_cpu_a
LOC CODE LINE SOURCELINE
01C2 98B0 329 MOV R11,[R0+] ; Restore R11
01C4 98A0 330 MOV R10,[R0+] ; Restore R10
01C6 9890 331 MOV R9,[R0+] ; Restore R9
01C8 9880 332 MOV R8,[R0+] ; Restore R8
01CA 9870 333 MOV R7,[R0+] ; Restore R7
01CC 9860 334 MOV R6,[R0+] ; Restore R6
01CE 9850 335 MOV R5,[R0+] ; Restore R5
01D0 9840 336 MOV R4,[R0+] ; Restore R4
01D2 9830 337 MOV R3,[R0+] ; Restore R3
01D4 9820 338 MOV R2,[R0+] ; Restore R2
01D6 9810 339 MOV R1,[R0+] ; Restore R1; Restore General Purpose Registers
340
01D8 BF88 341 BSET IEN ; Enable interrupts
342
01DA FB88 343 RETI ; Return to new task
344
345 _OSCtxSw ENDP
346 UCOS_C16X ENDS
347
348 ;********************************************************************************************************
349 ; PERFORM A CONTEXT SWITCH (From an ISR)
350 ; void OSIntCtxSw(void)
351 ; Note(s): 1) Upon entry,
352 ; OSTCBCur points to the OS_TCB of the task to suspend
353 ; OSTCBHighRdy points to the OS_TCB of the task to resume
354 ;
355 ; 2) The system stack frame of the task to suspend looks as follows:
356 ; SYSTEM STACK AREA
357 ; SP -> +0 OFFSET of task to suspend (Low memory)
358 ; +2 SEGMENT of task to suspend
359 ; +4 PSW of task to suspend (High memory)
360 ;
361 ; 3) The user stack frame of the task to resume looks as follows:
362 ;
363 ; TASK STACK AREA (High Memory)
364 ; +12 TASK DATA PARAMETER PAGE pointer of task
365 ; +10 TASK DATA PARAMETER OFFSET pointer of task
366 ; +0E SEGMENT of task code address
367 ; +0C OFFSET of task code address
368 ; +0A USER STACK OFFSET POINTER (R0) of task
369 ; +08 USER STACK PAGE POINTER (DPP1) of task
370 ; +06 PSW flags of task
371 ; +04 OFFSET of task return address
372 ; +02 SEGMENT of task return address
373 ; OSTCBHighRdy->OSTCBStkPtr --> 0
374 ; -02 R[1 ..15] General Purpose registers of task
375 ; -20 CP Context pointer of task
376 ; -22 DPP3 Data page pointer 3 of task
377 ; -24 DPP2 Data page pointer 2 of task
378 ; -26 DPP0 Data page pointer 0 of task
379 ; -28 MDC Multiply/Divide Control of task
380 ; -2A MDH Multiply/Divide High register of task
381 ; -2C MDL Multiply/Divide Low register of task
382 ; -2E Calls to OsIntExit, OSIntCtxSw and locals. (Low Memory)
383 ;********************************************************************************************************
C166/ST10 assembler v6.0 r2 SN00082920-083 (c) 1998 TASKING, Inc. Date: Dec 5 2000 Time: 10:02:43 Page: 8
os_cpu_a
LOC CODE LINE SOURCELINE
384
385 UCOS_C16X SECTION CODE
386 _OSIntCtxSw PROC FAR
387
01DC 06F00800 388 ADD R0,#8 ; Ignore calls to OSIntExit,OSIntCtxSw and locals.
389
01E0 D7500000 R 390 EXTP #PAG _OSTCBCur,#02h ; Load Task stack pointer from current TCB
01E4 F2F80000 2R 391 MOV R8,POF (_OSTCBCur) ; R7:R6 = OSTCBCur->OSTCBStkPtr
01E8 F2F90000 1R 392 MOV R9,POF (_OSTCBCur+2)
01EC DC59 393 EXTP R9,#02h
01EE 9868 2 394 MOV R6,[R8+]
01F0 A878 1 395 MOV R7,[R8]
396
01F2 F2F512FE 397 MOV R5,SP
01F6 D4350400 398 MOV R3,[R5+#04h] ; Get "current" PSW
01FA D4150200 399 MOV R1,[R5+#02h] ; Get "current" CSP
01FE A825 400 MOV R2,[R5] ; Get "current" IP
0200 F2F402FE 401 MOV R4,DPP1 ; Get "current" DPP1
402
0204 DC57 403 EXTP R7,#02h ; Save this task's interrupt context in task user stack
0206 C4160200 2 404 MOV [R6+#02h],R1 ; Task CSP
020A C4260400 1 405 MOV [R6+#04h],R2 ; Task IP
020E DC67 406 EXTP R7,#03h
0210 C4360600 3 407 MOV [R6+#06h],R3 ; Task STATUS
0214 C4460800 2 408 MOV [R6+#08h],R4 ; Task DPP1
0218 C4060A00 1 409 MOV [R6+#0Ah],R0 ; Task R0
410
021C E6F90000 R 411 MOV R9,#SOF _ADDR02 ; Call user defined task switch hook
0220 8890 412 MOV [-R0],R9
0222 E6F90000 R 413 MOV R9,#SEG _ADDR02
0226 8890 414 MOV [-R0],R9
0228 FA000000 R 415 JMPS SEG( _OSTaskSwHook),SOF( _OSTaskSwHook)
022C 416 _ADDR02:
022C D7500000 R 417 EXTP #PAG (_OSTCBHighRdy),#02h ; OSTCBCur = OSTCBHighRdy
0230 F2F80000 2R 418 MOV R8,POF (_OSTCBHighRdy)
0234 F2F90000 1R 419 MOV R9,POF (_OSTCBHighRdy+2)
0238 D7500000 R 420 EXTP #PAG (_OSTCBCur),#02h
023C F6F80000 2R 421 MOV POF (_OSTCBCur),R8
0240 F6F90000 1R 422 MOV POF (_OSTCBCur+2),R9
423
0244 D7400000 R 424 EXTP #PAG _OSPrioHighRdy,#01h ; OSPrioCur = OSPrioHighRdy;
0248 F3F20000 1R 425 MOVB RL1,POF _OSPrioHighRdy
024C D7400000 R 426 EXTP #PAG _OSPrioCur,#01h
0250 F7F20000 1R 427 MOVB POF _OSPrioCur,RL1
428
0254 DC59 429 EXTP R9,#02h ; Get the stack pointer of the task to resume
0256 9868 2 430 MOV R6,[R8+] ; R7:R6 = OSTCBHighRdy->OSTCBStkPtr
0258 A878 1 431 MOV R7,[R8]
432
025A DC57 433 EXTP R7,#02h ; Get & Initialise task's context from TCB
025C D4160200 2 434 MOV R1,[R6+#02h] ; Task CSP
0260 D4260400 1 435 MOV R2,[R6+#04h] ; Task IP
0264 DC67 436 EXTP R7,#03h
0266 D4360600 3 437 MOV R3,[R6+#06h] ; Task STATUS
026A D4460800 2 438 MOV R4,[R6+#08h] ; Task DPP1
C166/ST10 assembler v6.0 r2 SN00082920-083 (c) 1998 TASKING, Inc. Date: Dec 5 2000 Time: 10:02:43 Page: 9
os_cpu_a
LOC CODE LINE SOURCELINE
026E D4060A00 1 439 MOV R0,[R6+#0Ah] ; Task R0
0272 F6F402FE 440 MOV DPP1,R4
441
0276 C4350400 442 MOV [R5+#04h],R3 ; Load "saved" PSW
027A C4150200 443 MOV [R5+#02h],R1 ; Load "saved" CSP
027E B825 444 MOV [R5],R2 ; Load "saved" IP
445
0280 9810 446 MOV R1,[R0+] ; Restore MDL
0282 F6F10EFE 447 MOV MDL,R1 ;
0286 9810 448 MOV R1,[R0+] ; Restore MDH
0288 F6F10CFE 449 MOV MDH,R1 ;
028C 9810 450 MOV R1,[R0+] ; Restore MDC
028E F6F10EFF 451 MOV MDC,R1 ;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -