📄 os_cpu_a.lst
字号:
; Restore Y
pointer
253 000000DE 91D1 LD R29,Z+
;
254 000000E0 POPSP
; Restore stack pointer
254.1 000000E0 9109 LD R16,Y+
254.2 000000E2 BF0D OUT SPL,R16
254.3 000000E4 9109 LD R16,Y+
254.4 000000E6 BF0E OUT SPH,R16
254.5 000000E8 ENDM
255 000000E8 POPSREG
; Restore status register
255.1 000000E8 9109 LD R16,Y+
255.2 000000EA BF0F OUT SREG,R16
255.3 000000EC ENDM
256 000000EC POPRS
; Restore all registers
256.1 000000EC 9109 LD R16,Y+
256.2 000000EE BF0B OUT RAMPZ,R16
256.3 000000F0 91F9 LD R31,Y+
256.4 000000F2 91E9 LD R30,Y+
256.5 000000F4 91B9 LD R27,Y+
256.6 000000F6 91A9 LD R26,Y+
256.7 000000F8 9199 LD R25,Y+
256.8 000000FA 9189 LD R24,Y+
256.9 000000FC 9179 LD R23,Y+
256.10 000000FE 9169 LD R22,Y+
256.11 00000100 9159 LD R21,Y+
256.12 00000102 9149 LD R20,Y+
256.13 00000104 9139 LD R19,Y+
256.14 00000106 9129 LD R18,Y+
256.15 00000108 9119 LD R17,Y+
256.16 0000010A 9109 LD R16,Y+
256.17 0000010C 90F9 LD R15,Y+
256.18 0000010E 90E9 LD R14,Y+
256.19 00000110 90D9 LD R13,Y+
256.20 00000112 90C9 LD R12,Y+
256.21 00000114 90B9 LD R11,Y+
256.22 00000116 90A9 LD R10,Y+
256.23 00000118 9099 LD R9,Y+
256.24 0000011A 9089 LD R8,Y+
256.25 0000011C 9079 LD R7,Y+
256.26 0000011E 9069 LD R6,Y+
256.27 00000120 9059 LD R5,Y+
256.28 00000122 9049 LD R4,Y+
256.29 00000124 9039 LD R3,Y+
256.30 00000126 9029 LD R2,Y+
256.31 00000128 9019 LD R1,Y+
256.32 0000012A 9009 LD R0,Y+
256.33 0000012C ENDM
257 0000012C 9508 RET
258 0000012E
259 0000012E
260 0000012E ;*********************************************
**********************************************
**************
261 0000012E ; INTERRUPT
LEVEL CONTEXT SWITCH
262 0000012E ;
263 0000012E ; Description : This function is called by
OSIntExit() to perform a context switch to a
task that has
264 0000012E ; been made ready-to-run by an
ISR.
265 0000012E ;
266 0000012E ; Note(s) : 1) Upon entry,
267 0000012E ; OSTCBCur points to the
OS_TCB of the task to suspend
268 0000012E ; OSTCBHighRdy points to the
OS_TCB of the task to resume
269 0000012E ;
270 0000012E ; 2) The stack frame of the task
to suspend looks as follows:
271 0000012E ;
272 0000012E ; SP+0
--> LSB of return address of OSIntCtxSw()
(Low memory)
273 0000012E ; +1
MSB of return address of OSIntCtxSw()
274 0000012E ; +2
LSB of return address of OSIntExit()
275 0000012E ; +3
MSB of return address of OSIntExit()
276 0000012E ; +4
LSB of task code address
277 0000012E ; +5
MSB of task code address
(High memory)
278 0000012E ;
279 0000012E ; 3) The saved context of the
task to resume looks as follows:
280 0000012E ;
281 0000012E ; OSTCBHighRdy->OSTCBStkPtr
--> LSB of (return) stack pointer
(Low memory)
282 0000012E ;
SPH of (return) stack pointer
283 0000012E ;
Flags to load in status register
284 0000012E ;
R31
285 0000012E ;
R30
286 0000012E ;
R7
287 0000012E ;
.
288 0000012E ;
.
289 0000012E ;
.
290 0000012E ;
R0
(High memory)
291 0000012E ;*********************************************
**********************************************
**************
292 0000012E
293 0000012E B7ED OSIntCtxSw: IN R30,SPL
; Z =
SP
294 00000130 B7FE IN R31,SPH
295 00000132 ; ADIW R30,4
; (Uncomment if OS_CRITICAL_METHOD is
1, see OS_CPU.H)
296 00000132 9635 ADIW R30,5
; Adjust Z
to point to task
return address
297 00000134 93FA ST -Y,R31
; Save
SP
298 00000136 93EA ST -Y,R30
;
299 00000138
300 00000138 91E0.... LDS R30,OSTCBCur
; Z =
OSTCBCur->OSTCBSt
kPtr
301 0000013C 91F0.... LDS R31,OSTCBCur+1
;
302 00000140 93C1 ST Z+,R28
; Save Y
pointer
303 00000142 93D1 ST Z+,R29
;
304 00000144
305 00000144 ........ CALL OSTaskSwHook
; Call user defined task switch hook
306 00000148
307 00000148 9100.... LDS R16,OSPrioHighRdy
; OSPrioCur
= OSPrioHighRdy
308 0000014C 9300.... STS OSPrioCur,R16
;
309 00000150
310 00000150 91E0.... LDS R30,OSTCBHighRdy
; Z =
OSTCBHighRdy->OST
CBStkPtr
311 00000154 91F0.... LDS R31,OSTCBHighRdy+1
;
312 00000158 93E0.... STS OSTCBCur,R30
;
OSTCBCur =
OSTCBHighRdy
313 0000015C 93F0.... STS OSTCBCur+1,R31
;
314 00000160
315 00000160 91C1 LD R28,Z+
; Restore Y
pointer
316 00000162 91D1 LD R29,Z+
;
317 00000164 POPSP
; Restore stack pointer
317.1 00000164 9109 LD R16,Y+
317.2 00000166 BF0D OUT SPL,R16
317.3 00000168 9109 LD R16,Y+
317.4 0000016A BF0E OUT SPH,R16
317.5 0000016C ENDM
318 0000016C POPSREG
; Restore status register
318.1 0000016C 9109 LD R16,Y+
318.2 0000016E BF0F OUT SREG,R16
318.3 00000170 ENDM
319 00000170 POPRS
; Restore all registers
319.1 00000170 9109 LD R16,Y+
319.2 00000172 BF0B OUT RAMPZ,R16
319.3 00000174 91F9 LD R31,Y+
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -