📄 os_cpu_a.lst
字号:
; Load Y
(R29:R28)
pointer
198 00000018 91D1 LD R29,Z+
;
199 0000001A
200 0000001A POPSP
; Restore stack pointer
200.1 0000001A 9109 LD R16,Y+
200.2 0000001C BF0D OUT SPL,R16
200.3 0000001E 9109 LD R16,Y+
200.4 00000020 BF0E OUT SPH,R16
200.5 00000022 ENDM
201 00000022 POPSREG
; Restore status register
201.1 00000022 9109 LD R16,Y+
201.2 00000024 BF0F OUT SREG,R16
201.3 00000026 ENDM
202 00000026 POPRS
; Restore all registers
202.1 00000026 9109 LD R16,Y+
202.2 00000028 BF0B OUT RAMPZ,R16
202.3 0000002A 91F9 LD R31,Y+
202.4 0000002C 91E9 LD R30,Y+
202.5 0000002E 91B9 LD R27,Y+
202.6 00000030 91A9 LD R26,Y+
202.7 00000032 9199 LD R25,Y+
202.8 00000034 9189 LD R24,Y+
202.9 00000036 9179 LD R23,Y+
202.10 00000038 9169 LD R22,Y+
202.11 0000003A 9159 LD R21,Y+
202.12 0000003C 9149 LD R20,Y+
202.13 0000003E 9139 LD R19,Y+
202.14 00000040 9129 LD R18,Y+
202.15 00000042 9119 LD R17,Y+
202.16 00000044 9109 LD R16,Y+
202.17 00000046 90F9 LD R15,Y+
202.18 00000048 90E9 LD R14,Y+
202.19 0000004A 90D9 LD R13,Y+
202.20 0000004C 90C9 LD R12,Y+
202.21 0000004E 90B9 LD R11,Y+
202.22 00000050 90A9 LD R10,Y+
202.23 00000052 9099 LD R9,Y+
202.24 00000054 9089 LD R8,Y+
202.25 00000056 9079 LD R7,Y+
202.26 00000058 9069 LD R6,Y+
202.27 0000005A 9059 LD R5,Y+
202.28 0000005C 9049 LD R4,Y+
202.29 0000005E 9039 LD R3,Y+
202.30 00000060 9029 LD R2,Y+
202.31 00000062 9019 LD R1,Y+
202.32 00000064 9009 LD R0,Y+
202.33 00000066 ENDM
203 00000066 9508 RET
; Start task
204 00000068
205 00000068 ;*********************************************
**********************************************
*************
206 00000068 ; TASK
LEVEL CONTEXT SWITCH
207 00000068 ;
208 00000068 ; Description : This function is called when a
task makes a higher priority task ready-to-ru
n.
209 00000068 ;
210 00000068 ; Note(s) : 1) Upon entry,
211 00000068 ; OSTCBCur points to the
OS_TCB of the task to suspend
212 00000068 ; OSTCBHighRdy points to the
OS_TCB of the task to resume
213 00000068 ;
214 00000068 ; 2) The stack frame of the task
to suspend looks as follows:
215 00000068 ;
216 00000068 ; SP+0
--> LSB of task code address
217 00000068 ; +1
MSB of task code address
(High memory)
218 00000068 ;
219 00000068 ; 3) The saved context of the
task to resume looks as follows:
220 00000068 ;
221 00000068 ; OSTCBHighRdy->OSTCBStkPtr
--> LSB of (return) stack pointer
(Low memory)
222 00000068 ;
SPH of (return) stack pointer
223 00000068 ;
Flags to load in status register
224 00000068 ;
R31
225 00000068 ;
R30
226 00000068 ;
R7
227 00000068 ;
.
228 00000068 ;
.
229 00000068 ;
.
230 00000068 ;
R0
(High memory)
231 00000068 ;*********************************************
**********************************************
*************
232 00000068
233 00000068 OSCtxSw: PUSHRS
; Save current task's context
233.1 00000068 920A ST -Y,R0
233.2 0000006A 921A ST -Y,R1
233.3 0000006C 922A ST -Y,R2
233.4 0000006E 923A ST -Y,R3
233.5 00000070 924A ST -Y,R4
233.6 00000072 925A ST -Y,R5
233.7 00000074 926A ST -Y,R6
233.8 00000076 927A ST -Y,R7
233.9 00000078 928A ST -Y,R8
233.10 0000007A 929A ST -Y,R9
233.11 0000007C 92AA ST -Y,R10
233.12 0000007E 92BA ST -Y,R11
233.13 00000080 92CA ST -Y,R12
233.14 00000082 92DA ST -Y,R13
233.15 00000084 92EA ST -Y,R14
233.16 00000086 92FA ST -Y,R15
233.17 00000088 930A ST -Y,R16
233.18 0000008A 931A ST -Y,R17
233.19 0000008C 932A ST -Y,R18
233.20 0000008E 933A ST -Y,R19
233.21 00000090 934A ST -Y,R20
233.22 00000092 935A ST -Y,R21
233.23 00000094 936A ST -Y,R22
233.24 00000096 937A ST -Y,R23
233.25 00000098 938A ST -Y,R24
233.26 0000009A 939A ST -Y,R25
233.27 0000009C 93AA ST -Y,R26
233.28 0000009E 93BA ST -Y,R27
233.29 000000A0 93EA ST -Y,R30
233.30 000000A2 93FA ST -Y,R31
233.31 000000A4 B70B IN R16,RAMPZ
233.32 000000A6 930A ST -Y,R16
233.33 000000A8 ENDM
234 000000A8 PUSHSREG
234.1 000000A8 B70F IN R16,SREG
234.2 000000AA 930A ST -Y,R16
234.3 000000AC ENDM
235 000000AC PUSHSP
235.1 000000AC B70E IN R16,SPH
235.2 000000AE 930A ST -Y,R16
235.3 000000B0 B70D IN R16,SPL
235.4 000000B2 930A ST -Y,R16
235.5 000000B4 ENDM
236 000000B4
237 000000B4 91E0.... LDS R30,OSTCBCur
; Z =
OSTCBCur->OSTCBSt
kPtr
238 000000B8 91F0.... LDS R31,OSTCBCur+1
;
239 000000BC 93C1 ST Z+,R28
; Save Y
(R29:R28)
pointer
240 000000BE 93D1 ST Z+,R29
;
241 000000C0
242 000000C0 ........ CALL OSTaskSwHook
; Call user defined task switch hook
243 000000C4
244 000000C4 9100.... LDS R16,OSPrioHighRdy
; OSPrioCur
= OSPrioHighRdy
245 000000C8 9300.... STS OSPrioCur,R16
246 000000CC
247 000000CC 91E0.... LDS R30,OSTCBHighRdy
; Let Z
point to TCB of
highest priority
task
248 000000D0 91F0.... LDS R31,OSTCBHighRdy+1
; ready to
run
249 000000D4 93E0.... STS OSTCBCur,R30
;
OSTCBCur =
OSTCBHighRdy
250 000000D8 93F0.... STS OSTCBCur+1,R31
;
251 000000DC
252 000000DC 91C1 LD R28,Z+
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -