1 | =====================================================================
|
---|
2 | ARM-Mããã»ããµä¾åé¨è¨è¨ã¡ã¢
|
---|
3 | Last Modified:2015 Nov 23 08:57:56
|
---|
4 | =====================================================================
|
---|
5 |
|
---|
6 | âãã®ããã¥ã¡ã³ãã®ä½ç½®ã¥ã
|
---|
7 |
|
---|
8 | ãã®ããã¥ã¡ã³ãã¯ï¼TOPPERS/ASPã«ã¼ãã«ãARMvX-Mããã»ããµã«ç§»æ¤ãããã
|
---|
9 | ã®è¨è¨ã¡ã¢ã§ããï¼
|
---|
10 |
|
---|
11 |
|
---|
12 | âARMVx-Mã®ä»æ§ã¾ã¨ã(FPU以å¤)
|
---|
13 |
|
---|
14 | ARMvX-Mã®ä»æ§ã®ãã¡ï¼ã«ã¼ãã«ã®è¨è¨ã«é¢ä¿ããäºé
|
---|
15 | ã«ã¤ãã¦ï¼ã¾ãARMv7-M
|
---|
16 | ã«ã¤ãã¦ã¾ã¨ããï¼ARMv6-Mã¯æå¾ã«ARMv7-Mã¨ã®å·®åã¨ãã¦èª¬æããï¼
|
---|
17 |
|
---|
18 | âåèè³æ
|
---|
19 |
|
---|
20 | ARMv7-M Architecture Reference Manual E.b
|
---|
21 | DDI0403E_B_armv7m_arm.pdf
|
---|
22 |
|
---|
23 | âã¬ã¸ã¹ã¿
|
---|
24 |
|
---|
25 | æ±ç¨ã¬ã¸ã¹ã¿ã¯R0ï½R15ã®16種é¡ããï¼R13ã®ã¿ã2ãã³ã¯æ§æï¼PSP,MSPï¼ã¨ãª
|
---|
26 | ã£ã¦ããï¼R15ã¯PC, R14ã¯ãªã³ã¯ã¬ã¸ã¹ã¿ï¼LRï¼ã¨ãªã£ã¦ããï¼R0ï½R3,R12ã¯
|
---|
27 | ã¹ã¯ã©ããã¬ã¸ã¹ã¿ã§ããï¼
|
---|
28 |
|
---|
29 | âã³ã¼ãªã³ã°ã³ã³ãã³ã·ã§ã³
|
---|
30 |
|
---|
31 | R0ï½R4ãå¼æ°ï¼ãã以ä¸ã¯ã¹ã¿ãã¯ï¼æ»ãå¤ã¯ï¼R0ï½R1ã«æ ¼ç´ãããï¼(ARMã«
|
---|
32 | ããè¦å®ããã¦ããããï¼ã³ã³ãã¤ã©ã«ä¾åãããã®ã«ã¼ã«ã¨ãªãï¼)
|
---|
33 |
|
---|
34 | âCONTROLã¬ã¸ã¹ã¿
|
---|
35 |
|
---|
36 | PSP,MSPã®åãæ¿ãï¼Privilageã¨Userã¢ã¼ãã®ã¬ã¸ã¹ã¿ï¼å¤æ´å¾ã¯ï¼ã¤ã³ã¹ã
|
---|
37 | ã©ã¯ã·ã§ã³ãããã¡ãã©ãã·ã¥å½ä»¤ãå®è¡ããå¿
|
---|
38 | è¦ãããï¼isbï¼ï¼CONTROLã¬
|
---|
39 | ã¸ã¹ã¿ã®è©³ç´°ã¯ï¼ARMv7-M Architecture Application Level Reference
|
---|
40 | Manual ã® B1-9 ãåç
|
---|
41 | §ã®ãã¨ï¼
|
---|
42 |
|
---|
43 | âå²è¾¼ã¿ãã¯ã¿
|
---|
44 |
|
---|
45 | ãã¯ã¿ãã¼ãã«åã§ï¼ãã¯ã¿ãã¼ãã«ã®ã¢ãã¬ã¹ã¯ï¼ãªã»ããæã¯0x00ã§ï¼
|
---|
46 | Vector Table Offset Registerï¼ã¡ã¢ãªããããã¬ã¸ã¹ã¿ï¼ ãæä½ãããã¨
|
---|
47 | ã§ï¼ä»»æã®ã¢ãã¬ã¹ã«é
|
---|
48 | ç½®å¯è½ã§ããï¼
|
---|
49 |
|
---|
50 | âåªå
|
---|
51 | 度
|
---|
52 |
|
---|
53 | å¤ãå°ããæ¹ãé«åªå
|
---|
54 | 度ã¨ãªãï¼0ãæé«åªå
|
---|
55 | 度ã¨ãªãï¼ä¸æ¹ï¼å¾è¿°ãããã
|
---|
56 | ã»ããµã®å²è¾¼ã¿åªå
|
---|
57 | 度ãè¨å®ããBASEPRIã¬ã¸ã¹ã¿ã¯'0'ãã»ããããã¨ï¼å
|
---|
58 | ¨ã¦
|
---|
59 | ã®å²è¾¼ã¿ã許å¯ããããï¼æé«åªå
|
---|
60 | 度ã¯ï¼æå¹ãªãããã®LSBã'1'ã¨ããå¤ã§
|
---|
61 | ããï¼3bitã®å ´åã¯0x20ï¼ï¼ã¾ãï¼å²è¾¼ã¿ã®åªå
|
---|
62 | 度ã«'0'ãè¨å®ããã¨ï¼
|
---|
63 | BASEPRIã¬ã¸ã¹ã¿ã§ãã¹ã¯ã§ããªãå²è¾¼ã¿ã¨ãªãï¼
|
---|
64 |
|
---|
65 | åªå
|
---|
66 | 度ã¯æ大8bitã§ããï¼SoCæ¯ã«å®è£
|
---|
67 | ããã¦ãããããå¹
|
---|
68 | ãç°ãªãï¼å®è£
|
---|
69 | ã
|
---|
70 | ãããããã8bit以ä¸ã®å ´åã¯ï¼LSBããç¡å¹ã«ãªãï¼ä¾ãã°ï¼å®è£
|
---|
71 | ããã¦ã
|
---|
72 | ããããå¹
|
---|
73 | ã7bitã®å ´åã¯ï¼ããã0ãç¡å¹ã¨ãªãï¼
|
---|
74 |
|
---|
75 | åªå
|
---|
76 | 度ã®ããããã£ã¼ã«ãã®LSBããæ°ãããããµãåªå
|
---|
77 | 度ã¨å¼ã¶ãã£ã¼ã«ã
|
---|
78 | ã«è¨å®ãããã¨ãå¯è½ã§ããï¼æ®ãã®ä¸ä½ããããããªã¨ã³ãã·ã§ã³åªå
|
---|
79 | 度ã¨
|
---|
80 | å¼ã¶ï¼ããªã¨ã³ãã·ã§ã³åªå
|
---|
81 | 度ãåãã§ï¼ãµãåªå
|
---|
82 | 度ãç°ãªãåªå
|
---|
83 | 度ã®ã°ã«ã¼
|
---|
84 | ãã¯ï¼ãäºããããªã¨ã³ãããããã¨ãã§ããªãï¼
|
---|
85 |
|
---|
86 | Reset,NMI,Hard Fault 以å¤ã®ä¾å¤ã¯å²è¾¼ã¿ã¨åæ§ã«åªå
|
---|
87 | 度ãè¨å®å¯è½ã§ããï¼
|
---|
88 | å²è¾¼ã¿ãã¹ã¯æ©è½ã«ããï¼çºçãç¦æ¢ãããã¨ãå¯è½ã§ããï¼
|
---|
89 |
|
---|
90 |
|
---|
91 | âCPUã¢ã¼ã
|
---|
92 |
|
---|
93 | ããã»ããµã¯ï¼Threadã¢ã¼ããããã¯Handlerã¢ã¼ãã®ããããã®ã¢ã¼ãã¨ãª
|
---|
94 | ãï¼
|
---|
95 |
|
---|
96 | âãªã»ããæã®ç¶æ
|
---|
97 |
|
---|
98 |
|
---|
99 | ãªã»ããæã¯Threadã¢ã¼ãï¼MSPãæå¹ã¨ãªã£ã¦ããï¼
|
---|
100 |
|
---|
101 | âHandlerã¢ã¼ã
|
---|
102 |
|
---|
103 | ä¾å¤/å²è¾¼ã¿ãåãä»ããã¨é·ç§»ããã¢ã¼ãï¼åãä»ããä¾å¤/å²è¾¼ã¿ã®ä¾å¤çª
|
---|
104 | å·ãï¼IPSRã«ã»ãããããï¼ä¾å¤çªå·ã¯ï¼TRMã§å®ãããã¦ããçªå·ã§ããï¼
|
---|
105 |
|
---|
106 | ä¾å¤ ä¾å¤çªå·
|
---|
107 | Reset 1
|
---|
108 | Non-makable Interrupt 2
|
---|
109 | Hard Fault 3
|
---|
110 | Memory Management 4
|
---|
111 | Bus Fault 5
|
---|
112 | Usage Fault 6
|
---|
113 | SVCall 11
|
---|
114 | Debug Monitor 12
|
---|
115 | PendSV 14
|
---|
116 | SysTick 15
|
---|
117 | IRQ0 16
|
---|
118 | IRQ1 17
|
---|
119 | ..
|
---|
120 |
|
---|
121 | ä¾å¤/å²è¾¼ã¿ãåãä»ããã¨ï¼åãä»ããä¾å¤/å²è¾¼ã¿ã®åªå
|
---|
122 | 度以ä¸ã®ä¾å¤/å²
|
---|
123 | è¾¼ã¿ãç¦æ¢ããï¼ãã®åªå
|
---|
124 | 度ãã¹ã¯ã"NVICåªå
|
---|
125 | 度ãã¹ã¯"ã¨å¼ã¶ï¼ãã®åªå
|
---|
126 | 度
|
---|
127 | ã¯ï¼ã½ããã¦ã§ã¢ããå¤æ´ãããã¨ãã§ããï¼ä¾å¤/å²è¾¼ã¿ã®ãªã¿ã¼ã³ã«ãã
|
---|
128 | å²è¾¼ã¿åã®å¤ã«èªåçã«æ»ãï¼
|
---|
129 |
|
---|
130 | âã¹ã¿ãã¯ãã¤ã³ã¿ï¼PSPã¨MSPï¼
|
---|
131 |
|
---|
132 | ã¹ã¿ãã¯ãã¤ã³ã¿ã¯ï¼PSPã¨MSPãããï¼æä»çã«ä½¿ç¨å¯è½ã§ããï¼Handlerã¢
|
---|
133 | ã¼ãã§ã¯MSPã®ã¿ä½¿ç¨å¯è½ã§ããï¼Threadã¢ã¼ãã§ã¯CONTROLã¬ã¸ã¹ã¿ã§é¸æå¯
|
---|
134 | è½ã§ããï¼CONTROLã¬ã¸ã¹ã¿ã®1ãããç®ãã»ããããã¨PSPãæå¹ã«ï¼ã¯ãªã¢
|
---|
135 | ããã¨ï¼MSPãæå¹ã«ãªãï¼
|
---|
136 |
|
---|
137 | âThreadã¢ã¼ãã¨Handlerã¢ã¼ãã®é·ç§»
|
---|
138 |
|
---|
139 | Threadã¢ã¼ãããHandlerã¢ã¼ãã¸ã®é·ç§»ã¯ï¼ä¾å¤/å²è¾¼ã¿ãåãä»ãããã¨ã§
|
---|
140 | çºçããï¼ä¸æ¹ï¼Handlerã¢ã¼ãããThreadã¢ã¼ãã¸ã®é·ç§»ã¯ï¼PCã«
|
---|
141 | EXC_RETURN(0xfffffffx)ã®å¤ãè¨å®ãããã¨ã«ããè¡ãï¼ä¾å¤ãªã¿ã¼ã³å¦çã¨
|
---|
142 | å¼ã¶ï¼ï¼EXC_RETURNã®ä¸ä½4bitã«ããï¼é·ç§»å
|
---|
143 | ã®ã¢ã¼ãã使ç¨ããã¹ã¿ãã¯ã
|
---|
144 | ã¤ã³ã¿ãå¤æ´å¯è½ã§ããï¼ä¾å¤ãªã¿ã¼ã³ã«ããï¼PRIMASKãBASEPRIã®å¤ã¯å¤å
|
---|
145 | ããªãï¼ä¸æ¹ï¼FAULTMASKã®å¤ã¯'0'ã«ã¯ãªã¢ãããï¼
|
---|
146 |
|
---|
147 | âEXC_RETURN
|
---|
148 |
|
---|
149 | ä¾å¤/å²è¾¼ã¿åä»ãæã«lrã«è¨å®ãããå¤ï¼ããã31ï½4ãããã¯å
|
---|
150 | ¨ã¦'1'ã§ï¼
|
---|
151 | ä¸ä½4bitã¯ï¼åä»ãæã®CPUã¢ã¼ããã¹ã¿ãã¯ãåæ ããå¤ã¨ãªã£ã¦ããï¼
|
---|
152 |
|
---|
153 | 0b0001 : Handlerã¢ã¼ã
|
---|
154 | 0b1001 : Threadã¢ã¼ã with MSP
|
---|
155 | 0b1101 : Threadã¢ã¼ã with PSP
|
---|
156 |
|
---|
157 | âThreadã¢ã¼ãã¨Handlerã¢ã¼ãã®å¤å®
|
---|
158 |
|
---|
159 | ç¾ç¶ã®ã¢ã¼ããå¤å®ããã«ã¯ï¼IPSRãè¦ã¦ï¼'0'ãªãThreadã¢ã¼ãï¼ãã以å¤
|
---|
160 | ãªãï¼Handlerã¢ã¼ãã¨ãªãï¼
|
---|
161 |
|
---|
162 | âBASEPRIã¬ã¸ã¹ã¿
|
---|
163 |
|
---|
164 | è¨å®ããåªå
|
---|
165 | 度以ä¸ã®åªå
|
---|
166 | 度ã®å²è¾¼ã¿ã®åä»ãç¦æ¢ããï¼ãã®åªå
|
---|
167 | 度ãã¹ã¯ã
|
---|
168 | "BASEPRIåªå
|
---|
169 | 度ãã¹ã¯"ã¨å¼ã¶ï¼'0'ãè¨å®ããã¨ï¼å
|
---|
170 | ¨ã¦ã®å²è¾¼ã¿ã許å¯ããï¼
|
---|
171 | ä¾å¤/å²è¾¼ã¿ã®åä»ã¨ãªã¿ã¼ã³ã«ããå¤åããªãï¼ä¾å¤/å²è¾¼ã¿ã«å¯¾ããå²è¾¼ã¿
|
---|
172 | åªå
|
---|
173 | 度ãã¹ã¯ã¯ï¼NVICåªå
|
---|
174 | 度ãã¹ã¯ã¨BASEPRIã®è¨å®å¤ã®é«ãæ¹ï¼å¤ãå°ãã
|
---|
175 | æ¹ï¼ã¨ãªãï¼
|
---|
176 |
|
---|
177 | âFAULTMASK
|
---|
178 |
|
---|
179 | FAULTMASKã¯'1'ãã»ãããããã¨ã«ããï¼NMI以å¤ã®å
|
---|
180 | ¨ã¦ã®å²è¾¼ã¿ãç¦æ¢ããï¼
|
---|
181 | FAULTMASKã¯ï¼ä¾å¤ã®ãªã¿ã¼ã³å¦çã«ãã'0'ã«ã¯ãªã¢ãããï¼
|
---|
182 |
|
---|
183 | âPRIMASKã¨WFI
|
---|
184 |
|
---|
185 | PRIMASKã'1'ã«è¨å®ããã¨ï¼NMI 㨠Hardware Fault 以å¤ã®ä¾å¤/å²è¾¼ã¿ãç¦
|
---|
186 | æ¢ããï¼PRIMASKã¯å²è¾¼ã¿ã®è¨±å¯ã¨å²è¾¼ã¿å¾
|
---|
187 | ã¡ãã¢ãããã¯ã«è¡ãããã«ç¨ã
|
---|
188 | ãï¼å
|
---|
189 | ·ä½çã«ã¯ï¼PRIMASKãã»ããããã¦ããç¶æ
|
---|
190 | ã§wfiãå®è¡ããã¨ï¼å²ãè¾¼
|
---|
191 | ã¿å¾
|
---|
192 | ã¡ã¨ãªãï¼å²è¾¼ã¿åä»ããã¨ãã³ãã©ãå®è¡ããã«ï¼wfiãããªã¿ã¼ã³ã
|
---|
193 | ã¦ããï¼
|
---|
194 |
|
---|
195 | âä¾å¤/å²è¾¼ã¿ã®åä»
|
---|
196 |
|
---|
197 | ã»ä¾å¤/å²è¾¼ã¿ãåä»ããã¨ï¼åä»ãæã«ã¢ã¯ãã£ããªã¹ã¿ãã¯ä¸ã«ä»¥ä¸ã®ã³
|
---|
198 | ã³ããã¹ããä¿åãã(ä¾å¤ãã¬ã¼ã ã¨å¼ã¶)ï¼
|
---|
199 |
|
---|
200 | -----------
|
---|
201 | | R0 | <- new SP
|
---|
202 | -----------
|
---|
203 | | R1 |
|
---|
204 | -----------
|
---|
205 | | R2 |
|
---|
206 | -----------
|
---|
207 | | R3 |
|
---|
208 | -----------
|
---|
209 | | R12 |
|
---|
210 | -----------
|
---|
211 | | LR |
|
---|
212 | -----------
|
---|
213 | | PC |
|
---|
214 | -----------
|
---|
215 | | xPSR |
|
---|
216 | -----------
|
---|
217 | | | <- old SP
|
---|
218 |
|
---|
219 | ã»ããã»ããµãHandlerã¢ã¼ãã¨ããï¼MSPãæå¹ã¨ãªãï¼
|
---|
220 | ã»åä»ããä¾å¤/å²è¾¼ã¿ã®ä¾å¤çªå·ãIPSRã«è¨å®ããï¼
|
---|
221 | ã»NVICå²è¾¼ã¿åªå
|
---|
222 | 度ãã¹ã¯ãåä»ããä¾å¤/å²è¾¼ã¿ã®åªå
|
---|
223 | 度ã«è¨å®ããï¼
|
---|
224 | ã»lrã«EXC_RETURNã®å¤ãè¨å®ãããï¼
|
---|
225 | ã»ãã¯ã¿ãã¼ãã«ãèªã¿è¾¼ã¿ãã³ãã©ãå®è¡ããï¼
|
---|
226 | ã»ã¹ã¿ãã¯ãã¬ã¼ã ã¯ï¼Configureation and Control Register(CCR)ã®
|
---|
227 | STKALIGNã'1'ã®å ´åã¯ï¼8byteå¢çã«ã¢ã©ã¤ã³ãããï¼
|
---|
228 |
|
---|
229 | âä¾å¤/å²è¾¼ã¿ããã®ãªã¿ã¼ã³
|
---|
230 |
|
---|
231 | pcã«EXC_RETURNã®å¤ãè¨å®ãããã¨ã«ããï¼ä¾å¤/å²è¾¼ã¿ãããªã¿ã¼ã³ããï¼
|
---|
232 | pcã¸ã®è¨å®ã«ä½¿ç¨å¯è½ãªå½ä»¤ã«ã¯å¶éãããï¼ä»¥ä¸å½ä»¤ã使ç¨å¯è½ã§ããï¼
|
---|
233 |
|
---|
234 | ã»POP/LDM, LDR, BX
|
---|
235 |
|
---|
236 | âæªè§£æ±ºèª²é¡
|
---|
237 |
|
---|
238 | ã»ãã¯ã¿ã¼ãã¼ãã«ã«ç»é²ããé¢æ°ã®ã¢ãã¬ã¹ã®LSBã¯'1'ã«ããã¹ãã?
|
---|
239 | ã»NVICã¯ä¾å¤ã»å²è¾¼ã¿ã®ãã¹ãåæ°ãå
|
---|
240 | é¨çã«ç®¡çãã¦ãããããï¼
|
---|
241 | (!ãªãã¡ã¬ã³ã¹ãæããã«)ï¼
|
---|
242 | ã½ããã¦ã§ã¢ã§ã¯ï¼ãã¹ãã®å¸³å°»ãåãããã°ï¼ãªã¿ã¼ã³ã¹ã¿ãã¯ãå½é ã
|
---|
243 | ã¦ãåé¡ãªããï¼
|
---|
244 |
|
---|
245 | âstmfdã®å¶é
|
---|
246 |
|
---|
247 | stmfdã¯ã¬ã¸ã¹ã¿ãªã¹ãã1åã®å ´åã®åä½ã¯ä¸å®ã¨ãªã£ã¦ããï¼ãã®ããï¼ã¬
|
---|
248 | ã¸ã¹ã¿ãªã¹ãã1åã®è¨è¿°ãã¢ã»ã³ãã©ã«ããå ´åã¯ï¼ã¢ã»ã³ãã©ãstr.w ã«
|
---|
249 | å¤æãããï¼ã¢ã»ã³ãã©ã«ãã£ã¦ã¯ã¯ã¼ãã³ã°ãåºãããï¼ã¬ã¸ã¹ã¿ãªã¹ãã
|
---|
250 | 1åã®å ´åã¯ï¼str.wã使ç¨ããï¼
|
---|
251 |
|
---|
252 | ãªãï¼ldmfdã«ã¯ãã®å¶éããªãï¼
|
---|
253 |
|
---|
254 | âARMv6-M
|
---|
255 |
|
---|
256 | ã«ã¼ãã«ã®è¨è¨ã«å¯¾ãã¦ï¼ARMv6-Mã®ARMv7-Mã«å¯¾ããå·®åã¯æ¬¡ã®éãã§ããï¼
|
---|
257 |
|
---|
258 | ã»BASEPRIã¬ã¸ã¹ã¿
|
---|
259 | ARMv6-Mã§ã¯BASEPRIã¬ã¸ã¹ã¿ãæããªãï¼
|
---|
260 |
|
---|
261 | ã»FAULTMASK
|
---|
262 | ARMv6-Mã§ã¯FAULTMASKã¬ã¸ã¹ã¿ãæããªãï¼
|
---|
263 |
|
---|
264 | ã»å½ä»¤
|
---|
265 | ä¸é¨å½ä»¤ã使ç¨åºæ¥ãªãï¼
|
---|
266 | åãå½ä»¤ã§ãæå®å¯è½ãªã¬ã¸ã¹ã¿ã«å¶éããã
|
---|
267 |
|
---|
268 | ã»å¤é¨å²è¾¼ã¿æ°
|
---|
269 | æ大32å
|
---|
270 |
|
---|
271 |
|
---|
272 | âFPUé¢é£ã®ä»æ§
|
---|
273 |
|
---|
274 | âåèè³æ
|
---|
275 |
|
---|
276 | ARMv7-M Architecture Reference Manual E.b
|
---|
277 | DDI0403E_B_armv7m_arm.pdf
|
---|
278 |
|
---|
279 | ARM CortexR-M4 Processor Technical Reference Manual Revision: r0p1
|
---|
280 | arm_cortexm4_processor_trm_100166_0001_00_en.pdf
|
---|
281 |
|
---|
282 | Cortex-M4(F) Lazy Stacking and Context Switching Application Note 298
|
---|
283 | DAI0298A_cortex_m4f_lazy_stacking_and_context_switching.pdf
|
---|
284 |
|
---|
285 | âæ¦è¦
|
---|
286 |
|
---|
287 | Cortex-M4ã¯ARMv7E-Mããã¼ã¹ã¨ãã¦ããï¼FPUãµãã¼ãããå®è£
|
---|
288 | ã¨ãµãã¼ãã
|
---|
289 | ã¦ããªãå®è£
|
---|
290 | ãããï¼FPUããµãã¼ãããå®è£
|
---|
291 | ãCortex-M4Fã¨å¼ã¶ï¼
|
---|
292 | å¨ããï¼
|
---|
293 |
|
---|
294 | FPUã¯ARMv7E-M Floatng Point Extension(FPv4-SP)ããµãã¼ããã¦ããï¼
|
---|
295 |
|
---|
296 | FPv4-SPã¯æ¬¡ã®ä»æ§ã¨ãªã£ã¦ããï¼
|
---|
297 |
|
---|
298 | ã¬ã¸ã¹ã¿ : å精度ã¬ã¸ã¹ã¿ S0ï½S32 / å精度ã¬ã¸ã¹ã¿ D0ï½D15
|
---|
299 | D0ã¯(S0ã¨S1)ã¨ç価ï¼
|
---|
300 | å½ä»¤ : å精度å½ä»¤ããµãã¼ã
|
---|
301 |
|
---|
302 | âå¶å¾¡ã¬ã¸ã¹ã¿
|
---|
303 |
|
---|
304 | FPSCR : Floating-point Status and Control Register
|
---|
305 | ã»FPUã®ã¹ãã¼ã¿ã¹ã¨ã³ã³ããã¼ã«ãã£ã¼ã«ããæã¤
|
---|
306 |
|
---|
307 | CPACR : Coprocessor Access Control Register
|
---|
308 | ã»FPUãæå¹ã«ããå ´åã«ã»ããããå¿
|
---|
309 | è¦ããã
|
---|
310 |
|
---|
311 | FPCCR : Floating-point Context Control Register
|
---|
312 | ã»FPUé¢é£ã®ã³ã³ããã¹ãã®ä¿åæ¹æ³ãé¸æå¯è½
|
---|
313 |
|
---|
314 | FPCAR : Floating Point Context Address Register
|
---|
315 | ã»ä¾å¤ãã¬ã¼ã ã®FPUã¬ã¸ã¹ã¿ã®ä¿åã¢ãã¬ã¹(S0ã®ã¢ãã¬ã¹)ãä¿æï¼
|
---|
316 |
|
---|
317 | FPDSCR : Floating-point Default Status Control Register
|
---|
318 | ã»FPSCRã®ãã£ãã©ã«ãå¤ãä¿å
|
---|
319 | ã»FPUãåãã¦ä½¿ç¨ããå ´åã«[26:22]ãFPSCRã«ã³ãã¼ãããï¼
|
---|
320 |
|
---|
321 | CONTROLã®æ¡å¼µ
|
---|
322 | ã».FPCA(Bit[2])
|
---|
323 | ã»FPUã使ç¨ããã¨'1'ã«ã»ãããããï¼
|
---|
324 |
|
---|
325 | EXC_RETURNã®æ¡å¼µ
|
---|
326 |
|
---|
327 | EXC_RETURN[4]
|
---|
328 | '0' : FPUã®é åãã(ä¿åããã¦ãããã¯å¥ã®å¶å¾¡)
|
---|
329 | S0ï½S15ã¨FPSCRã®ããã®é åï¼
|
---|
330 | '1' : FPUã®é åãªã
|
---|
331 |
|
---|
332 | âABI
|
---|
333 |
|
---|
334 | S0ï½S15,FPSCR : caller saved registers
|
---|
335 | S16ï½S17 : callee saved registers
|
---|
336 |
|
---|
337 | âä¾å¤ã»å²è¾¼ã¿çºçæã®æ¯ãèã
|
---|
338 |
|
---|
339 | 詳細㯠ARMv7-M Architecture Reference Manual E.b㮠B1.5.6 Exception
|
---|
340 | entry behavior 㨠B1.5.8 Exception return behavior ãåç
|
---|
341 | §ã®ãã¨ï¼
|
---|
342 |
|
---|
343 | ã³ã³ããã¹ãã®ä¿åãã¿ã¼ã³
|
---|
344 | FPCCR
|
---|
345 | LSPEN ASPEN å称(æ¬ããã¥ã¡ã³ããªãªã¸ãã«)
|
---|
346 | 0 0 : NoAutomatic
|
---|
347 | 0 1 : DisableLazystacking
|
---|
348 | 1 1 : Lazystacking
|
---|
349 |
|
---|
350 | NoAutomatic
|
---|
351 | ã»èªåä¿åãªã
|
---|
352 |
|
---|
353 | DisableLazystacking
|
---|
354 | ã»èªåä¿åããï¼Lazystackingããªãï¼
|
---|
355 | ã»FPUã使ç¨ãã㨠CONTROL.FPCA ã«'1'ãã»ãããããï¼
|
---|
356 | ã»CONTROL.FPCA == 1ã®å ´åã«ä¾å¤/å²è¾¼ã¿ãçºçããã¨FPUã³ã³ããã¹ããã¹
|
---|
357 | ã¿ãã¯ã«ä¿åããï¼
|
---|
358 |
|
---|
359 | Lazystacking
|
---|
360 | ã»èªåä¿åããï¼Lazystacking ãè¡ãï¼
|
---|
361 | ã»FPUã使ç¨ãã㨠CONTROL.FPCA ã«'1'ãã»ãããããï¼
|
---|
362 | ã»CONTROL.FPCA == '1'ã®å ´åã«ä¾å¤/å²è¾¼ã¿ãçºçããã¨FPUã³ã³ããã¹ãã®ä¿
|
---|
363 | åç¨ã®é åã®ã¿ç¢ºä¿ããï¼FPCCR.LSPACT ã«'1'ã«è¨å®ãããï¼
|
---|
364 | ã»FPCCR.LSPACT == '1' ã®å ´åã«FPUå½ä»¤ã使ç¨ããã¨FPUã®ã³ã³ããã¹ããä¿
|
---|
365 | åé åã«ä¿åãããï¼
|
---|
366 |
|
---|
367 | FPUã«é¢ããä¾å¤/å²è¾¼ã¿ã®å
|
---|
368 | ¥ãå£å¦ç
|
---|
369 |
|
---|
370 | ã»DisableLazystacking or Lazystacking ã®å ´å
|
---|
371 | ã»CONTROL.FPCA == 1ã®å ´å
|
---|
372 | ã»ä¾å¤ãã¬ã¼ã ã«FPUã¬ã¸ã¹ã¿ä¿åç¨ã®é åã確ä¿
|
---|
373 | ã»DisableLazystacking ã®å ´å
|
---|
374 | ã»FPUã¬ã¸ã¹ã¿ä¿åç¨ã®é åã«FPUã¬ã¸ã¹ã¿(S0ï½S15,FPSCR)ãä¿å
|
---|
375 | ã»Lazystacking
|
---|
376 | ã»FPCAR ã«ä¾å¤ãã¬ã¼ã ã®FPUã¬ã¸ã¹ã¿ã®ä¿åã¢ãã¬ã¹(S0ã®ã¢ãã¬ã¹)ãä¿æï¼
|
---|
377 | ã»FPCCR.LSPACT ã1ã«ï¼
|
---|
378 | ã»CONTROL.FPCAã0ã«ã¯ãªã¢
|
---|
379 |
|
---|
380 | FPUã«é¢ããä¾å¤/å²è¾¼ã¿ã®åºå£å¦ç
|
---|
381 |
|
---|
382 | ã»EXC_RETURNã®4ãããç®ã'0'ã®å ´å(æ»ãå
|
---|
383 | ã§FPUã使ç¨ãã¦ãã)
|
---|
384 | ã»FPCCR.LSPACT == '1'ã®å ´å(å²è¾¼ã¿ãã³ãã©ã§FPUã使ç¨ããªãã£ã)
|
---|
385 | ã»FPCCR.LSPACTã'0'ã«
|
---|
386 | ã»FPCCR.LSPACT == '0'ã®å ´å(å²è¾¼ã¿ãã³ãã©ã§FPUã使ç¨ãã)
|
---|
387 | ã»S0ï½S32ã¨FPSCRãä¾å¤ãã¬ã¼ã ããæ»ã
|
---|
388 | ã»EXC_RETURNã®4ãããç®ã®å¦å®ãCONTROL.FPCAã«è¨å®
|
---|
389 | ã»å®è³ªï¼æ»ãå
|
---|
390 | ã®CONTROL.FPCAã復帰
|
---|
391 |
|
---|
392 | ISRã§ã®FPUã®æ¯ãèã
|
---|
393 |
|
---|
394 | FPCCR.LSPACT==1æ(Lazystackingã®æã«ã®ã¿çºç)ã«FPUå½ä»¤ã使ç¨ããå ´å
|
---|
395 | ã»FPCARã®ã¢ãã¬ã¹ã«FPUã¬ã¸ã¹ã¿(S0ï½S15,FPSCR)ãä¿å
|
---|
396 | ã»FPCCR.LSPACT ã0ã«ããï¼
|
---|
397 |
|
---|
398 | âOSã®å®è£
|
---|
399 |
|
---|
400 |
|
---|
401 | 1.ã¿ã¼ã²ããå
|
---|
402 |
|
---|
403 | 1-1 cm3(Cortex-M3)
|
---|
404 | 1-2 armv7m(ARMv7-M)
|
---|
405 | 1-3 arm_m
|
---|
406 |
|
---|
407 | cm3ã§ã¯ï¼ARMv6-Mããµãã¼ãããå ´åã«åé¡ã¨ãªãï¼armv7mã§ã¯ï¼armv8mããª
|
---|
408 | ãªã¼ã¹ãããå ´åã«åé¡ã¨ãªãï¼ARMä¾åé¨ã¯JSPã§ã¯ï¼armv4ã¨ãªã£ã¦ãããï¼
|
---|
409 | armv5ãarmv7ãåä½ããããASPã§ã¯åã«armã¨ããï¼ãã®ããï¼arm_mãç¡é£
|
---|
410 | ã¨èããããï¼
|
---|
411 |
|
---|
412 |
|
---|
413 | 2.Threadã¢ã¼ãã¨Handlerã¢ã¼ãã®ä½¿ãåã
|
---|
414 |
|
---|
415 | 2-1
|
---|
416 | ã¿ã¹ã¯ã³ã³ããã¹ãã¯Threadã¢ã¼ãï¼éã¿ã¹ã¯ã³ã³ããã¹ãã¯Handlerã¢ã¼
|
---|
417 | ãã§åä½ãããï¼
|
---|
418 |
|
---|
419 | 2-2
|
---|
420 | ã¿ã¹ã¯ã³ã³ããã¹ãã¨éã¿ã¹ã¯ã³ã³ããã¹ãå
|
---|
421 | ±ã«Handlerã¢ã¼ãã§åä½ãã
|
---|
422 | ãï¼
|
---|
423 |
|
---|
424 | ããã»ããµã®è¨è¨æ¹éãèæ
|
---|
425 | ®ããã¨2-1ãæåï¼2-1ã§ã®åé¡ç¹ã¨ãã¦ã¯ï¼å²è¾¼
|
---|
426 | ã¿ãã³ãã©ããã¿ã¹ã¯ã¸ã®ãªã¿ã¼ã³æã«ã¢ã¼ãã®å¤æ´ã以ä¸ã®æ§ã«å¤çºããã
|
---|
427 | ã¨ãæããããï¼
|
---|
428 |
|
---|
429 | 1.å²è¾¼ã¿ãã³ãã© : Handlerã¢ã¼ã
|
---|
430 | 2.ã¿ã¹ã¯ä¾å¤ãã³ãã©ã®å¼ã³åºã : Threadã¢ã¼ã
|
---|
431 | 3.ã¿ã¹ã¯ã¸ã®ãªã¿ã¼ã³å¦ç : Handlerã¢ã¼ã
|
---|
432 | 4.ã¿ã¹ã¯ã®åé : Threadã¢ã¼ã
|
---|
433 |
|
---|
434 | 3ã§Handlerã¢ã¼ãã«ç§»è¡ããå¿
|
---|
435 | è¦ãããã®ã¯ï¼ä¾å¤ãã¬ã¼ã ãç¨ãã¦å¾©å¸°ãã
|
---|
436 | ã«ã¯ï¼Handlerã¢ã¼ãã§ä¾å¤ãªã¿ã¼ã³å¦çãè¡ãå¿
|
---|
437 | è¦ãããããã§ããï¼ARMã§
|
---|
438 | ã¯ï¼è¤æ°ã¬ã¸ã¹ã¿ã®ãã¼ãã¨CPSRã®å¾©å¸°ãåæã«è¡ãããï¼M3ã¯è¡ããªãããï¼
|
---|
439 | ãã®æ¹æ³ã§å²è¾¼ã¿å
|
---|
440 | ã®ã¿ã¹ã¯ã«ãªã¿ã¼ã³ããå¿
|
---|
441 | è¦ãããï¼
|
---|
442 |
|
---|
443 | 2-2ã®å ´åã®å²è¾¼ã¿ãã³ãã©ããã¿ã¹ã¯ã¸ã®ãªã¿ã¼ã³æã«ã¢ã¼ãã®å¤æ´ã以ä¸
|
---|
444 | ã«ç¤ºãï¼ã¾ãï¼2-2ã§ã¯å²è¾¼ã¿åªå
|
---|
445 | 度ã®æä½å¤ãã¿ã¹ã¯ã®å®è¡æã®åªå
|
---|
446 | 度ã¨ã
|
---|
447 | ã¦ãªã¶ã¼ãããå¿
|
---|
448 | è¦ãããï¼
|
---|
449 |
|
---|
450 | 1.å²è¾¼ã¿ãã³ãã© : Handlerã¢ã¼ã
|
---|
451 | 2.NVICåªå
|
---|
452 | 度ãã¹ã¯'0'ã0㸠: Threadã¢ã¼ã
|
---|
453 | 3.æä½åªå
|
---|
454 | 度ã®Handlerã¢ã¼ã㸠: Handlerã¢ã¼ã
|
---|
455 | 4.ã¿ã¹ã¯ä¾å¤ãã³ãã©ã®å¼ã³åºã : Handlerã¢ã¼ã
|
---|
456 | 5.ã¿ã¹ã¯ã¸ã®ãªã¿ã¼ã³ã®åå¦ç : Threadã¢ã¼ã
|
---|
457 | 3.ã¿ã¹ã¯ã¸ã®ãªã¿ã¼ã³ : Handlerã¢ã¼ã
|
---|
458 | 4.ã¿ã¹ã¯ã®åé : Handlerã¢ã¼ã
|
---|
459 |
|
---|
460 | å²è¾¼ã¿ãã³ãã©ããã¿ã¹ã¯ã®ãªã¿ã¼ã³ã«é¢ãã¦ã¯ï¼2-2ã§ãã£ã¦ãï¼2ãå®è¡ã
|
---|
461 | ãå ´åã«ï¼NVICåªå
|
---|
462 | 度ãã¹ã¯ã'0'ã«ããããï¼ä¾å¤ãªã¿ã¼ã³å¦çãè¡ãå¿
|
---|
463 | è¦
|
---|
464 | ãããï¼ã¾ãï¼NVICèªä½ãï¼å²è¾¼ã¿ã®ãã¹ãåæ°ã管çãã¦ããããï¼3ãã4
|
---|
465 | ã¸ã®é·ç§»ã®ããã«ï¼ãã£ããä¾å¤/å²è¾¼ã¿ãåä»ããç¶æ
|
---|
466 | ã«ããå¿
|
---|
467 | è¦ãããã
|
---|
468 | ãï¼çµæçã«2-1以ä¸ã®é·ç§»ãå¿
|
---|
469 | è¦ã¨ãªãï¼
|
---|
470 |
|
---|
471 | 2-2ã®å ´åã¯ï¼MSPãã使ããªãããï¼å²è¾¼ã¿ã®å
|
---|
472 | ¥ãå£ã§ãã¹ãåæ°ãå¤æãã¦ï¼
|
---|
473 | ã¹ã¿ãã¯ãå
|
---|
474 | ¥ãæ¿ããå¿
|
---|
475 | è¦ãããï¼
|
---|
476 |
|
---|
477 | HRPçã§ã¡ã¢ãªä¿è·ãç¨ããå ´åã¯2-1ã¨ãªãï¼
|
---|
478 |
|
---|
479 | 以ä¸ã®çç±ã«ããï¼2-1ãæ¡ç¨ããï¼ãã ã2-1ã¯ï¼ã«ã¼ãã«èµ·åæã¨IDLEã«ã¼
|
---|
480 | ãã®æ±ããæ¤è¨ããå¿
|
---|
481 | è¦ãããï¼ãããã«ã¤ãã¦ã¯å¥éè°è«ããï¼
|
---|
482 |
|
---|
483 |
|
---|
484 | 3.ãã£ã¹ãããã£ã®å®è¡ã¢ã¼ã
|
---|
485 |
|
---|
486 | 3-1
|
---|
487 | Threadã¢ã¼ãã§å®è¡ãã
|
---|
488 |
|
---|
489 | 3-2
|
---|
490 | Handlerã¢ã¼ãã§å®è¡ãã
|
---|
491 |
|
---|
492 | ãã£ã¹ãããã£ãThreadã¢ã¼ãã§å®è¡ããã¨ï¼å²è¾¼ã¿ã«ããããªã¨ã³ãããã
|
---|
493 | ãã¿ã¹ã¯ã«æ»ãå ´åã¯æ¬¡ã®ãããªãã¹ã«ãªãï¼
|
---|
494 |
|
---|
495 | 1. ãã£ã¹ãããã£å¼ã³åºã : Threadã¢ã¼ã
|
---|
496 | 2. ãã£ã¹ãããã£å®è¡ : Threadã¢ã¼ã
|
---|
497 | 3. ã¿ã¹ã¯ä¾å¤å®è¡ : Threadã¢ã¼ã
|
---|
498 | 4ï¼ã¿ã¹ã¯ã¸ã®ãªã¿ã¼ã³å¦ç : Handlerã¢ã¼ã
|
---|
499 | 5. ã¿ã¹ã¯ã®åé : Threadã¢ã¼ã
|
---|
500 |
|
---|
501 | å²è¾¼ã¿ãã³ãã©ããèªããã£ã¹ãããããã¿ã¹ã¯ã¸ãªã¿ã¼ã³ããå ´åã¯æ¬¡ã®ã
|
---|
502 | ã¹ã«ãªãï¼
|
---|
503 |
|
---|
504 | 1.å²è¾¼ã¿ãã³ãã© : Handlerã¢ã¼ã
|
---|
505 | 2.ãã£ã¹ãããã£å®è¡ : Threadã¢ã¼ã
|
---|
506 | 3.ã¿ã¹ã¯ä¾å¤ãã³ãã©ã®å¼ã³åºã : Threadã¢ã¼ã
|
---|
507 | 4.ã¿ã¹ã¯ã¸ã®ãªã¿ã¼ã³ : Handlerã¢ã¼ã
|
---|
508 | 5.ã¿ã¹ã¯ã®åé : Threadã¢ã¼ã
|
---|
509 |
|
---|
510 | ä¸æ¹ï¼ãã£ã¹ãããã£ãHandlerã¢ã¼ãã§å®è¡ããã¨ï¼å²è¾¼ã¿ã«ããããªã¨ã³
|
---|
511 | ãããããã¿ã¹ã¯ã«æ»ãå ´åã¯æ¬¡ã®ãããªãã¹ã«ãªãï¼
|
---|
512 |
|
---|
513 | 1. ãã£ã¹ãããã£å¼ã³åºã : Threadã¢ã¼ã
|
---|
514 | 2. ãã£ã¹ãããã£å®è¡ : Handlerã¢ã¼ã
|
---|
515 | 3. ã¿ã¹ã¯ä¾å¤å®è¡ : Threadã¢ã¼ã
|
---|
516 | 4ï¼ã¿ã¹ã¯ã¸ã®ãªã¿ã¼ã³ : Handlerã¢ã¼ã
|
---|
517 | 5. ã¿ã¹ã¯ã®åé : Threadã¢ã¼ã
|
---|
518 |
|
---|
519 | å²è¾¼ã¿ãã³ãã©ã®åºå£ããèªããã£ã¹ãããããã¿ã¹ã¯ã¸ãªã¿ã¼ã³ããå ´åã¯
|
---|
520 | 次ã®ãã¹ã«ãªãï¼
|
---|
521 |
|
---|
522 | 1.å²è¾¼ã¿ãã³ãã© : Handlerã¢ã¼ã
|
---|
523 | 2.ãã£ã¹ãããã£å®è¡ : Handlerã¢ã¼ã
|
---|
524 | 3.ã¿ã¹ã¯ä¾å¤ãã³ãã©ã®å¼ã³åºã : Threadã¢ã¼ã
|
---|
525 | 4.ã¿ã¹ã¯ã¸ã®ãªã¿ã¼ã³ : Handlerã¢ã¼ã
|
---|
526 | 5.ã¿ã¹ã¯ã®åé : Threadã¢ã¼ã
|
---|
527 |
|
---|
528 | ã¿ã¹ã¯ä¾å¤ãã³ãã©ããªãOSã®å ´åã¯ï¼Handlerã¢ã¼ãã§å®è¡ããæ¹ãã¢ã¼ã
|
---|
529 | ã®é·ç§»ã®åæ°ãæ¸ããï¼ã¿ã¹ã¯ä¾å¤ãã³ãã©ãããã¨ï¼Threadã¢ã¼ãã®æ¹ãé·
|
---|
530 | 移åæ°ãæ¸ãããï¼Threadã¢ã¼ãã¨ããï¼
|
---|
531 |
|
---|
532 | ã¡ã¢ãªä¿è·ãèæ
|
---|
533 | ®ããã¨ï¼ãã£ã¹ãããã£ã¯Handlerã¢ã¼ãã§åä½ãããæ¹ã
|
---|
534 | å¹çãããã¨èããããï¼SVCã§ãã³ãã©ãå¼ã³åºãã¨Handlerã¢ã¼ãã¨ãªãã
|
---|
535 | ãï¼ï¼
|
---|
536 |
|
---|
537 |
|
---|
538 | 4.ã¹ã¿ãã¯ã®ä½¿ãåã
|
---|
539 |
|
---|
540 | 4-1
|
---|
541 | ã¿ã¹ã¯ã³ã³ããã¹ããPSP, éã¿ã¹ã¯ã³ã³ããã¹ããMSP
|
---|
542 | 4-2
|
---|
543 | ã¿ã¹ã¯ã³ã³ããã¹ãï¼éã¿ã¹ã¯ã³ã³ããã¹ãå
|
---|
544 | ±ã«MSP
|
---|
545 |
|
---|
546 | 4-2ã®å ´åï¼å²è¾¼ã¿ã®å
|
---|
547 | ¥ãå£ã§ãã¹ãåæ°ãå¤æãã¦ï¼ã¹ã¿ãã¯ãå
|
---|
548 | ¥ãæ¿ãã
|
---|
549 | å¿
|
---|
550 | è¦ãããï¼2ã§ã¿ã¹ã¯ã³ã³ããã¹ãã¯Threadã¢ã¼ãï¼éã¿ã¹ã¯ã³ã³ããã¹ã
|
---|
551 | ã¯Handlerã¢ã¼ãã§åä½ãããã¨ããããï¼4-1ãæ¡ç¨ããã¨ï¼å²è¾¼ã¿ã®å
|
---|
552 | ¥ãå£
|
---|
553 | ã§èªåçã«ã¹ã¿ãã¯ãåãæ¿ããï¼Threadã¢ã¼ãã§ã®PSPã®ã¢ã¯ã»ã¹ãï¼
|
---|
554 | mrs/msrå½ä»¤ã§è¡ããããï¼4-1ãæ¡ç¨ããï¼
|
---|
555 |
|
---|
556 |
|
---|
557 | 5.ã³ã³ããã¹ãã®å¤å®
|
---|
558 |
|
---|
559 | 5-1
|
---|
560 | IPSRã'0'(Threadã¢ã¼ã)ãªãã¿ã¹ã¯ã¿ã¹ã¯ã³ã³ããã¹ãï¼'1'(Handlerã¢ã¼
|
---|
561 | ã)ãªãéã¿ã¹ã¯ã³ã³ããã¹ãã¨ããï¼
|
---|
562 |
|
---|
563 | 5-2
|
---|
564 | å²è¾¼ã¿ã®ãã¹ãåæ°ãä¿æããå¤æ°ãç¨æï¼1以ä¸ã§éã¿ã¹ã¯ã³ã³ããã¹ãï¼
|
---|
565 |
|
---|
566 | 5-3
|
---|
567 | ã¢ã¯ãã£ããªã¹ã¿ãã¯ã«ããå¤æï¼MSPãªãéã¿ã¹ã¯ã³ã³ããã¹ãï¼PSPãªã
|
---|
568 | ã¿ã¹ã¯ã³ã³ããã¹ãã¨ããï¼
|
---|
569 |
|
---|
570 | 5-1ã¯ï¼ã½ããã¦ã§ã¢å´ã§ã³ã³ããã¹ã管çã®ããã®å¦çãè¡ãå¿
|
---|
571 | è¦ããªãã¨
|
---|
572 | ããã¡ãªãããããï¼ããããªããï¼ã«ã¼ãã«ã®èµ·åæThreadã¢ã¼ãã§ããã
|
---|
573 | ãï¼Handlerã¢ã¼ãã¸ç§»è¡ããå¿
|
---|
574 | è¦ãããï¼ASPã«ã¼ãã«ã§ã¯ï¼IDLEã«ã¼ãå®è¡
|
---|
575 | ã¯éã¿ã¹ã¯ã³ã³ããã¹ãã¨ãã¦åä½ãããå¿
|
---|
576 | è¦ãããããï¼IDLEã«ã¼ãã¯
|
---|
577 | Handlerã¢ã¼ãã§åä½ãããå¿
|
---|
578 | è¦ãããï¼IDLEã«ã¼ãã¯ãã£ã¹ãããã£ããå¼
|
---|
579 | ã³åºãããï¼3ã§å®ããããã«ï¼ãã£ã¹ãããã£ãThreadã¢ã¼ãã§åä½ããã
|
---|
580 | ããï¼IDLEã«ã¼ããå¼ã³åºãéã«ã¯ï¼Handlerã¢ã¼ãã¸é·ç§»ããå¿
|
---|
581 | è¦ãããï¼
|
---|
582 | Handlerã¢ã¼ãã¸ã®é·ç§»ã¯ï¼SVC/PendSVCãç¨ããã¨å®ç¾å¯è½ã§ãããï¼6ã®å²
|
---|
583 | è¾¼ã¿ã«ããªã¨ã³ãããããã¿ã¹ã¯ã¸ã®ãªã¿ã¼ã³æã®Handlerã¢ã¼ãã¸ã®ç§»è¡ã§
|
---|
584 | ãSVC/PendSVCã®ä½¿ç¨ãå¿
|
---|
585 | è¦ã¨ãªãããï¼SVCãã³ãã©ã§ã¯ï¼ã©ã®ç®çã§å¼ã³åº
|
---|
586 | ããããå¤å®ããå¿
|
---|
587 | è¦ãåºã¦ããããï¼ãªã¼ãããããå¢å¤§ããï¼
|
---|
588 |
|
---|
589 | 5-2ã§ã¯ï¼ã«ã¼ãã«èµ·åæãIDLEã«ã¼ãæã«å¤æ°ã'1'ã«è¨å®ããã°ãããã¨ã«
|
---|
590 | ãªãï¼ãã®å ´åï¼ã«ã¼ãã«èµ·åæãIDLEã«ã¼ãæã«Threadã¢ã¼ãã§å®è¡ãã¦ã
|
---|
591 | åä½ã«åé¡ããªãããï¼ç¹ã«å²è¾¼ã¿ã®åºå
|
---|
592 | ¥ãå£ã®è¨è¨ã注æããå¿
|
---|
593 | è¦ãããï¼
|
---|
594 |
|
---|
595 | ã«ã¼ãã«èµ·åæã«é¢ãã¦ã¯ï¼å
|
---|
596 | ¨å²è¾¼ã¿ãç¦æ¢ãã¦ããï¼å²è¾¼ã¿ãå
|
---|
597 | ¥ããªãã®ã§
|
---|
598 | ç¹ã«åé¡ã¯ãªãï¼IDLEã«ã¼ãæã¯ï¼Threadã¢ã¼ãã§MSPã¨PSPã®é¸æãå¯è½ã§ã
|
---|
599 | ããã¨ãå©ç¨ãã¦ï¼éã¿ã¹ã¯ã³ã³ããã¹ãã®ã¹ã¿ãã¯ã§ããMSPã«å¤æ´ããï¼
|
---|
600 | ä¾å¤/å²è¾¼ã¿ã®å
|
---|
601 | ¥ãå£ã§ã¯ï¼å¤éå²è¾¼ã¿ã§ããããEXC_RETURNã®ã¢ã¼ãå¤å®ã®
|
---|
602 | ãããã§ã¯ãªãï¼ã¹ã¿ãã¯ã®å¤å®ãããã§è¡ãã°åé¡ãªãï¼ä¾å¤/å²è¾¼ã¿ãã
|
---|
603 | ã®ãªã¿ã¼ã³ã«é¢ãã¦ã¯ï¼å¤éå²è¾¼ã¿ã®å¤å®ã¯ï¼å
|
---|
604 | ¥ãå£ã¨åæ§ã«EXC_RETURNã®ã¹
|
---|
605 | ã¿ãã¯å¤å®ãããã§è¡ãã°ããï¼ä¾å¤ãªã¿ã¼ã³å¦çæã«pcã«ä»£å
|
---|
606 | ¥ãã
|
---|
607 | EXC_RETURNã®å¤ãä¸å¾0xfffffffd (Threadã¢ã¼ã with MSP)ã¨ããã®ã§ã¯ãªãï¼
|
---|
608 | ä¾å¤/å²è¾¼ã¿åä»ãæã«LRã«è¨å®ãããEXC_RETURNãç¨ãããã¨ã«ããï¼IDLE
|
---|
609 | ã«ã¼ãã«å²ãè¾¼ãã å ´åã§ãåé¡ãªããªã¿ã¼ã³ããï¼
|
---|
610 |
|
---|
611 | ã«ã¼ãã«èµ·åæã¯ï¼MSPãã¢ã¯ãã£ãã§ããï¼å²è¾¼ã¿ãã³ãã©å®è¡æã¯Handler
|
---|
612 | ã¢ã¼ãã§ãããã¨ããMSPãã¢ã¯ãã£ãã§ãï¼IDLEã«ã¼ãæã«MSPãã¢ã¯ãã£ã
|
---|
613 | ã«è¨å®ããã¨ï¼éã¿ã¹ã¯ã³ã³ããã¹ãã¯å
|
---|
614 | ¨ã¦ï¼MSPãã¢ã¯ãã£ãã«ãã¦åä½ã
|
---|
615 | ããã¨ã«ãªãï¼ã¾ãï¼å²è¾¼ã¿æã¯å²è¾¼ã¿åã«ã¢ã¯ãã£ããªã¹ã¿ãã¯ã®æ
|
---|
616 | å ±ãï¼
|
---|
617 | EXC_RETURNã«è¨å®ãããï¼ãã®ããï¼ã³ã³ããã¹ãã®å¤å®ã¯ï¼å²è¾¼ã¿ãã¹ãå
|
---|
618 | æ°ãä¿æããå¤æ°ããªãã¨ãï¼ã¢ã¯ãã£ããªã¹ã¿ãã¯ãè¦ãã°ãããã¨ã«ãªãï¼
|
---|
619 | ã¾ãï¼exc_sense_context()ã«é¢ãã¦ã¯ï¼ä¾å¤ãã¬ã¼ã ä¸ã«EXC_RETURNã追å
|
---|
620 | ãï¼ãã®å
|
---|
621 | 容ã«ããå¤æããã°ããï¼ä»¥ä¸ã®çç±ã«ããï¼5-3ãæ¡ç¨ããï¼
|
---|
622 |
|
---|
623 |
|
---|
624 | 6.å²è¾¼ã¿ã«ããªã¨ã³ãããããã¿ã¹ã¯ã¸ã®ãªã¿ã¼ã³æã®Handlerã¢ã¼ãã¸ã®ç§»
|
---|
625 | è¡æ¹æ³
|
---|
626 |
|
---|
627 | 6-1
|
---|
628 | SVCãç¨ãã
|
---|
629 | 6-2
|
---|
630 | PendSVCãç¨ãã
|
---|
631 |
|
---|
632 | PendSVCã¨SVCã®éãã¯ï¼PendSVCãè¦æ±ããã¥ã¼ã¤ã³ã°ããï¼SVCã¯è¦æ±ããã¥
|
---|
633 | ã¼ã¤ã³ã°ãããªããã¨ã§ããï¼å²è¾¼ã¿ã«ããªã¨ã³ãããããã¿ã¹ã¯ã¸ã®ãªã¿ã¼
|
---|
634 | ã³æã®Handlerã¢ã¼ãã¸ã®ç§»è¡ã¯ï¼ãã¥ã¼ã¤ã³ã°ãããã«å³åº§ã«å¦çãããå¿
|
---|
635 |
|
---|
636 | è¦ãããããï¼ã©ã¡ãã§å®ç¾ãã¦ãåé¡ãªãï¼ã©ã¡ããã«ã¼ãã«ã®ãªã½ã¼ã¹ã
|
---|
637 | ã¦ä½¿ç¨ãããã®é¸æã ãã§ããï¼
|
---|
638 |
|
---|
639 | ã©ã¡ãã使ãã¨ãã¦ãï¼åªå
|
---|
640 | 度ã®è¨å®ãåé¡ã¨ãªãï¼ãã£ã¹ãããã£ããå²è¾¼
|
---|
641 | ã¿ã«ããªã¨ã³ãããããã¿ã¹ã¯ã¸ã®ãªã¿ã¼ã³ã¾ã§ã®å¦çã¯ï¼å°ãªãã¨ãCPUã
|
---|
642 | ãã¯ç¶æ
|
---|
643 | ã§å®è¡ãããªããã°ãªããªãï¼SVCãPendSVCã¯ã©ã¡ããå²è¾¼ã¿åªå
|
---|
644 | 度
|
---|
645 | ãæã¤ããï¼NVICåªå
|
---|
646 | 度ãã¹ã¯ããBASEPRIåªå
|
---|
647 | 度ãã¹ã¯ã®æ¹ãé«ãå ´åï¼å¦
|
---|
648 | çãããªãï¼
|
---|
649 |
|
---|
650 | CPUããã¯ç¶æ
|
---|
651 | ãBASEPRIã®è¨å®ã§å®ç¾ããå ´åï¼ãã®è¨å®å¤ãSVCãPendSVCã«
|
---|
652 | è¨å®ããå¤ããä½ãããå¿
|
---|
653 | è¦ãããï¼è¨ãæããã¨ï¼SVCãPendSVCã®åªå
|
---|
654 | 度ã
|
---|
655 | CPUããã¯æã®åªå
|
---|
656 | 度ãã¹ã¯ã®å¤ããé«ãå¤ï¼ä»ã®å²è¾¼ã¿ããé«ãåªå
|
---|
657 | 度ï¼ã¨
|
---|
658 | ããå¿
|
---|
659 | è¦ãããï¼
|
---|
660 |
|
---|
661 | CPUããã¯ç¶æ
|
---|
662 | ãFAULTMASKãPRIMASKã§å®ç¾ããå ´åã¯ï¼ããããè¨å®ããã
|
---|
663 | ã¨ï¼SVCãPendSVCãåä»ããããªãããï¼ãã£ããBASEPRIã«ããå²è¾¼ã¿ãã
|
---|
664 | ã¹ã¯ããããã«è¨å®ããå¿
|
---|
665 | è¦ãããï¼ãã®å ´åãï¼SVCãPendSVCã¯ä»ã®å²è¾¼ã¿
|
---|
666 | ããé«ãåªå
|
---|
667 | 度ãè¨å®ããå¿
|
---|
668 | è¦ãããï¼
|
---|
669 |
|
---|
670 | 以ä¸ã«ããï¼Handlerã¢ã¼ãã¸ã®ç§»è¡ã®ããã«ã¯ï¼CPUããã¯ç¶æ
|
---|
671 | ãBASEPRIã§
|
---|
672 | å®ç¾ãï¼SVCãPendSVCã«è¨å®ããåªå
|
---|
673 | 度ãã«ã¼ãã«ç®¡çå
|
---|
674 | ã®æé«åªå
|
---|
675 | 度ããä¸
|
---|
676 | ã¤é«ãåªå
|
---|
677 | 度ã«è¨å®ããå¿
|
---|
678 | è¦ãããï¼
|
---|
679 |
|
---|
680 | ARMv7-Mã§ã¯SVCã«ããå®ç¾ããï¼SVNã®æ¹ãPendSVCããå®è¡ãªã¼ãããããå°
|
---|
681 | ããããï¼SVCã使ç¨ãã
|
---|
682 |
|
---|
683 | ARMv6-Mã§ã¯SVCã«ããå®ç¾ããï¼ARMv6-Mã¯CPUããã¯ç¶æ
|
---|
684 | ãPRIMASKã§å®ç¾ã
|
---|
685 | ã¦ããPRIMASKãã»ããããç¶æ
|
---|
686 | ã§SVCãå®è¡ããã¨ãã©ã¼ã«ãã¨ãªãããï¼
|
---|
687 | PendSVCãçºè¡ãã¦ï¼PRIMASKãã¯ãªã¢ãããã¨ã§å®ç¾ããï¼PendSVCã®å²è¾¼ã¿
|
---|
688 | åªå
|
---|
689 | 度ã¯æé«ã¨ãã¦ããããï¼ãã®éã§å²è¾¼ã¿ãå
|
---|
690 | ¥ããã¨ã¯ãªãï¼
|
---|
691 |
|
---|
692 |
|
---|
693 | 7. ä¾å¤/å²è¾¼ã¿åºå
|
---|
694 | ¥ãå£ã§ã®å¤éå²è¾¼ã¿ã®å¤æ
|
---|
695 |
|
---|
696 | 7-1
|
---|
697 | EXC_RETURNã®ã¢ã¼ãå¤å®ããã
|
---|
698 | 7-2
|
---|
699 | EXC_RETURNã®ã¹ã¿ãã¯å¤å®ããã
|
---|
700 | 7-3
|
---|
701 | å²è¾¼ã¿ãã¹ãåæ°ã®ç®¡çå¤æ°
|
---|
702 |
|
---|
703 | ä¾å¤/å²è¾¼ã¿åä»ãæã¯ï¼åä»ããä¾å¤/å²è¾¼ã¿ä»¥ä¸ã®å²è¾¼ã¿ã¯ç¦æ¢ãããï¼å
|
---|
704 | ¨
|
---|
705 | å²è¾¼ã¿ç¦æ¢ç¶æ
|
---|
706 | ã«ã¯ãªããªãï¼ãã®ããï¼å²è¾¼ã¿ãã¹ãåæ°ã®ç®¡çå¤æ°ãã¤ã³
|
---|
707 | ã¯ãªã¡ã³ãããåã«å²è¾¼ã¿ãå
|
---|
708 | ¥ãå¯è½æ§ãããããï¼7-3ã¯ä½¿ç¨ãããã¨ãã§
|
---|
709 | ããªãï¼
|
---|
710 |
|
---|
711 | 5ã§è°è«ããéãï¼IDLEã«ã¼ããThreadã¢ã¼ãã§å®è¡ããããï¼7-1ã§ã¯ãªãï¼
|
---|
712 | 7-2ã§å¤æããå¿
|
---|
713 | è¦ãããï¼
|
---|
714 |
|
---|
715 |
|
---|
716 | 8. IDLEã«ã¼ã
|
---|
717 |
|
---|
718 | 8-1
|
---|
719 | Threadã¢ã¼ãã§å®è¡
|
---|
720 | 8-2
|
---|
721 | Handlerã¢ã¼ãã§å®è¡
|
---|
722 |
|
---|
723 | 5ã§è°è«ããéãï¼Threadã¢ã¼ãã§å®è¡ã§ããæ¹ããªã¼ãããããå°ããï¼ã¾
|
---|
724 | ãï¼Threadã¢ã¼ãã§å®è¡ãã¦ãï¼å²ãè¾¼ã¿ã®åºå
|
---|
725 | ¥ãå£ã§æ£ããéã¿ã¹ã¯ã³ã³ã
|
---|
726 | ãã¹ãã¨å¤å®ã§ããã°ï¼Threadã¢ã¼ãã§åé¡ãªãï¼
|
---|
727 |
|
---|
728 |
|
---|
729 | 9ï¼ã«ã¼ãã«ç®¡çå¤ã®å²è¾¼ã¿ã®ãµãã¼ã
|
---|
730 |
|
---|
731 | 9-1
|
---|
732 | ã«ã¼ãã«ç®¡çå¤ã®å²è¾¼ã¿ããµãã¼ãããªã
|
---|
733 | 9-2
|
---|
734 | ã«ã¼ãã«ç®¡çå¤ã®å²è¾¼ã¿ããµãã¼ããã
|
---|
735 |
|
---|
736 | ARMv7-Mã§ã¯ï¼CPUããã¯ãBASEPRIã§å®ç¾ãã¦ãããã¨ï¼ãã¯ã¿ãã¼ãã«ããµ
|
---|
737 | ãã¼ããã¦ããï¼å²è¾¼ã¿ãã³ãã©ãCè¨èªã§è¨è¿°å¯è½ã§ããããï¼ãµãã¼ãã
|
---|
738 | 容æã§ããããï¼ãµãã¼ãããï¼
|
---|
739 |
|
---|
740 | ARMv6-Mã§ã¯ï¼CPUããã¯ãPRIMASKã§å®ç¾ãã¦ããããï¼ãµã¼ãã¼ãããªãï¼
|
---|
741 |
|
---|
742 |
|
---|
743 | 10. CPUããã¯
|
---|
744 |
|
---|
745 | 10-1
|
---|
746 | BASEPRIã使ç¨(ARMv7-M)
|
---|
747 | åå¥ã®å²è¾¼ã¿ç¦æ¢è¨±å¯ã§ã¨ãã¥ã¬ã¼ã·ã§ã³(ARMv6-M)
|
---|
748 | 10-2
|
---|
749 | FAULTMASK/PRIMASKã使ç¨
|
---|
750 |
|
---|
751 | ã«ã¼ãã«ã®ç®¡çå¤ã®å²è¾¼ã¿ããµãã¼ããããªãï¼BASEPRIã使ç¨ããå¿
|
---|
752 | è¦ãã
|
---|
753 | ãï¼
|
---|
754 |
|
---|
755 | ARMv7-Mã§ã¯CPUããã¯ã«BASEPRIã使ç¨ããï¼
|
---|
756 |
|
---|
757 | ARMv6-Mã§ã¯CPUããã¯ã«PRIMASKã使ç¨ããï¼åå¥ã®å²è¾¼ã¿ç¦æ¢è¨±å¯ã§ã¨ãã¥
|
---|
758 | ã¬ã¼ã·ã§ã³ããæ¹æ³ã¯ï¼SysTicã®ã¿å¥ã®ã¬ã¸ã¹ã¿ã§è¨å®ããå¿
|
---|
759 | è¦ãããï¼å®è¡
|
---|
760 | ãªã¼ããããã大ããã¨ããåé¡ãããï¼
|
---|
761 |
|
---|
762 | 11. å²è¾¼ã¿ããã¯ã¨CPUä¾å¤ã®é¢ä¿
|
---|
763 |
|
---|
764 | 11-1
|
---|
765 | BASEPRIã使ç¨(ARMv7-M)
|
---|
766 | 11-2
|
---|
767 | FAULTMASK/PRIMASKã使ç¨
|
---|
768 |
|
---|
769 | FAULTMASK/PRIMASKã使ç¨ããã¨ï¼NMI 㨠Hardware Fault 以å¤ã®CPUä¾å¤ãç¦
|
---|
770 | æ¢ããã¦ãã¾ãï¼
|
---|
771 |
|
---|
772 | BASEPRIãç¨ããã¨ï¼å²è¾¼ã¿ããã¯ä¸ã«ãCPUä¾å¤ãåä»ãããå ´åã¯ï¼
|
---|
773 | BASEPRIãç¨ãã¦ï¼æé«åªå
|
---|
774 | 度ãCPUä¾å¤ã®ããã«ãªã¶ã¼ãããå¿
|
---|
775 | è¦ãããï¼
|
---|
776 |
|
---|
777 | å²è¾¼ã¿ããã¯æãï¼CPUä¾å¤ãåä»ããããã«ããããã°BASEPRIã使ç¨ããå¿
|
---|
778 |
|
---|
779 | è¦ãããï¼
|
---|
780 |
|
---|
781 | μIRON4.0ä»æ§ã®3.5.3ã§ã¯ï¼CPUä¾å¤ã®åªå
|
---|
782 | 度ã¯æ¬¡ã®ããã«å®ãããã¦ããï¼
|
---|
783 |
|
---|
784 | "CPUä¾å¤ãã³ãã©ã®åªå
|
---|
785 | é ä½ã¯ï¼CPUä¾å¤ãçºçããå¦çã®åªå
|
---|
786 | 度ã¨ï¼ãã£ã¹
|
---|
787 | ãããã£ã®åªå
|
---|
788 | é ä½ã®ãããããããé«ãï¼"
|
---|
789 |
|
---|
790 | CPUä¾å¤ãçºçããå¦çã®åªå
|
---|
791 | 度ãããé«ãã¨ããã®ã§ï¼CPUããã¯ãå²è¾¼ã¿ã
|
---|
792 | ãã¯ç¶æ
|
---|
793 | ã®ã¿ã¹ã¯ã§çºçããå ´åã§ãï¼åªå
|
---|
794 | ãã¦å®è¡ãããã¹ãã ã¨ãèãã
|
---|
795 | ããï¼
|
---|
796 |
|
---|
797 | ä¸æ¹ï¼TOPPERSæ¨æºå²è¾¼ã¿å¦çã¢ãã«ã®ä»æ§æ¸ã§ã¯ï¼CPUä¾å¤ã¯ï¼ããã»ããµæ¯
|
---|
798 | ã«ç°ãªãããï¼CPUä¾å¤ã®å¦çã¢ãã«ã®æ¨æºåæ¤è¨ã®å¯¾è±¡å¤ã¨ãã¦ããï¼ãã®
|
---|
799 | ããï¼ARM-Mã§ã®æ±ãã決ãã¦ï¼ããã¥ã¢ã«ã«æè¨ããã°ããã¨èããããï¼
|
---|
800 |
|
---|
801 | ARMv7-Mã§ã¯å²è¾¼ã¿ããã¯ã¯BASEPRIã使ç¨ããï¼
|
---|
802 |
|
---|
803 | ARMv6-Mã§ã¯å²è¾¼ã¿ããã¯ã¯PRIMASKã使ç¨ããï¼
|
---|
804 |
|
---|
805 |
|
---|
806 | 12. å¤é¨åªå
|
---|
807 | 度ã¨å
|
---|
808 | é¨åªå
|
---|
809 | 度ã®å¤æ
|
---|
810 |
|
---|
811 | å¤é¨åªå
|
---|
812 | 度ã¨ã¯APIã§æå®ããå²è¾¼ã¿åªå
|
---|
813 | 度(PRIå)ã®ãã¨ã§ããï¼å¤ãå°ãã
|
---|
814 | ã»ã©åªå
|
---|
815 | 度ãé«ãï¼å²è¾¼ã¿ãã³ãã©ã«ã¯ï¼-1ããé£ç¶ããè² ã®å¤ãè¨å®å¯è½ã§
|
---|
816 | ããï¼å
|
---|
817 | é¨åªå
|
---|
818 | 度ã¯ï¼BASEPRIãNVICã®åªå
|
---|
819 | 度ã¬ã¸ã¹ã¿ã«è¨å®ããå¤ã§ããï¼
|
---|
820 |
|
---|
821 | å®è£
|
---|
822 | ãããå²è¾¼ã¿åªå
|
---|
823 | 度ã®ãããå¹
|
---|
824 | ã TBITW_IPRI ã¨ããã¨ï¼è¨å®å¯è½ãªå¤é¨
|
---|
825 | åªå
|
---|
826 | 度ã¯æ¬¡ã®ããã«ãªãï¼
|
---|
827 |
|
---|
828 | TIPM_ENAALLï¼ï¼0ï¼ï½ -(1 << TBITW_IPRI)
|
---|
829 |
|
---|
830 |
|
---|
831 | 13. ã«ã¼ãã«ç®¡çå
|
---|
832 | ã®æé«åªå
|
---|
833 | 度(CPUããã¯ç¶æ
|
---|
834 | ã§ã®åªå
|
---|
835 | 度ãã¹ã¯)
|
---|
836 |
|
---|
837 | 6.ã§è¿°ã¹ãããã«ï¼å²è¾¼ã¿ã®åºå£ã§SVCãã³ãã©ãå¼ã³åºãå¿
|
---|
838 | è¦ãããããï¼
|
---|
839 | SVCãã³ãã©ã¯CPUããã¯ç¶æ
|
---|
840 | ã®BASEPRIã«è¨å®ããåªå
|
---|
841 | 度ãã¹ã¯ããé«ãåªå
|
---|
842 | 度
|
---|
843 | ãè¨å®ããå¿
|
---|
844 | è¦ãããï¼
|
---|
845 |
|
---|
846 | å®è£
|
---|
847 | ãããå²è¾¼ã¿åªå
|
---|
848 | 度ã®ãããå¹
|
---|
849 | ã TBITW_IPRIï¼åªå
|
---|
850 | 度ä¸ã®ãµãåªå
|
---|
851 | 度ã®
|
---|
852 | ãããå¹
|
---|
853 | ãTBIT_IPRIã¨ããã¨ï¼CPUããã¯ç¶æ
|
---|
854 | ï¼ã«ã¼ãã«ç®¡çå
|
---|
855 | å²è¾¼ã¿ã«è¨å®
|
---|
856 | å¯è½ãªæé«åªå
|
---|
857 | 度ï¼ã¨ãã¦æå®å¯è½ãªåªå
|
---|
858 | 度ãã¹ã¯ã®è¨å®ç¯å²ã¯ä»¥ä¸ã®å¤ã®ç¯
|
---|
859 | å²ã¨ãªãï¼
|
---|
860 |
|
---|
861 | -(2^(TBIW_IPRI) - 1) + (2^TBITW_SUBIPRI) ï½ -1
|
---|
862 |
|
---|
863 |
|
---|
864 | 14. å²è¾¼ã¿åªå
|
---|
865 | 度ãã¹ã¯
|
---|
866 |
|
---|
867 | ARMv7-Mã§ã¯BASEPRIã«ããå®ç¾ããï¼
|
---|
868 |
|
---|
869 | ARMv6-Mã§ã¯åå¥ã®å²è¾¼ã¿ç¦æ¢è¨±å¯æ©è½ãç¨ãã¦ã¨ãã¥ã¬ã¼ã·ã§ã³ããï¼
|
---|
870 |
|
---|
871 |
|
---|
872 | 15. FPUã®ãµãã¼ã
|
---|
873 |
|
---|
874 | 15-1
|
---|
875 | FPUã使ç¨ããã¿ã¹ã¯/ISRãã¦ã¼ã¶ãæå®ããï¼ æå®ãã¦ããªãã¿ã¹ã¯/ISR
|
---|
876 | ã§ã¯FPUã使ç¨ããã¨ä¾å¤ã¨ãªãï¼
|
---|
877 | 15-2
|
---|
878 | FPUã使ç¨ããã¿ã¹ã¯/ISRãã¦ã¼ã¶ã¯æå®ããªãï¼å
|
---|
879 | ¨ã¦ã®ã¿ã¹ã¯/ISRã§FPUã
|
---|
880 | 使ç¨å¯è½ã§ããï¼
|
---|
881 |
|
---|
882 | 15-1ã¯ä¸è¬ã«ã³ã³ããã¹ãã®ä¿å復帰ã®ãªã¼ãããããä½æ¸ããç®çã§æ¡ç¨ã
|
---|
883 | ããï¼15-1ãæ¡ç¨ããã¨ï¼ã¿ã¹ã¯ã¨ISRã®å±æ§ã®æ¡å¼µãå¿
|
---|
884 | è¦ã¨ãªãï¼
|
---|
885 |
|
---|
886 | ARMv7-Mã§ã¯ï¼FPUã使ç¨ããå ´åã®ã¿ä¾å¤ã»å²è¾¼ã¿ã®å
|
---|
887 | ¥ãå£ã§FPUã³ã³ããã¹
|
---|
888 | ããä¿åããæ©è½ãããããï¼15-2ãé¸æãã¦ãï¼FPUã使ããªãéãã¯ãã
|
---|
889 | ã«ãã£ã¯ãªãã¨èãï¼15-2ãæ¡ç¨ããï¼
|
---|
890 |
|
---|
891 | FPUã«é¢ãããµãã¼ãã®ããªã¨ã¼ã·ã§ã³ã¯æ¬¡ã®çµã¿åãããå¯è½ã§ããï¼
|
---|
892 |
|
---|
893 | FPCCR ã³ã³ããã¹ã
|
---|
894 | LSPEN ASPEN ã³ã³ãã¤ã«ãªãã·ã§ã³ ä¿å復帰 FPU
|
---|
895 | NO_FPU - - æå®ãªã ãªã ç¡å¹
|
---|
896 | FPU_NO_PRESERV 0 0 -mfpu=fpv4-sp-d16 ãªã æå¹
|
---|
897 | FPU_NO_LAZYSTACKING 0 1 -mfpu=fpv4-sp-d16 ãã æå¹
|
---|
898 | FPU_LAZYSTACKING 1 1 -mfpu=fpv4-sp-d16 ãã æå¹
|
---|
899 |
|
---|
900 | NO_FPU
|
---|
901 | FPUã使ç¨ããªãï¼Cortex-M0/Cortex-M0+/Cortex-M3/Cortex-M4 ã®å ´åã«æå®ï¼
|
---|
902 | ãã£ã¹ãããã£çã§ã¯FPUã³ã³ããã¹ãã®ä¿å復帰ãè¡ããªãï¼
|
---|
903 |
|
---|
904 | FPU_NO_PRESERV
|
---|
905 | FPUã使ç¨ããï¼Cortex-M4F ã®å ´åã«æå®å¯è½ï¼
|
---|
906 | ãã£ã¹ãããã£çã§ã¯FPUã³ã³ããã¹ãã®ä¿å復帰ãè¡ããªãï¼
|
---|
907 | FPUã使ç¨å¯è½ãªã¿ã¹ã¯ã¯1åãããã¯ï¼ã·ã¹ãã ä¸ã®æé«åªå
|
---|
908 | 度ã®ISR群ã§ä½¿
|
---|
909 | ç¨å¯è½ï¼
|
---|
910 |
|
---|
911 | FPU_NO_LAZYSTACKING
|
---|
912 | FPUã使ç¨ããï¼Cortex-M4F ã®å ´åã«æå®å¯è½ï¼
|
---|
913 | ãã£ã¹ãããã£çã§ã¯FPUã³ã³ããã¹ãã®ä¿å復帰ãè¡ãï¼Lazy stacking ã¯
|
---|
914 | 使ç¨ããªãï¼
|
---|
915 | å
|
---|
916 | ¨ã¦ã®ã¿ã¹ã¯/ISRã§FPUã使ç¨å¯è½ï¼
|
---|
917 |
|
---|
918 | FPU_LAZYSTACKING
|
---|
919 | FPUã使ç¨ããï¼Cortex-M4F ã®å ´åã«æå®å¯è½ï¼
|
---|
920 | ãã£ã¹ãããã£çã§ã¯FPUã³ã³ããã¹ãã®ä¿å復帰ãè¡ãï¼Lazy stacking ã
|
---|
921 | 使ç¨ããï¼
|
---|
922 | å
|
---|
923 | ¨ã¦ã®ã¿ã¹ã¯/ISRã§FPUã使ç¨å¯è½ï¼
|
---|
924 |
|
---|
925 |
|
---|
926 | FPU_NO_LAZYSTACKINGæã®ã¬ã¸ã¹ã¿ã®ä¿åã»å¾©å¸°ã³ã¼ã
|
---|
927 |
|
---|
928 | FPU_NO_LAZYSTACKING ã®å ´åã¯ä¸è¬ã¬ã¸ã¹ã¿ã¨åãã¿ã¤ãã³ã°ã§ï¼ãã£ã¹ãã
|
---|
929 | ãå
|
---|
930 | ã®ã¿ã¹ã¯ãFPUã使ç¨ãã¦ããããå¤æãã¦ã¬ã¸ã¹ã¿ãä¿åã»å¾©å¸°ããã°
|
---|
931 | ããï¼è©²å½ããç®æã¯æ¬¡ã®éãã§ããï¼
|
---|
932 |
|
---|
933 | ãã£ã¹ããã(dispatch)
|
---|
934 | ã»CONTROL.FPCAããã§ãã¯ãã¦'1'ãªãs16-s31ãä¿åãã
|
---|
935 | ã»å¾©å¸°ç¨ã«CONTROL.FPCAãã¿ã¹ã¯ã¹ã¿ãã¯ã«ä¿å
|
---|
936 |
|
---|
937 | ãã£ã¹ãããããã®å¾©å¸°(dispatch)
|
---|
938 | ã»CONTROL.FPCAãã¿ã¹ã¯ã¹ã¿ãã¯ãã復帰ãã
|
---|
939 | ã»å¾©å¸°ããCONTROL.FPCAããã§ãã¯ãã¦'1'ãªãs16-s31ãã¿ã¹ã¯ã¹ã¿ãã¯ãã
|
---|
940 | 復帰ããï¼
|
---|
941 |
|
---|
942 | é
|
---|
943 | 延ãã£ã¹ããã(ret_int_4)
|
---|
944 | ã»ã¿ã¹ã¯ãå²ãè¾¼ã¾ããéã®EXC_RETURNãã¿ã¹ã¯ã¹ã¿ãã¯ã«ä¿åãã¦ãã
|
---|
945 | ã»EXC_RETURNãã¿ã¹ã¯ã¹ã¿ãã¯ãã復帰
|
---|
946 | ã»å¾©å¸°ããEXC_RETURN[4] == 0(FPU使ç¨)ãªãs16-s31ãã¿ã¹ã¯ã¹ã¿ãã¯ã«ä¿å
|
---|
947 | ããï¼
|
---|
948 | ã»å¾©å¸°ç¨ã«EXC_RETURNã®å¤ãã¿ã¹ã¯ã¹ã¿ãã¯ã«ä¿å
|
---|
949 |
|
---|
950 | é
|
---|
951 | 延ãã£ã¹ãããããã®å¾©å¸°(ret_int_r)
|
---|
952 | ã»ã¿ã¹ã¯ãå²ãè¾¼ã¾ããéã®EXC_RETURNã®å¤ãã¿ã¹ã¯ã¹ã¿ãã¯ãã復帰
|
---|
953 | ã»å¾©å¸°ããEXC_RETURN[4] == 0(FPU使ç¨)ãªãs16-s31ãã¿ã¹ã¯ã¹ã¿ãã¯ãã復帰
|
---|
954 | ã»å
|
---|
955 | ã®SVCãã³ãã©å¼ã³åºãæã«FPUã¬ã¸ã¹ã¿ãç©ã¾ãªãããã«CONTROL.FPCAãã¯ãªã¢ï¼
|
---|
956 |
|
---|
957 | FPU_LAZYSTACKINGæã®ã¬ã¸ã¹ã¿ã®ä¿åã»å¾©å¸°ã³ã¼ã
|
---|
958 |
|
---|
959 | FPU_NO_LAZYSTACKINGæã®ã³ã¼ãããã®ã¾ã¾ä½¿ç¨ããã¨FPU_LAZYSTACKINGã®å ´
|
---|
960 | åã¯ï¼å²è¾¼ã¿ã»ä¾å¤çºçå¾ã«æ¬¡ã®ã¿ã¤ãã³ã°ã§ä¾å¤ãã¬ã¼ã ã«FPUã®ã³ã³ãã
|
---|
961 | ã¹ãããã¼ãã¦ã§ã¢ã«ãã£ã¦èªåçã«ä¿åãããï¼
|
---|
962 |
|
---|
963 | ä¾å¤ã»å²è¾¼ã¿ãã³ãã©å®è¡ä¸
|
---|
964 | FPUã使ç¨ããã¿ã¹ã¯/ISRå®è¡ä¸ã«ä¾å¤ã»å²è¾¼ã¿ãçºçãï¼ä¾å¤ã»å²è¾¼ã¿ãã³
|
---|
965 | ãã©ã§FPUå½ä»¤ãå®è¡ããå ´åï¼FPCCR.LSPACT==1 ã¨ãªã£ã¦ããããï¼
|
---|
966 |
|
---|
967 | é
|
---|
968 | 延ãã£ã¹ãããæ(ret_int_4)
|
---|
969 | ä¾å¤ã»å²è¾¼ã¿ãã³ãã©ã§FPUã使ç¨ããªãã£ãå ´åã¯ï¼ret_int_4å®è¡æã«ã¯ã³
|
---|
970 | ã³ããã¹ãã¯ä¿åããã¦ããªãï¼ããã«åã¬ã¸ã¹ã¿ã®å¤ã¯æ¬¡ã®ããã«ãªã£ã¦ã
|
---|
971 | ãï¼
|
---|
972 | ã»FPCCR.LSPACT == '1'
|
---|
973 | ã»FPCAR = ä¾å¤ãã¬ã¼ã ã®FPUã¬ã¸ã¹ã¿ã®ä¿åã¢ãã¬ã¹(S0ã®ã¢ãã¬ã¹)
|
---|
974 | ret_int_4ã§ã¯ï¼s16-s31 ãã¿ã¹ã¯ã¹ã¿ãã¯ã«ä¿åããï¼ããã§FPUã使ç¨ãã
|
---|
975 | ããï¼s0-s15,FPSRã¯ä¾å¤ãã¬ã¼ã ã«ä¿åãããï¼
|
---|
976 |
|
---|
977 | 以ä¸ã®ç®æã¯FPU_LAZYSTACKINGã®å ´åã«ã®ã¿å¿
|
---|
978 | è¦ã§ããï¼
|
---|
979 |
|
---|
980 | å²è¾¼ã¿åºå£ã§ã®ã¿ã¹ã¯ä¾å¤å¼ã³åºãæ
|
---|
981 | FPUã使ç¨ããã¿ã¹ã¯å®è¡ä¸ã«ä¾å¤/å²è¾¼ã¿ãçºçãï¼ä¾å¤/å²è¾¼ã¿ã®åºå£ãã
|
---|
982 | ã¿ã¹ã¯ä¾å¤å¦çãå¼ã³åºããå ´åã«ã¯ï¼FPCCR.LSPACT == '1' ã¨FPUã³ã³ãã
|
---|
983 | ã¹ããä¿åããã¦ããªãç¶æ
|
---|
984 | ã§ã¿ã¹ã¯ä¾å¤ãå¼ã³åºãããå¯è½æ§ãããï¼ã¿ã¹
|
---|
985 | ã¯ä¾å¤ã§ext_tsk()ãå¼ã³åºããå ´åãä»ã®ã¿ã¹ã¯ã«ãã£ã¹ãããããï¼
|
---|
986 | ter_tsk()ã§çµäºãããããå ´åã«ã¯ï¼FPCCR.LSPACT ã '0'ã«ã¯ãªã¢ããå¿
|
---|
987 | è¦
|
---|
988 | ãããï¼ext_tsk()ã®ã±ã¼ã¹ã¯ã¿ã¼ã²ããä¾åé¨exit_and_dispatch()ãå¼ã³åº
|
---|
989 | ãããããï¼ããã§ã¯ãªã¢ããã°è¯ããï¼ter_tsk()ã§ã¯ã¿ã¼ã²ããä¾åé¨ã
|
---|
990 | å¼ã³åºããªãããï¼ã¯ãªã¢ãããã¨ãåºæ¥ãªãï¼ãã®ããï¼å²è¾¼ã¿åºå£ã§ã®ã¿
|
---|
991 | ã¹ã¯ä¾å¤å¼ã³åºãã¿ã¤ãã³ã°ã§FPUã³ã³ããã¹ããã¹ã¿ãã¯ã«æ ¼ç´ããããï¼
|
---|
992 | å¯ä½ç¨ã®ãªãFPUå½ä»¤ãçºè¡ããï¼
|
---|
993 | ãªãï¼ä»ã®ã¿ã¹ã¯ã«ãã£ã¹ããããããå ´åã¯ï¼CONTROL.FPCAã'1'ã§ç¡ãã
|
---|
994 | ã(ã¿ã¹ã¯ä¾å¤ã§FPUã使ç¨ããªãã£ãå ´å)ï¼s16ï½s31ã®FPUã¬ã¸ã¹ã¿ã®ä¿åã
|
---|
995 | è¡ãããï¼ä¾å¤ãã¬ã¼ã ã¸ã®æ¸ãæ»ããçºçããªãï¼
|
---|
996 |
|
---|
997 | CONTROL.FPCAã®ã»ããã»ã¯ãªã¢ã®ã¿ã¤ãã³ã°
|
---|
998 |
|
---|
999 | ã¯ãªã¢ããç®æãè¤æ°ç®æã«ãªãã¨ææ¡ãå°é£ã§ããããï¼ãã£ã¹ãããã£ã®å
|
---|
1000 | é ã§
|
---|
1001 | ã¯ä¸å¾CONTROL.FPCAã'0'ã«ã¯ãªã¢ããï¼
|
---|
1002 |
|
---|
1003 | dispatchãå¼ã³åºããã¿ã¹ã¯ã¸ã®ãªã¿ã¼ã³ããéã«ã¯ï¼æ»ãå
|
---|
1004 | ã®ã¿ã¹ã¯ãFPU
|
---|
1005 | ã使ç¨ãããå ´åã¯ï¼s16ï½s31ã®å¾©å¸°ãè¡ãããï¼ãã®å¦çã«ãã
|
---|
1006 | CONTROL.FPCAã'1'ã«ã»ãããããï¼
|
---|
1007 |
|
---|
1008 | ã¾ãï¼EXC_RETURNã«ãããªã¼ã¿ã³æã¯EXC_RETURNã®å¤ã«ãã£ã¦ãªã¼ã¿ã¼ã³æã«
|
---|
1009 | ãã¼ãã¦ã§ã¢çã«èªåçã«CONTROL.FPCAãå
|
---|
1010 | ã®ç¶æ
|
---|
1011 | ã«å¾©å¸°ãããã®ã§ã½ããã¦
|
---|
1012 | ã§ã¢ã«ããå¦çã¯å¿
|
---|
1013 | è¦ãªãï¼
|
---|
1014 |
|
---|
1015 | ã¿ã¹ã¯ä¾å¤ã®æ±ã
|
---|
1016 |
|
---|
1017 | ã¿ã¹ã¯ä¾å¤ã§FPUã使ç¨ãã¦ï¼é常ã®å¦çã§FPUã使ç¨ããªãå ´åã¯ï¼ã¿ã¹ã¯ä¾
|
---|
1018 | å¤ã®å¼ã³åºãã®åå¾ã§ CONTROL.FPCA ãä¿å復帰ããæ¹æ³ããããï¼ã¬ã¢ã±ã¼
|
---|
1019 | ã¹ã§ããã¨èãããããããµãã¼ãããªãï¼
|
---|
1020 |
|
---|
1021 | ABI
|
---|
1022 |
|
---|
1023 | GCCã§ã¯3種é¡é¸æå¯è½ï¼
|
---|
1024 |
|
---|
1025 | hard : æµ®åå°æ°ç¹å½ä»¤ã使ç¨ãã¦ABIã¯FPUã¬ã¸ã¹ã¿ã使ç¨ï¼
|
---|
1026 | soft : æµ®åå°æ°ç¹å½ä»¤ã使ç¨ããªãï¼
|
---|
1027 | softfp : æµ®åå°æ°ç¹å½ä»¤ã使ç¨ãããABIã¯softã¨åãï¼
|
---|
1028 |
|
---|
1029 | æ¢åã®ã©ã¤ãã©ãªã¨ãªã³ã¯ããå ´åã¯softfpãæå¹ã ãï¼ã¦ã¼ã¶ã¼ã«ã¹ã¿ãã¤
|
---|
1030 | ãºã¨ãã¦ãã£ãã©ã«ãã¯ï¼hardã¨ããï¼
|
---|
1031 |
|
---|
1032 | ãã¯ã
|
---|
1033 |
|
---|
1034 | FPUã³ã³ããã¹ã復帰ä¿åãæå¹åãããã¯ãï¼
|
---|
1035 |
|
---|
1036 | TOPPERS_FPU_CONTEXT
|
---|
1037 |
|
---|
1038 | FPUã®ä½¿ç¨ãæå¹åãããã¯ãï¼
|
---|
1039 |
|
---|
1040 | TOPPERS_FPU_ENABLE
|
---|
1041 |
|
---|
1042 | FPUã®ã¢ã¼ããã¯ãã£ãæå®ãããã¯ãï¼ARMCCã¨åããã¦æ¬¡ã®ãã¯ãã使ç¨ããï¼
|
---|
1043 | __TARGET_FPU_FPV4_SP
|
---|
1044 |
|
---|
1045 | FPU_NO_PRESERV/FPU_NO_LAZYSTACKING/FPU_LAZYSTACKINGã®å ´åã¯æ¬¡ã®ãã¯ããå®ç¾©ããï¼
|
---|
1046 |
|
---|
1047 | TOPPERS_FPU_NO_PRESERV
|
---|
1048 |
|
---|
1049 | TOPPERS_FPU_NO_LAZYSTACKING
|
---|
1050 |
|
---|
1051 | TOPPERS_FPU_LAZYSTACKING
|
---|
1052 |
|
---|
1053 |
|
---|
1054 | 16. æªè§£æ±ºèª²é¡
|
---|
1055 | ã»å²è¾¼ã¿ããã¯ã¨CPUä¾å¤ã®é¢ä¿
|
---|
1056 | BASEPRIã使ã£ãã¨ãã¦ãï¼ããCPUä¾å¤å¦çä¸ã«ä»ã®ä¾å¤ãçºçããã¨ï¼ã
|
---|
1057 | ã®ä¾å¤ã¯åãä»ããããªãããï¼ITRONä»æ§ã¯æºãããªãï¼
|
---|
1058 | ->ããããã¦ããã¥ã¢ã«è¨è¼ã«éããã.
|
---|
1059 | ã¡ã¢ãªãããã¯ã·ã§ã³ã®ä¾å¤ããã¹ã¯å¯è½ã§ããããè¦ä»¶çï¼
|
---|
1060 |
|
---|
1061 | 以ä¸ï¼
|
---|