?? os_cpu_a.lst
字號:
ARM Macro Assembler Page 1
1 00000000 AREA |subr|, CODE, READONLY
2 00000000 IMPORT OSRunning ; EXTERNAL referenc
es
3 00000000 IMPORT OSPrioCur
4 00000000 IMPORT OSPrioHighRdy
5 00000000 IMPORT OSTCBCur
6 00000000 IMPORT OSTCBHighRdy
7 00000000 IMPORT OSIntNesting
8 00000000 IMPORT OSIntExit
9 00000000 IMPORT OSTaskSwHook
10 00000000 IMPORT OSIntEnter
11 00000000 IMPORT OSTimeTick
12 00000000
13 00000000 EXPORT OS_CPU_SR_Save ; Functions decl
ared in this file
14 00000000 EXPORT OS_CPU_SR_Restore
15 00000000 EXPORT OSStartHighRdy
16 00000000 EXPORT OSCtxSw
17 00000000 EXPORT OSIntCtxSw
18 00000000 EXPORT OSTickISR
19 00000000 EXPORT OSIntISR
20 00000000
21 00000000 00000000
OSIntCtxSwFlag
DCD 0x00000000
22 00000004 00000000
SAVED_LR_SVC
DCD 0x00000000 ; some variables fo
r temparal use
23 00000008 00000000
SAVED_LR_IRQ
DCD 0x00000000
24 0000000C 00000000
SAVED_SPSR
DCD 0x00000000
25 00000010
26 00000010 000000C0
NO_INT EQU 0xC0 ; Mask used to disa
ble interrupts (Bot
h FIR and IRQ)
27 00000010 0000001F
SYS32_MODE
EQU 0x1F
28 00000010 00000011
FIQ32_MODE
EQU 0x11
29 00000010 00000012
IRQ32_MODE
EQU 0x12
30 00000010
31 00000010 OS_CPU_SR_Save
32 00000010 E10F0000 MRS R0,CPSR ; Set IRQ and FIQ b
its in CPSR to disa
ble all interrupts
33 00000014 E38010C0 ORR R1,R0,#NO_INT ;0XC0
34 00000018 E121F001 MSR CPSR_c,R1
35 0000001C E10F1000 MRS R1,CPSR ; Confirm that CPSR
contains the prope
r interrupt disable
ARM Macro Assembler Page 2
flags
36 00000020 E20110C0 AND R1,R1,#NO_INT
37 00000024 E35100C0 CMP R1,#NO_INT
38 00000028 1AFFFFFE BNE OS_CPU_SR_Save ; Not properly d
isabled (try again)
39 0000002C E1A0F00E MOV PC,LR ; Disabled, return
the original CPSR c
ontents in R0
40 00000030 OS_CPU_SR_Restore
41 00000030 E121F000 MSR CPSR_c,R0
42 00000034 E1A0F00E MOV PC,LR
43 00000038
44 00000038
45 00000038 OSStartHighRdy
46 00000038 PRESERVE8
47 00000038 EBFFFFFE BL OSTaskSwHook ; Call user-define
d hook function
48 0000003C
49 0000003C E59F412C LDR r4,=OSRunning ; Indicate that m
ultitasking has sta
rted
50 00000040 E3A05001 MOV r5, #1
51 00000044 E5C45000 STRB r5, [r4] ; OSRunning = true
52 00000048
53 00000048 E59F4124 LDR r4, =OSTCBHighRdy ; Get highest
priority task TCB
address
54 0000004C E5944000 LDR r4, [r4] ; get stack pointer
55 00000050 E594D000 LDR sp, [r4] ; switch to the new
stack
56 00000054
57 00000054 E8BD0010 LDMFD sp!, {r4} ; pop new task s sp
sr
58 00000058 E16FF004 MSR spsr_cxsf, r4
59 0000005C E8BD0010 LDMFD sp!, {r4} ; pop new task s ps
r
60 00000060 E12FF004 MSR cpsr_cxsf, r4
61 00000064 E8BDDFFF LDMFD sp!, {r0-r12,lr,pc} ; pop new t
ask s r0-r12,lr & p
c
62 00000068
63 00000068 OSCtxSw
64 00000068 E92D4000 STMFD sp!, {lr} ; push pc (lr is ac
tually be pushed in
place of PC)
65 0000006C E92D5FFF STMFD sp!, {r0-r12,lr} ; push lr & re
gister file
66 00000070 E10F4000 MRS r4, cpsr
67 00000074 E92D0010 STMFD sp!, {r4} ; push current psr
68 00000078 E14F4000 MRS r4, spsr
69 0000007C E92D0010 STMFD sp!, {r4} ; push current spsr
70 00000080
71 00000080 _OSCtxSw
72 00000080 E59F40F0 LDR r4, =OSPrioCur ; OSPrioCur = OS
PrioHighRdy
73 00000084 E59F50F0 LDR r5, =OSPrioHighRdy
ARM Macro Assembler Page 3
74 00000088 E5D56000 LDRB r6, [r5]
75 0000008C E5C46000 STRB r6, [r4]
76 00000090
77 00000090 E59F40E8 LDR r4, =OSTCBCur ; Get current tas
k TCB address
78 00000094 E5945000 LDR r5, [r4]
79 00000098 E585D000 STR sp, [r5] ; store sp in preem
pted tasks s TCB
80 0000009C
81 0000009C EBFFFFFE BL OSTaskSwHook ; call Task Switch
Hook
82 000000A0
83 000000A0 E59F60CC LDR r6, =OSTCBHighRdy ; Get highest
priority task TCB
address
84 000000A4 E5966000 LDR r6, [r6]
85 000000A8 E596D000 LDR sp, [r6] ; get new task s st
ack pointer
86 000000AC
87 000000AC E5846000 STR r6, [r4] ; set new current t
ask TCB address
88 000000B0
89 000000B0 E8BD0010 LDMFD sp!, {r4} ; pop new task spsr
90 000000B4 E16FF004 MSR spsr_cxsf, r4
91 000000B8 E8BD0010 LDMFD sp!, {r4} ; pop new task cpsr
92 000000BC E12FF004 MSR cpsr_cxsf, r4
93 000000C0 E8BDDFFF LDMFD sp!, {r0-r12,lr,pc} ; pop new t
ask r0-r12,lr & pc
94 000000C4
95 000000C4 OSIntCtxSw
96 000000C4 E59F00B8 LDR r0, =OSIntCtxSwFlag ; OSIntCtxS
wFlag = true
97 000000C8 E3A01001 MOV r1, #1
98 000000CC E5801000 STR r1, [r0]
99 000000D0 E1A0F00E MOV pc, lr ; return
100 000000D4
101 000000D4
102 000000D4 clear_irq
103 000000D4 E3E00000 MOV r0,#0xffffffff ;#0x400
104 000000D8 E3A0161E MOV r1,#0x1e00000
105 000000DC E5810024 STR r0,[r1,#0x24]
106 000000E0 E1A0F00E MOV pc,r14
107 000000E4
108 000000E4 OSTickISR
109 000000E4 OSISR
110 000000E4 OSIntISR
111 000000E4 E24EE004 SUB lr, lr, #4
112 000000E8 E92D5FFF STMFD sp!, {r0-r12, lr} ; push r0-r12
register file and
lr( pc return addre
ss )
113 000000EC E14F4000 MRS r4, spsr
114 000000F0 E92D0010 STMFD sp!, {r4} ; push current spsr
_irq ( =cpsr_svc )
115 000000F4
116 000000F4
117 000000F4 EBFFFFFE BL OSIntEnter
ARM Macro Assembler Page 4
118 000000F8 EBFFFFFE BL OSTimeTick
119 000000FC ; here do_IRQ is used to clear some virtual-hardware fla
gs
120 000000FC ;AND RELOAD THE TIMER
121 000000FC EBFFFFFE BL OSIntExit
122 00000100 ;bl clear_irq
123 00000100
124 00000100 ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
125 00000100 ;bl clear_irq
126 00000100 E3E00000 MOV r0,#0xffffffff ;#0x400 ;clea
r all irq flags!
127 00000104 E3A0161E MOV r1,#0x1e00000
128 00000108 E5810024 STR r0,[r1,#0x24]
129 0000010C ;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
130 0000010C E59F0070 LDR r0, =OSIntCtxSwFlag ; check if
OSIntCtxFlag is mar
ked as true
131 00000110 E5901000 LDR r1, [r0]
132 00000114 E3510001 CMP r1, #1
133 00000118
134 00000118 0A000002 BEQ _IntCtxSw ; if OSIntCtxFlag =
true, then jump to
_IntCtxSw
135 0000011C
136 0000011C E8BD0010 LDMFD sp!, {r4} ; get cpsr_svc from
stack
137 00000120 E16FF004 MSR spsr_cxsf, r4 ; prepare spsr to
return svc mode
138 00000124 E8FD9FFF LDMFD sp!, {r0-r12, pc}^ ; recover r0
-r12 and pc from st
ack, cpsr also
139 00000128
140 00000128
141 00000128 _IntCtxSw
142 00000128
143 00000128 E3A01000 MOV r1, #0 ; clear OSIntCtxSwF
lag = flase
144 0000012C E5801000 STR r1, [r0]
145 00000130
146 00000130 E8BD0010 LDMFD sp!, {r4} ; restore spsr_irq
147 00000134 E16FF004 MSR spsr_cxsf, r4
148 00000138 E50F4134 STR r4, SAVED_SPSR
149 0000013C E8BD5FFF LDMFD sp!, {r0-r12, lr} ; recover the
irq stack pointer
150 00000140
151 00000140 E50FE140 STR lr, SAVED_LR_IRQ ; save lr_irq
to SAVED_LR_IRQ
152 00000144 E3A0E0D3 MOV lr, #0x000000d3 ; change forcel
y cpsr to svc mode
153 00000148 E12FF00E MSR cpsr_cxsf, lr
154 0000014C E50FE150 STR lr, SAVED_LR_SVC ; save lr_svc
to SAVED_LR_SVC
155 00000150 E51FE150 LDR lr, SAVED_LR_IRQ ; get lr_irq v
alue saved in SAVED
_LR_IRQ
156 00000154 E92D4000 STMFD sp!, {lr} ; push future task
pc (lr_irq should b
e pushed in place o
ARM Macro Assembler Page 5
f PC)
157 00000158 E51FE15C LDR lr, SAVED_LR_SVC ; get lr_svc v
alue saved in SAVED
_LR_SVC
158 0000015C E92D5FFF STMFD sp!, {r0-r12,lr} ; push lr & r0
-r12 register file
159 00000160 E51F415C LDR r4, SAVED_SPSR
160 00000164 ;MRS r4, spsr
161 00000164 E92D0010 STMFD sp!, {r4} ; push current psr
162 00000168
163 00000168 ;MRS r4, spsr
164 00000168 E92D0010 STMFD sp!, {r4} ; push spsr
165 0000016C
166 0000016C EAFFFFC3 B _OSCtxSw ; jump to _OSCtxSw
167 00000170
168 00000170
169 00000170 END
00000000
00000000
00000000
00000000
00000000
00000000
Command Line: --debug --xref --device=DARMS --apcs=interwork -o.\obj\Os_cpu_a.o
-IC:\Keil\ARM\INC\Samsung --list=.\lst\Os_cpu_a.lst Port\Os_cpu_a.s
ARM Macro Assembler Page 1 Alphabetic symbol ordering
Relocatable symbols
OSCtxSw 00000068
Symbol: OSCtxSw
Definitions
At line 63 in file Port\Os_cpu_a.s
Uses
At line 16 in file Port\Os_cpu_a.s
Comment: OSCtxSw used once
OSISR 000000E4
Symbol: OSISR
Definitions
At line 109 in file Port\Os_cpu_a.s
Uses
None
Comment: OSISR unused
OSIntCtxSw 000000C4
Symbol: OSIntCtxSw
Definitions
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -