os_cpu_a.lst
来自「称植到lpc2124上的UCOS2.85版 是本人初学移植和ARM的成果 可」· LST 代码 · 共 825 行 · 第 1/3 页
LST
825 行
177 00000034 ; OSTCBHighRdy points to the OS_TCB of the
task to resume
178 00000034 ;*******************************************************
**************************************************
179 00000034 IF (ASM_KEILRV > 0)
180 00000034 PRESERVE8
181 00000034
182 00000034 AREA |.text|, CODE, READONLY
183 00000034 ARM
184 00000034 ELSE
187 ENDIF
188 00000034
189 00000034 OSCtxSw
190 00000034 ; SAVE CURRENT TASK'S CONTEXT
191 00000034 E92D4000 STMFD SP!, {LR} ; Push return a
ddress
192 00000038 E92D5FFF STMFD SP!, {R0-R12, LR} ; Push re
gisters
193 0000003C E10F4000 MRS R4, CPSR ; Push current
CPSR
194 00000040 E31E0001 TST LR, #1 ; See if called
from Thumb mode
195 00000044 13844020 ORRNE R4, R4, #T_BIT ; If yes, S
et the T-bit
196 00000048 E92D0010 STMFD SP!, {R4}
197 0000004C
198 0000004C OSCtxSw1
199 0000004C E59F4084 LDR R4, OS_TCBCur ; OSTCBCur->OSTCB
StkPtr = SP;
200 00000050 E5945000 LDR R5, [R4]
201 00000054 E585D000 STR SP, [R5]
202 00000058
203 00000058 IF (OS_TASK_SW_HOOK >= 1)
207 ENDIF
208 00000058
209 00000058 E59F406C LDR R4, OS_PrioCur ; OSPrioCur = OS
PrioHighRdy
210 0000005C E59F506C LDR R5, OS_PrioHighRdy
211 00000060 E5D56000 LDRB R6, [R5]
212 00000064 E5C46000 STRB R6, [R4]
213 00000068
214 00000068 E59F4068 LDR R4, OS_TCBCur ; OSTCBCur = OST
CBHighRdy;
215 0000006C E59F6068 LDR R6, OS_TCBHighRdy
216 00000070 E5966000 LDR R6, [R6]
217 00000074 E5846000 STR R6, [R4]
218 00000078
219 00000078 OSCtxSw2
220 00000078 ;-------------------------------------------------------
--------------------------
ARM Macro Assembler Page 6
221 00000078 ;LDR SP, [R6] ; SP = OSTCBHighRdy->OS
TCBStkPtr;
222 00000078 ; RESTORE NEW TASK'S CONTEXT
223 00000078 ;LDMFD SP!, {R4} ; Pop new task's CPS
R
224 00000078 ;MSR CPSR_cxsf, R4 ; has CPSR only at SYS mode
225 00000078 ;LDMFD SP!, {R0-R12,LR,PC} ; pop new task's con
text
226 00000078 ;-------------------------------------------------------
--------------------------
227 00000078
228 00000078 E5964000 LDR R4, [R6] ; R4(SP) = OSTCBHig
hRdy->OSTCBStkPtr;
229 0000007C E284D040 ADD SP, R4, #16*4 ; Adjust SYS stac
k pointer
230 00000080 E51DE008 LDR LR, [SP, #-2*4] ; get new task'
s register LR_sys
231 00000084
232 00000084 E321F0DB MSR CPSR_c, #(I_BIT | F_BIT | ARM_M
ODE_UNDEF)
; Switch to UNDEF m
ode
233 00000088 E1A0D004 MOV SP, R4
234 0000008C ; RESTORE NEW TASK'S CONTEXT
235 0000008C E8BD0010 LDMFD SP!, {R4} ; Pop new task's
CPSR
236 00000090 E16FF004 MSR SPSR_cxsf, R4 ; has SPSR only a
t UNDEF mode
237 00000094 E8FDDFFF LDMFD SP!, {R0-R12,LR,PC}^ ; pop n
ew task's context
238 00000098
239 00000098
240 00000098 ;*******************************************************
**************************************************
241 00000098 ; PERFORM A CONTEXT SWITCH (From inter
rupt level) - OSIntCtxSw()
242 00000098 ;
243 00000098 ; Note(s) : 1) OSIntCtxSw() is called in SYS mode with B
OTH FIQ and IRQ interrupts DISABLED
244 00000098 ;
245 00000098 ; 2) The pseudo-code for OSCtxSw() is:
246 00000098 ; a) OSTaskSwHook();
247 00000098 ; b) OSPrioCur = OSPrioHighRdy;
248 00000098 ; c) OSTCBCur = OSTCBHighRdy;
249 00000098 ; d) SP = OSTCBHighRdy->
OSTCBStkPtr;
250 00000098 ; e) Restore the new task's context from th
e new task's stack
251 00000098 ; f) Return to new task's code
252 00000098 ;
253 00000098 ; 3) Upon entry:
254 00000098 ; OSTCBCur points to the OS_TCB of the
task to suspend
255 00000098 ; OSTCBHighRdy points to the OS_TCB of the
task to resume
256 00000098 ;*******************************************************
**************************************************
257 00000098 IF (ASM_KEILRV > 0)
ARM Macro Assembler Page 7
258 00000098 PRESERVE8
259 00000098
260 00000098 AREA |.text|, CODE, READONLY
261 00000098 ARM
262 00000098 ELSE
265 ENDIF
266 00000098
267 00000098 OSIntCtxSw
268 00000098 ;*******************************************************
*************
269 00000098 ; IRQ STACK <LOW> R4 R14 | SPSR R0 R1 R2 R3 R11 R12 LR(P
C) <HIGH>
270 00000098 ;*******************************************************
*************
271 00000098 ; SAVE TASK'S CONTEXT ONTO TASK'S STACK
272 00000098 ;ADD SP, SP, #2*4 ; Adjust IRQ stack pointer (OSIntExi
t=2*4)
273 00000098 ;LDMFD SP!, {R4, R14} ; Restore, See OSIntExit() @ os_
core.c
274 00000098
275 00000098 E28DD020 ADD SP, SP, #(0+8)*4 ; Adjust IRQ s
tack pointer
276 0000009C ; {R4,R14}=2*4, {SPSR, R0-R3, R11, R12, LR}=8*4
277 0000009C E24D000C SUB R0, SP, #3*4 ; R0->R11
278 000000A0
279 000000A0 E321F0DF MSR CPSR_c, #(I_BIT | F_BIT | ARM_M
ODE_SYS)
; Switch to SYS mod
e
280 000000A4
281 000000A4
282 000000A4 E890000E LDMIA R0, {R1-R3} ; R11,R12,LR(PC)=>
R1,R2,R3
283 000000A8 E2400014 SUB R0, R0, #5*4 ; Moving (SPSR, R
3-R0)
284 000000AC E92D0008 STMFD SP!, {R3} ; R3(PC)=>[SP]
285 000000B0 E92D4006 STMFD SP!, {R1-R2, LR} ; R1(R11),R2(R
12),LR=>[SP]
286 000000B4 E92D07F0 STMFD SP!, {R4-R10} ; R4-R10=>[SP]
287 000000B8
288 000000B8 E89001F0 LDMIA R0, {R4-R8}
; SPSR,R0-R3=>R4-R8
289 000000BC E92D01F0 STMFD SP!, {R4-R8} ; R4(SPSR),R5-R8(R
0-R3)=>[SP]
290 000000C0
291 000000C0 EAFFFFE1 B OSCtxSw1
292 000000C4
293 000000C4 ;*******************************************************
**************************************************
294 000000C4 ; POINTERS TO VARIAB
LES
295 000000C4 ;*******************************************************
**************************************************
296 000000C4
297 000000C4 IF (OS_TASK_SW_HOOK >= 1)
300 ENDIF
301 000000C4
302 000000C4 OS_IntExit
ARM Macro Assembler Page 8
303 000000C4 00000000 DCD OSIntExit
304 000000C8
305 000000C8 OS_IntNesting
306 000000C8 00000000 DCD OSIntNesting
307 000000CC
308 000000CC OS_PrioCur
309 000000CC 00000000 DCD OSPrioCur
310 000000D0
311 000000D0 OS_PrioHighRdy
312 000000D0 00000000 DCD OSPrioHighRdy
313 000000D4
314 000000D4 OS_Running
315 000000D4 00000000 DCD OSRunning
316 000000D8
317 000000D8 OS_TCBCur
318 000000D8 00000000 DCD OSTCBCur
319 000000DC
320 000000DC OS_TCBHighRdy
321 000000DC 00000000 DCD OSTCBHighRdy
322 000000E0
323 000000E0 END
Command Line: --debug --xref --device=DARMP --apcs=interwork -o.\os_cpu_a.o -IE
:\安装盘\Keil\ARM\INC\Philips --list=.\os_cpu_a.lst ..\AVR\os_cpu_a.asm
ARM Macro Assembler Page 1 Alphabetic symbol ordering
Relocatable symbols
.text 00000000
Symbol: .text
Definitions
At line 95 in file ..\AVR\os_cpu_a.asm
Uses
None
Comment: .text unused
OSCtxSw 00000034
Symbol: OSCtxSw
Definitions
At line 189 in file ..\AVR\os_cpu_a.asm
Uses
At line 54 in file ..\AVR\os_cpu_a.asm
Comment: OSCtxSw used once
OSCtxSw1 0000004C
Symbol: OSCtxSw1
Definitions
At line 198 in file ..\AVR\os_cpu_a.asm
Uses
At line 291 in file ..\AVR\os_cpu_a.asm
Comment: OSCtxSw1 used once
OSCtxSw2 00000078
Symbol: OSCtxSw2
Definitions
At line 219 in file ..\AVR\os_cpu_a.asm
Uses
At line 158 in file ..\AVR\os_cpu_a.asm
Comment: OSCtxSw2 used once
OSIntCtxSw 00000098
Symbol: OSIntCtxSw
Definitions
At line 267 in file ..\AVR\os_cpu_a.asm
Uses
At line 55 in file ..\AVR\os_cpu_a.asm
Comment: OSIntCtxSw used once
OSStartHighRdy 00000018
Symbol: OSStartHighRdy
Definitions
At line 133 in file ..\AVR\os_cpu_a.asm
Uses
At line 53 in file ..\AVR\os_cpu_a.asm
Comment: OSStartHighRdy used once
OS_CPU_SR_Restore 00000010
Symbol: OS_CPU_SR_Restore
Definitions
At line 109 in file ..\AVR\os_cpu_a.asm
Uses
At line 52 in file ..\AVR\os_cpu_a.asm
Comment: OS_CPU_SR_Restore used once
OS_CPU_SR_Save 00000000
Symbol: OS_CPU_SR_Save
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?