📄 os_cpu_a.lst
字号:
ARM Macro Assembler Page 1
1 00000000
2 00000000 EXTERN OSRunning ; External referenc
es
3 00000000 EXTERN OSPrioCur
4 00000000 EXTERN OSPrioHighRdy
5 00000000 EXTERN OSTCBCur
6 00000000 EXTERN OSTCBHighRdy
7 00000000 EXTERN OSIntNesting
8 00000000 EXTERN OSIntExit
9 00000000 EXTERN OSTaskSwHook
10 00000000
11 00000000
12 00000000 EXPORT OS_CPU_SR_Save ; Functions decl
ared in this file
13 00000000 EXPORT OS_CPU_SR_Restore
14 00000000 EXPORT OSStartHighRdy
15 00000000 EXPORT OSCtxSw
16 00000000 EXPORT OSIntCtxSw
17 00000000
18 00000000
19 00000000 AREA |.text|, CODE, READONLY, ALIGN=
2
20 00000000 THUMB
21 00000000 REQUIRE8
22 00000000 PRESERVE8
23 00000000
24 00000000 ;************************************
25 00000000 ;保存和恢复中断屏蔽寄存器子函数定义
26 00000000 ;************************************
27 00000000
28 00000000 OS_CPU_SR_Save
29 00000000 F3EF 8010 MRS R0, PRIMASK ; Set prio int mask
to mask all (excep
t faults)
30 00000004 B672 CPSID I
31 00000006 4770 BX LR
32 00000008
33 00000008
34 00000008 OS_CPU_SR_Restore
35 00000008 F380 8810 MSR PRIMASK, R0
36 0000000C 4770 BX LR
37 0000000E
38 0000000E
39 0000000E ;************************************
40 0000000E ;启动多任务
41 0000000E ;************************************
42 0000000E
43 0000000E OSStartHighRdy
44 0000000E 4841 LDR R0, __OS_TaskSwHook
; OSTaskSwHook();
45 00000010 4780 BLX R0
46 00000012
47 00000012 4845 LDR R0, __OS_Running
; OSRunning = TRUE;
48 00000014 2101 MOVS R1, #1
49 00000016 7001 STRB R1, [R0]
50 00000018
51 00000018 ; SWITCH TO HIGHEST PRIORITY TASK:
ARM Macro Assembler Page 2
52 00000018 4845 LDR R0, __OS_TCBHighRdy ; Get hig
hest priority task
TCB address,
53 0000001A 6801 LDR R1, [R0] ; Get stack point
er,
54 0000001C 680A LDR R2, [R1]
55 0000001E F382 8808 MSR MSP, R2 ; Switch to the n
ew stack,
56 00000022
57 00000022 BCFF POP {R0-R7} ; Pop new task's
R8-R11 (into R0-R3)
, R4-R7
58 00000024 4680 MOV R8, R0
59 00000026 4689 MOV R9, R1
60 00000028 4692 MOV R10, R2
61 0000002A 469B MOV R11, R3
62 0000002C
63 0000002C ; NORMAL FUNCTION RETURN (see Note #2)
64 0000002C B004 ADD SP, #0x10
65 0000002E BC0F POP {R0-R3} ; Pop new task's
R12, PC, LR, PSR in
to (R0, R1, R2, R3,
respectively)
66 00000030 4684 MOV R12, R0
67 00000032 468E MOV LR, R1
68 00000034 F383 8803 MSR PSR, R3
69 00000038
70 00000038 B404 PUSH {R2} ; Save PC
71 0000003A
72 0000003A B087 SUB SP, #0x1C
73 0000003C BC0F POP {R0-R3} ; Pop new task's
R0-R3
74 0000003E B003 ADD SP, #0x0C
75 00000040
76 00000040 B662 CPSIE I ; Enable interrup
ts
77 00000042
78 00000042 BD00 POP {PC} ; Pop new task's
PC
79 00000044
80 00000044
81 00000044
82 00000044 ;************************************
83 00000044 ;任务级别下的任务切换
84 00000044 ;************************************
85 00000044
86 00000044 OSCtxSw
87 00000044 B672 CPSID I
88 00000046 B084 SUB SP,#0x10
89 00000048 B40F PUSH {R0-R3}
90 0000004A
91 0000004A B008 ADD SP,#0x20
92 0000004C F3EF 8303 MRS R3, PSR
93 00000050 4672 MOV R2, LR
94 00000052 4671 MOV R1, LR
95 00000054 4660 MOV R0, R12
96 00000056 B40F PUSH {R0-R3}
97 00000058
98 00000058 B084 SUB SP, #0x10
ARM Macro Assembler Page 3
99 0000005A 4640 MOV R0, R8
100 0000005C 4649 MOV R1, R9
101 0000005E 4652 MOV R2, R10
102 00000060 465B MOV R3, R11
103 00000062 B4FF PUSH {R0-R7}
104 00000064
105 00000064
106 00000064 F3EF 8008 MRS R0, MSP
107 00000068 4930 LDR R1, __OS_TCBCur ; OSTCBCur->OST
CBStkPtr = SP;
108 0000006A 6809 LDR R1, [R1]
109 0000006C 6008 STR R0, [R1]
110 0000006E
111 0000006E 4829 LDR R0, __OS_TaskSwHook
; OSTaskSwHook();
112 00000070 4780 BLX R0
113 00000072
114 00000072 482B LDR R0, __OS_PrioCur ; OSPrioCur =
OSPrioHighRdy;
115 00000074 492B LDR R1, __OS_PrioHighRdy
116 00000076 780A LDRB R2, [R1]
117 00000078 7002 STRB R2, [R0]
118 0000007A
119 0000007A 482C LDR R0, __OS_TCBCur ; OSTCBCur = O
STCBHighRdy;
120 0000007C 492C LDR R1, __OS_TCBHighRdy
121 0000007E 680A LDR R2, [R1]
122 00000080 6002 STR R2, [R0]
123 00000082
124 00000082 6810 LDR R0, [R2] ; SP = OSTCBHighRdy
->OSTCBStkPtr;
125 00000084 F380 8808 MSR MSP, R0
126 00000088
127 00000088 ; RESTORE TASK's CONTEXT
128 00000088 BCFF POP {R0-R7} ; Pop new task's
R8-R11 (into R0-R3)
, R4-R7
129 0000008A 4680 MOV R8, R0
130 0000008C 4689 MOV R9, R1
131 0000008E 4692 MOV R10, R2
132 00000090 469B MOV R11, R3
133 00000092
134 00000092 B004 ADD SP, #0x10
135 00000094 BC0F POP {R0-R3} ; Pop new task's
R12, PC, LR, PSR in
to (R0, R1, R2, R3,
respectively)
136 00000096 4684 MOV R12, R0
137 00000098 468E MOV LR, R1
138 0000009A F383 8803 MSR PSR, R3
139 0000009E
140 0000009E B404 PUSH {R2} ; Save PC
141 000000A0
142 000000A0 B087 SUB SP, #0x1C
143 000000A2 BC0F POP {R0-R3} ; Pop new task's
R0-R3
144 000000A4 B003 ADD SP, #0x0C
145 000000A6 B662 CPSIE I ; Enable interrup
ts
ARM Macro Assembler Page 4
146 000000A8 BD00 POP {PC}
147 000000AA BF00 NOP
148 000000AC
149 000000AC ;************************************
150 000000AC ;中断级别下的任务切换
151 000000AC ;************************************
152 000000AC
153 000000AC OSIntCtxSw
154 000000AC B672 CPSID I
155 000000AE B084 SUB SP,#0x10
156 000000B0 B40F PUSH {R0-R3}
157 000000B2
158 000000B2 B008 ADD SP,#0x20
159 000000B4 F3EF 8303 MRS R3, PSR
160 000000B8 4672 MOV R2, LR
161 000000BA 4671 MOV R1, LR
162 000000BC 4660 MOV R0, R12
163 000000BE B40F PUSH {R0-R3}
164 000000C0
165 000000C0 B084 SUB SP, #0x10
166 000000C2 4640 MOV R0, R8
167 000000C4 4649 MOV R1, R9
168 000000C6 4652 MOV R2, R10
169 000000C8 465B MOV R3, R11
170 000000CA B4FF PUSH {R0-R7}
171 000000CC
172 000000CC
173 000000CC F3EF 8008 MRS R0, MSP
174 000000D0 4916 LDR R1, __OS_TCBCur ; OSTCBCur->OST
CBStkPtr = SP;
175 000000D2 6809 LDR R1, [R1]
176 000000D4 6008 STR R0, [R1]
177 000000D6
178 000000D6 480F LDR R0, __OS_TaskSwHook
; OSTaskSwHook();
179 000000D8 4780 BLX R0
180 000000DA
181 000000DA 4811 LDR R0, __OS_PrioCur ; OSPrioCur =
OSPrioHighRdy;
182 000000DC 4911 LDR R1, __OS_PrioHighRdy
183 000000DE 780A LDRB R2, [R1]
184 000000E0 7002 STRB R2, [R0]
185 000000E2
186 000000E2 4812 LDR R0, __OS_TCBCur ; OSTCBCur = O
STCBHighRdy;
187 000000E4 4912 LDR R1, __OS_TCBHighRdy
188 000000E6 680A LDR R2, [R1]
189 000000E8 6002 STR R2, [R0]
190 000000EA
191 000000EA 6810 LDR R0, [R2] ; SP = OSTCBHighRdy
->OSTCBStkPtr;
192 000000EC F380 8808 MSR MSP, R0
193 000000F0
194 000000F0 ; RESTORE TASK's CONTEXT
195 000000F0 BCFF POP {R0-R7} ; Pop new task's
R8-R11 (into R0-R3)
, R4-R7
196 000000F2 4680 MOV R8, R0
197 000000F4 4689 MOV R9, R1
ARM Macro Assembler Page 5
198 000000F6 4692 MOV R10, R2
199 000000F8 469B MOV R11, R3
200 000000FA
201 000000FA B004 ADD SP, #0x10
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -