📄 os_cpu_a.lst
字号:
227 000000D4 POPSP
; Restore stack pointer
227.1 000000D4 0991 LD R16,Y+
227.2 000000D6 0DBF OUT SPL,R16
227.3 000000D8 0991 LD R16,Y+
227.4 000000DA 0EBF OUT SPH,R16
227.5 000000DC ENDM
228 000000DC POPRS
; Restore all registers and the status
register
228.1 000000DC 0991 LD R16,Y+
228.2 000000DE 0FBF OUT SREG,R16
228.3 000000E0 F991 LD R31,Y+
228.4 000000E2 E991 LD R30,Y+
228.5 000000E4 B991 LD R27,Y+
228.6 000000E6 A991 LD R26,Y+
228.7 000000E8 9991 LD R25,Y+
228.8 000000EA 8991 LD R24,Y+
228.9 000000EC 7991 LD R23,Y+
228.10 000000EE 6991 LD R22,Y+
228.11 000000F0 5991 LD R21,Y+
228.12 000000F2 4991 LD R20,Y+
228.13 000000F4 3991 LD R19,Y+
228.14 000000F6 2991 LD R18,Y+
228.15 000000F8 1991 LD R17,Y+
228.16 000000FA 0991 LD R16,Y+
228.17 000000FC F990 LD R15,Y+
228.18 000000FE E990 LD R14,Y+
228.19 00000100 D990 LD R13,Y+
228.20 00000102 C990 LD R12,Y+
228.21 00000104 B990 LD R11,Y+
228.22 00000106 A990 LD R10,Y+
228.23 00000108 9990 LD R9,Y+
228.24 0000010A 8990 LD R8,Y+
228.25 0000010C 7990 LD R7,Y+
228.26 0000010E 6990 LD R6,Y+
228.27 00000110 5990 LD R5,Y+
228.28 00000112 4990 LD R4,Y+
228.29 00000114 3990 LD R3,Y+
228.30 00000116 2990 LD R2,Y+
228.31 00000118 1990 LD R1,Y+
228.32 0000011A 0990 LD R0,Y+
228.33 0000011C ENDM
229 0000011C 0895 RET
230 0000011E
231 0000011E
232 0000011E ;*********************************************
**********************************************
**************
233 0000011E ; INTERRUPT
LEVEL CONTEXT SWITCH
234 0000011E ;
235 0000011E ; Description : This function is called by
OSIntExit() to perform a context switch to a
task that has
236 0000011E ; been made ready-to-run by an
ISR.
237 0000011E ;
238 0000011E ; Note(s) : 1) Upon entry,
239 0000011E ; OSTCBCur points to the
OS_TCB of the task to suspend
240 0000011E ; OSTCBHighRdy points to the
OS_TCB of the task to resume
241 0000011E ;
242 0000011E ; 2) The stack frame of the task
to suspend looks as follows:
243 0000011E ;
244 0000011E ; SP+0
--> LSB of return address of OSIntCtxSw()
(Low memory)
245 0000011E ; +1
MSB of return address of OSIntCtxSw()
246 0000011E ; +2
LSB of return address of OSIntExit()
247 0000011E ; +3
MSB of return address of OSIntExit()
248 0000011E ; +4
LSB of task code address
249 0000011E ; +5
MSB of task code address
(High memory)
250 0000011E ;
251 0000011E ; 3) The saved context of the
task to resume looks as follows:
252 0000011E ;
253 0000011E ; OSTCBHighRdy->OSTCBStkPtr
--> LSB of (return) stack pointer
(Low memory)
254 0000011E ;
SPH of (return) stack pointer
255 0000011E ;
Flags to load in status register
256 0000011E ;
R31
257 0000011E ;
R30
258 0000011E ;
R7
259 0000011E ;
.
260 0000011E ;
.
261 0000011E ;
.
262 0000011E ;
R0
(High memory)
263 0000011E ;*********************************************
**********************************************
**************
264 0000011E
265 0000011E EDB7 OSIntCtxSw: IN R30,SPL
; Z =
SP
266 00000120 FEB7 IN R31,SPH
267 00000122 ; ADIW R30,4
; (Uncomment if OS_CRITICAL_METHOD is
1, see OS_CPU.H)
268 00000122 3596 ADIW R30,5
; Adjust Z
to point to task
return address
269 00000124 FA93 ST -Y,R31
; Save
SP
270 00000126 EA93 ST -Y,R30
;
271 00000128
272 00000128 E091.... LDS R30,OSTCBCur
; Z =
OSTCBCur->OSTCBSt
kPtr
273 0000012C F091.... LDS R31,OSTCBCur+1
;
274 00000130 C193 ST Z+,R28
; Save Y
pointer
275 00000132 D193 ST Z+,R29
;
276 00000134
277 00000134 .... RCALL OSTaskSwHook
; Call user defined task switch hook
278 00000136
279 00000136 0091.... LDS R16,OSPrioHighRdy
; OSPrioCur
= OSPrioHighRdy
280 0000013A 0093.... STS OSPrioCur,R16
;
281 0000013E
282 0000013E E091.... LDS R30,OSTCBHighRdy
; Z =
OSTCBHighRdy->OST
CBStkPtr
283 00000142 F091.... LDS R31,OSTCBHighRdy+1
;
284 00000146 E093.... STS OSTCBCur,R30
;
OSTCBCur =
OSTCBHighRdy
285 0000014A F093.... STS OSTCBCur+1,R31
;
286 0000014E
287 0000014E C191 LD R28,Z+
; Restore Y
pointer
288 00000150 D191 LD R29,Z+
;
289 00000152 POPSP
; Restore stack pointer
289.1 00000152 0991 LD R16,Y+
289.2 00000154 0DBF OUT SPL,R16
289.3 00000156 0991 LD R16,Y+
289.4 00000158 0EBF OUT SPH,R16
289.5 0000015A ENDM
290 0000015A POPRS
; Restore all registers and status
register
290.1 0000015A 0991 LD R16,Y+
290.2 0000015C 0FBF OUT SREG,R16
290.3 0000015E F991 LD R31,Y+
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -