source: asp_ccsproject/trunk/asp/arch/arm_m_gcc/common/core_design.txt@ 85

Last change on this file since 85 was 85, checked in by ecsg-okazaki, 10 years ago

2014/09/26 ECS E.Okazaki Folder configuration change

File size: 24.1 KB
Line 
1=====================================================================
2 ARM-Mプロセッサ依存部設計メモ
3 Last Modified: 2011 Jul 26 22:22:34
4=====================================================================
5
6○このドキュメントの位置づけ
7
8このドキュメントは,TOPPERS/ASPカーネルをARMvX-Mプロセッサに移植するため
9の設計メモである.
10
11
12○ARMVx-Mの仕様まとめ
13
14ARMvX-Mの仕様のうち,カーネルの設計に関係する事項
15についてまとめる.
16
17●レジスタ
18
19汎用レジスタはR0〜R15の16種類あり,R13のみが2バンク構成(PSP,MSP)とな
20っている.R15はPC, R14はリンクレジスタ(LR)となっている.R0〜R3,R12は
21スクラッチレジスタである.
22
23●コーリングコンベンション
24
25R0〜R4が引数,それ以上はスタック.戻り値は,R0〜R1に格納される.(ARMに
26より規定されているため,コンパイラに依存せずこのルールとなる.)
27
28●CONTROLレジスタ
29
30PSP,MSPの切り替え,PrivilageとUserモードのレジスタ.変更後は,インスト
31ラクションバッファフラッシュ命令を実行する必
32要がある(isb).CONTROLレ
33ジスタの詳細は,ARMv7-M Architecture Application Level Reference
34Manual の B1-9 を参ç…
35§ã®ã“と.
36
37●割込みベクタ
38
39ベクタテーブル型で,ベクタテーブルのアドレスは,リセット時は0x00で,
40Vector Table Offset Register(メモリマップドレジスタ) を操作すること
41で,任意のアドレスにé…
42ç½®å¯èƒ½ã§ã‚る.
43
44●優å…
45ˆåº¦
46
47値が小さい方が高優å…
48ˆåº¦ã¨ãªã‚Šï¼Œ0が最高優å…
49ˆåº¦ã¨ãªã‚‹ï¼Žä¸€æ–¹ï¼Œå¾Œè¿°ã™ã‚‹ãƒ—ロ
50セッサの割込み優å…
51ˆåº¦ã‚’設定するBASEPRIレジスタは'0'をセットすると,å…
52¨ã¦
53の割込みを許可するため,最高優å…
54ˆåº¦ã¯ï¼Œæœ‰åŠ¹ãªãƒ“ットのLSBを'1'とした値で
55ある(3bitの場合は0x20).また,割込みの優å…
56ˆåº¦ã«'0'を設定すると,
57BASEPRIレジスタでマスクできない割込みとなる.
58
59優å…
60ˆåº¦ã¯æœ€å¤§8bitであり,SoC毎に実装
61されているビット幅
62が異なる.実装
63さ
64れるビットが8bit以下の場合は,LSBから無効になる.例えば,実装
65されてい
66るビット幅
67が7bitの場合は,ビット0が無効となる.
68
69優å…
70ˆåº¦ã®ãƒ“ットフィールドのLSBから数ビットをサブ優å…
71ˆåº¦ã¨å‘¼ã¶ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰
72に設定することが可能である.残りの上位ビットをプリエンプション優å…
73ˆåº¦ã¨
74呼ぶ.プリエンプション優å…
75ˆåº¦ãŒåŒã˜ã§ï¼Œã‚µãƒ–優å…
76ˆåº¦ãŒç•°ãªã‚‹å„ªå…
77ˆåº¦ã®ã‚°ãƒ«ãƒ¼
78プは,お互いをプリエンプトすることができない.
79
80Reset,NMI,Hard Fault 以外の例外は割込みと同様に優å…
81ˆåº¦ãŒè¨­å®šå¯èƒ½ã§ã‚り,
82割込みマスク機能により,発生を禁止することが可能である.
83
84
85●CPUモード
86
87プロセッサは,ThreadモードもしくはHandlerモードのいずれかのモードとな
88る.
89
90●リセット時の状æ…
91‹
92
93リセット時はThreadモード,MSPが有効となっている.
94
95●Handlerモード
96
97例外/割込みを受け付けると遷移するモード.受け付けた例外/割込みの例外番
98号が,IPSRにセットされる.例外番号は,TRMで定められている番号である.
99
100 例外 例外番号
101 Reset 1
102 Non-makable Interrupt 2
103 Hard Fault 3
104 Memory Management 4
105 Bus Fault 5
106 Usage Fault 6
107 SVCall 11
108 Debug Monitor 12
109 PendSV 14
110 SysTick 15
111 IRQ0 16
112 IRQ1 17
113 ..
114
115例外/割込みを受け付けると,受け付けた例外/割込みの優å…
116ˆåº¦ä»¥ä¸‹ã®ä¾‹å¤–/割
117込みを禁止する.この優å…
118ˆåº¦ãƒžã‚¹ã‚¯ã‚’"NVIC優å…
119ˆåº¦ãƒžã‚¹ã‚¯"と呼ぶ.この優å…
120ˆåº¦
121は,ソフトウェアから変更することができず,例外/割込みのリターンにより
122割込み前の値に自動的に戻る.
123
124●スタックポインタ(PSPとMSP)
125
126スタックポインタは,PSPとMSPがあり,排他的に使用可能である.Handlerモ
127ードではMSPのみ使用可能であり,ThreadモードではCONTROLレジスタで選択可
128能である.CONTROLレジスタの1ビット目をセットするとPSPが有効に,クリア
129すると,MSPが有効になる.
130
131●ThreadモードとHandlerモードの遷移
132
133ThreadモードからHandlerモードへの遷移は,例外/割込みを受け付けることで
134発生する.一方,HandlerモードからThreadモードへの遷移は,PCに
135EXC_RETURN(0xfffffffx)の値を設定することにより行う(例外リターン処理と
136呼ぶ).EXC_RETURNの下位4bitにより,遷移å…
137ˆã®ãƒ¢ãƒ¼ãƒ‰ã‚„使用するスタックポ
138インタを変更可能である.例外リターンにより,PRIMASKやBASEPRIの値は変化
139しない.一方,FAULTMASKの値は'0'にクリアさせる.
140
141●EXC_RETURN
142
143例外/割込み受付け時にlrに設定される値.ビット31〜4ビットはå…
144¨ã¦'1'で,
145下位4bitは,受付け時のCPUモードやスタックを反映した値となっている.
146
147 0b0001 : Handlerモード
148 0b1001 : Threadモード with MSP
149 0b1101 : Threadモード with PSP
150
151●ThreadモードとHandlerモードの判定
152
153現状のモードを判定するには,IPSRを見て,'0'ならThreadモード,それ以外
154なら,Handlerモードとなる.
155
156●BASEPRIレジスタ
157
158設定した優å…
159ˆåº¦ä»¥ä¸‹ã®å„ªå…
160ˆåº¦ã®å‰²è¾¼ã¿ã®å—付を禁止する.この優å…
161ˆåº¦ãƒžã‚¹ã‚¯ã‚’
162"BASEPRI優å…
163ˆåº¦ãƒžã‚¹ã‚¯"と呼ぶ.'0'を設定すると,å…
164¨ã¦ã®å‰²è¾¼ã¿ã‚’許可する.
165例外/割込みの受付とリターンにより変化しない.例外/割込みに対する割込み
166優å…
167ˆåº¦ãƒžã‚¹ã‚¯ã¯ï¼ŒNVIC優å…
168ˆåº¦ãƒžã‚¹ã‚¯ã¨BASEPRIの設定値の高い方(値が小さい
169方)となる.
170
171●FAULTMASK
172
173FAULTMASKは'1'をセットすることにより,NMI以外のå…
174¨ã¦ã®å‰²è¾¼ã¿ã‚’禁止する.
175FAULTMASKは,例外のリターン処理により'0'にクリアさせる.
176
177●PRIMASKとWFI
178
179PRIMASKを'1'に設定すると,NMI と Hardware Fault 以外の例外/割込みを禁
180止する.PRIMASKは割込みの許可と割込み待
181ちをアトミックに行うために用い
182る.å…
183·ä½“的には,PRIMASKがセットされている状æ…
184‹ã§wfiを実行すると,割り込
185み待
186ちとなり,割込み受付けるとハンドラを実行せずに,wfiからリターンし
187てくる.
188
189●例外/割込みの受付
190
191・例外/割込みを受付けると,受付け時にアクティブなスタック上に以下のコ
192 ンテキストを保存する(例外フレームと呼ぶ).
193
194 -----------
195 | R0 | <- new SP
196 -----------
197 | R1 |
198 -----------
199 | R2 |
200 -----------
201 | R3 |
202 -----------
203 | R12 |
204 -----------
205 | LR |
206 -----------
207 | PC |
208 -----------
209 | xPSR |
210 -----------
211 | | <- old SP
212
213・プロセッサをHandlerモードとする.MSPが有効となる.
214・受付けた例外/割込みの例外番号をIPSRに設定する.
215・NVIC割込み優å…
216ˆåº¦ãƒžã‚¹ã‚¯ã‚’受付けた例外/割込みの優å…
217ˆåº¦ã«è¨­å®šã™ã‚‹ï¼Ž
218・lrにEXC_RETURNの値が設定される.
219・ベクタテーブルを読み込みハンドラを実行する.
220・スタックフレームは,Configureation and Control Register(CCR)の
221 STKALIGNが'1'の場合は,8byte境界にアラインされる.
222
223●例外/割込みからのリターン
224
225pcにEXC_RETURNの値を設定することにより,例外/割込みからリターンする.
226pcへの設定に使用可能な命令には制限があり,以下命令が使用可能である.
227
228 ・POP/LDM, LDR, BX
229
230●未解決課題
231
232・ベクターテーブルに登録する関数のアドレスのLSBは'1'にするべきか?
233・NVICは例外・割込みのネスト回数を内
234部的に管理しているらしい.
235 (!リファレンスを明らかに).
236 ソフトウェアでは,ネストの帳尻を合わせれば,リターンスタックを偽造し
237 ても問題ないか.
238
239
240○OSの実装
241
242
2431.ターゲット名
244
245 1-1 cm3(Cortex-M3)
246 1-2 armv7m(ARMV7M)
247 1-3 arm_m
248
249cm3では,Coretex-M1(armv6-m)をサポートする場合に問題となる.armv7mでは,
250armv8mがリリースされた場合に問題となる.ARM依存部はJSPでは,armv4とな
251っていたが,armv5やarmv7も動作するためASPでは単にarmとした.そのため,
252arm_mが無難と考えられる.
253
254
2552.ThreadモードとHandlerモードの使い分け
256
257 2-1
258 タスクコンテキストはThreadモード,非タスクコンテキストはHandlerモー
259 ドで動作させる.
260
261 2-2
262 タスクコンテキストと非タスクコンテキストå…
263±ã«Handlerモードで動作させ
264 る.
265
266プロセッサの設計方針を考æ…
267®ã™ã‚‹ã¨2-1が有力.2-1での問題点としては,割込
268みハンドラからタスクへのリターン時にモードの変更が以下の様に多発するこ
269とが挙げられる.
270
2711.割込みハンドラ : Handlerモード
2722.タスク例外ハンドラの呼び出し : Threadモード
2733.タスクへのリターン処理 : Handlerモード
2744.タスクの再開 : Threadモード
275
2763でHandlerモードに移行する必
277要があるのは,例外フレームを用いて復帰する
278には,Handlerモードで例外リターン処理を行う必
279要があるためである.ARMで
280は,複数レジスタのロードとCPSRの復帰を同時に行えるが,M3は行えないため,
281この方法で割込みå…
282ˆã®ã‚¿ã‚¹ã‚¯ã«ãƒªã‚¿ãƒ¼ãƒ³ã™ã‚‹å¿…
283要がある.
284
2852-2の場合の割込みハンドラからタスクへのリターン時にモードの変更を以下
286に示す.また,2-2では割込み優å…
287ˆåº¦ã®æœ€ä½Žå€¤ã‚’タスクの実行時の優å…
288ˆåº¦ã¨ã—
289てリザーブする必
290要がある.
291
2921.割込みハンドラ : Handlerモード
2932.NVIC優å…
294ˆåº¦ãƒžã‚¹ã‚¯'0'を0へ : Threadモード
2953.最低優å…
296ˆåº¦ã®Handlerモードへ : Handlerモード
2974.タスク例外ハンドラの呼び出し : Handlerモード
2985.タスクへのリターンの前処理 : Threadモード
2993.タスクへのリターン : Handlerモード
3004.タスクの再開 : Handlerモード
301
302割込みハンドラからタスクのリターンに関しては,2-2であっても,2を実行す
303る場合に,NVIC優å…
304ˆåº¦ãƒžã‚¹ã‚¯ã‚’'0'にするため,例外リターン処理を行う必
305要
306がある.また,NVIC自体が,割込みのネスト回数を管理しているため,3から4
307への遷移のために,いったん例外/割込みを受付けた状æ…
308‹ã«ã™ã‚‹å¿…
309要があるた
310め,結果的に2-1以上の遷移が必
311要となる.
312
3132-2の場合は,MSPしか使えないため,割込みのå…
314¥ã‚Šå£ã§ãƒã‚¹ãƒˆå›žæ•°ã‚’判断して,
315スタックをå…
316¥ã‚Œæ›¿ãˆã‚‹å¿…
317要がある.
318
319HRP等でメモリ保護を用いる場合は2-1となる.
320
321以上の理由により,2-1を採用する.ただし2-1は,カーネル起動時とIDLEルー
322プの扱いを検討する必
323要がある.これらについては別途議論する.
324
325
3263.ディスパッチャの実行モード
327
328 3-1
329 Threadモードで実行する
330
331 3-2
332 Handlerモードで実行する
333
334ディスパッチャをThreadモードで実行すると,割込みによりプリエンプトされ
335たタスクに戻る場合は次のようなパスになる.
336
337 1. ディスパッチャ呼び出し : Threadモード
338 2. ディスパッチャ実行 : Threadモード
339 3. タスク例外実行 : Threadモード
340 4.タスクへのリターン処理 : Handlerモード
341 5. タスクの再開 : Threadモード
342
343割込みハンドラから自らディスパッチしたタスクへリターンする場合は次のパ
344スになる.
345
346 1.割込みハンドラ : Handlerモード
347 2.ディスパッチャ実行 : Threadモード
348 3.タスク例外ハンドラの呼び出し : Threadモード
349 4.タスクへのリターン : Handlerモード
350 5.タスクの再開 : Threadモード
351
352一方,ディスパッチャをHandlerモードで実行すると,割込みによりプリエン
353プトされたタスクに戻る場合は次のようなパスになる.
354
355 1. ディスパッチャ呼び出し : Threadモード
356 2. ディスパッチャ実行 : Handlerモード
357 3. タスク例外実行 : Threadモード
358 4.タスクへのリターン : Handlerモード
359 5. タスクの再開 : Threadモード
360
361割込みハンドラの出口から自らディスパッチしたタスクへリターンする場合は
362次のパスになる.
363
364 1.割込みハンドラ : Handlerモード
365 2.ディスパッチャ実行 : Handlerモード
366 3.タスク例外ハンドラの呼び出し : Threadモード
367 4.タスクへのリターン : Handlerモード
368 5.タスクの再開 : Threadモード
369
370タスク例外ハンドラがないOSの場合は,Handlerモードで実行した方がモード
371の遷移の回数が減るが,タスク例外ハンドラがあると,Threadモードの方が遷
372移回数が減るため,Threadモードとする.
373
374メモリ保護を考æ…
375®ã™ã‚‹ã¨ï¼Œãƒ‡ã‚£ã‚¹ãƒ‘ッチャはHandlerモードで動作させた方が
376効率がよいと考えられる(SVCでハンドラを呼び出すとHandlerモードとなるた
377め).
378
379
3804.スタックの使い分け
381
382 4-1
383 タスクコンテキストをPSP, 非タスクコンテキストをMSP
384 4-2
385 タスクコンテキスト,非タスクコンテキストå…
386±ã«MSP
387
3884-2の場合,割込みのå…
389¥ã‚Šå£ã§ãƒã‚¹ãƒˆå›žæ•°ã‚’判断して,スタックをå…
390¥ã‚Œæ›¿ãˆã‚‹
391必
392要がある.2でタスクコンテキストはThreadモード,非タスクコンテキスト
393はHandlerモードで動作させるとしたため,4-1を採用すると,割込みのå…
394¥ã‚Šå£
395で自動的にスタックが切り替わる.ThreadモードでのPSPのアクセスも,
396mrs/msr命令で行えるため,4-1を採用する.
397
398
3995.コンテキストの判定
400
401 5-1
402 IPSRが'0'(Threadモード)ならタスクタスクコンテキスト,'1'(Handlerモー
403 ド)なら非タスクコンテキストとする.
404
405 5-2
406 割込みのネスト回数を保持する変数を用意.1以上で非タスクコンテキスト.
407
408 5-3
409 アクティブなスタックにより判断(MSPなら非タスクコンテキスト,PSPなら
410 タスクコンテキストとする)
411
4125-1は,ソフトウェア側でコンテキスト管理のための処理を行う必
413要がないと
414いうメリットがある.しかしながら,カーネルの起動時Threadモードであるた
415め,Handlerモードへ移行する必
416要がある.ASPカーネルでは,IDLEループ実行
417は非タスクコンテキストとして動作させる必
418要があるため,IDLEループは
419Handlerモードで動作させる必
420要がある.IDLEループはディスパッチャから呼
421び出される.3で定めたように,ディスパッチャをThreadモードで動作させる
422ため,IDLEループを呼び出す際には,Handlerモードへ遷移する必
423要がある.
424Handlerモードへの遷移は,SVC/PendSVCを用いると実現可能であるが,6の割
425込みにプリエンプトされたタスクへのリターン時のHandlerモードへの移行で
426もSVC/PendSVCの使用が必
427要となるため,SVCハンドラでは,どの目的で呼び出
428されたか判定する必
429要が出てくるため,オーバヘッドが増大する.
430
4315-2では,カーネル起動時やIDLEループ時に変数を'1'に設定すればよいことに
432なる.この場合,カーネル起動時やIDLEループ時にThreadモードで実行しても
433動作に問題がないよう,特に割込みの出å…
434¥ã‚Šå£ã®è¨­è¨ˆã‚’注意する必
435要がある.
436
437カーネル起動時に関しては,å…
438¨å‰²è¾¼ã¿ã‚’禁止しており,割込みがå…
439¥ã‚‰ãªã„ので
440特に問題はない.IDLEループ時は,ThreadモードでMSPとPSPの選択が可能であ
441ることを利用して,非タスクコンテキストのスタックであるMSPに変更する.
442例外/割込みのå…
443¥ã‚Šå£ã§ã¯ï¼Œå¤šé‡å‰²è¾¼ã¿ã§ã‚るかをEXC_RETURNのモード判定の
444ビットではなく,スタックの判定ビットで行えば問題ない.例外/割込みから
445のリターンに関しては,多重割込みの判定は,å…
446¥ã‚Šå£ã¨åŒæ§˜ã«EXC_RETURNのス
447タック判定ビットで行えばよい.例外リターン処理時にpcに代å…
448¥ã™ã‚‹
449EXC_RETURNの値を一律0xfffffffd (Threadモード with MSP)とするのではなく,
450例外/割込み受付け時にLRに設定されるEXC_RETURNを用いることにより,IDLE
451ループに割り込んだ場合でも問題なくリターンする.
452
453カーネル起動時は,MSPがアクティブであり,割込みハンドラ実行時はHandler
454モードであることからMSPがアクティブでり,IDLEループ時にMSPをアクティブ
455に設定すると,非タスクコンテキストはå…
456¨ã¦ï¼ŒMSPをアクティブにして動作す
457ることになる.また,割込み時は割込み前にアクティブなスタックの情
458報が,
459EXC_RETURNに設定される.そのため,コンテキストの判定は,割込みネスト回
460数を保持する変数がなくとも,アクティブなスタックを見ればよいことになる.
461また,exc_sense_context()に関しては,例外フレーム中にEXC_RETURNを追加
462し,その内
463容により判断すればよい.以上の理由により,5-3を採用する.
464
465
4666.割込みにプリエンプトされたタスクへのリターン時のHandlerモードへの移
467 行方法
468
469 6-1
470 SVCを用いる
471 6-2
472 PendSVCを用いる
473
474PendSVCとSVCの違いは,PendSVCが要求がキューイングされ,SVCは要求がキュ
475ーイングされないことである.割込みにプリエンプトされたタスクへのリター
476ン時のHandlerモードへの移行は,キューイングされずに即座に処理される必
477
478要があるため,どちらで実現しても問題ない.どちらをカーネルのリソースし
479て使用するかの選択だけである.
480
481どちらを使うとしても,優å…
482ˆåº¦ã®è¨­å®šãŒå•é¡Œã¨ãªã‚‹ï¼Žãƒ‡ã‚£ã‚¹ãƒ‘ッチャから割込
483みにプリエンプトされたタスクへのリターンまでの処理は,少なくともCPUロ
484ック状æ…
485‹ã§å®Ÿè¡Œã•ã‚Œãªã‘ればならない.SVCやPendSVCはどちらも割込み優å…
486ˆåº¦
487を持つため,NVIC優å…
488ˆåº¦ãƒžã‚¹ã‚¯ã‚ˆã‚ŠBASEPRI優å…
489ˆåº¦ãƒžã‚¹ã‚¯ã®æ–¹ãŒé«˜ã„場合,処
490理されない.
491
492CPUロック状æ…
493‹ã‚’BASEPRIの設定で実現した場合,その設定値をSVCやPendSVCに
494設定した値より低くする必
495要がある.言い換えると,SVCやPendSVCの優å…
496ˆåº¦ã‚’
497CPUロック時の優å…
498ˆåº¦ãƒžã‚¹ã‚¯ã®å€¤ã‚ˆã‚Šé«˜ã„値(他の割込みより高い優å…
499ˆåº¦ï¼‰ã¨
500する必
501要がある.
502
503CPUロック状æ…
504‹ã‚’FAULTMASKやPRIMASKで実現した場合は,これらが設定される
505と,SVCやPendSVCが受付けられないため,いったんBASEPRIにより割込みをマ
506スクするように設定する必
507要がある.この場合も,SVCやPendSVCは他の割込み
508より高い優å…
509ˆåº¦ã‚’設定する必
510要がある.
511
512以上により,Handlerモードへの移行のためには,CPUロック状æ…
513‹ã‚’BASEPRIで
514実現し,SVCやPendSVCに設定する優å…
515ˆåº¦ã‚’カーネル管理内
516の最高優å…
517ˆåº¦ã‚ˆã‚Šä¸€
518つ高い優å…
519ˆåº¦ã«è¨­å®šã™ã‚‹å¿…
520要がある.
521
522
5237. 例外/割込み出å…
524¥ã‚Šå£ã§ã®å¤šé‡å‰²è¾¼ã¿ã®åˆ¤æ–­
525
5267-1
527 EXC_RETURNのモード判定ビット
5287-2
529 EXC_RETURNのスタック判定ビット
5307-3
531 割込みネスト回数の管理変数
532
533例外/割込み受付け時は,受付けた例外/割込み以下の割込みは禁止するが,å…
534¨
535割込み禁止状æ…
536‹ã«ã¯ãªã‚‰ãªã„.そのため,割込みネスト回数の管理変数をイン
537クリメントする前に割込みがå…
538¥ã‚‹å¯èƒ½æ€§ãŒã‚るため,7-3は使用することがで
539きない.
540
5415で議論した通り,IDLEループをThreadモードで実行するため,7-1ではなく,
5427-2で判断する必
543要がある.
544
545
5468. IDLEループ
547
5488-1
549 Threadモードで実行
5508-2
551 Handlerモードで実行
552
5535で議論した通り,Threadモードで実行できた方がオーバヘッドが小さい.ま
554た,Threadモードで実行しても,割り込みの出å…
555¥ã‚Šå£ã§æ­£ã—く非タスクコンテ
556キストと判定できれば,Threadモードで問題ない.
557
558
5599.カーネル管理外の割込みのサポート
560
5619-1
562 カーネル管理外の割込みをサポートしない
5639-2
564 カーネル管理外の割込みをサポートする
565
566ベクタテーブルをサポートしており,割込みハンドラもC言語で記述可能であ
567るため,サポートが容易であるため,サポートする.
568
569
57010. CPUロック
571
57210-1
573 BASEPRIを使用
57410-2
575 FAULTMASK/PRIMASKを使用
576
577カーネルの管理外の割込みをサポートするなら,BASEPRIを使用する必
578要があ
579る.
580
581
58211. 割込みロックとCPU例外の関係
583
58411-1
585 BASEPRIを使用
58611-2
587 FAULTMASK/PRIMASKを使用
588
589FAULTMASK/PRIMASKを使用すると,NMI と Hardware Fault 以外のCPU例外も禁
590止されてしまう.
591
592BASEPRIを用いると,割込みロック中にもCPU例外を受付けたい場合は,
593BASEPRIを用いて,最高優å…
594ˆåº¦ã‚’CPU例外のためにリザーブする必
595要がある.
596
597割込みロック時も,CPU例外を受付けるようにしたければBASEPRIを使用する必
598
599要がある.
600
601μIRON4.0仕様の3.5.3では,CPU例外の優å…
602ˆåº¦ã¯æ¬¡ã®ã‚ˆã†ã«å®šã‚ã‚‰ã‚Œã¦ã„る.
603
604"CPU例外ハンドラの優å…
605ˆé †ä½ã¯ï¼ŒCPU例外が発生した処理の優å…
606ˆåº¦ã¨ï¼Œãƒ‡ã‚£ã‚¹
607パッチャの優å…
608ˆé †ä½ã®ã„ずれかよりも高い."
609
610CPU例外が発生した処理の優å…
611ˆåº¦ã‚ˆã‚Šã‚‚高いとあるので,CPUロックや割込みロ
612ック状æ…
613‹ã®ã‚¿ã‚¹ã‚¯ã§ç™ºç”Ÿã—た場合でも,優å…
614ˆã—て実行されるべきだとも考えら
615れる.
616
617一方,TOPPERS標準割込み処理モデルの仕様書では,CPU例外は,プロセッサ毎
618に異なるため,CPU例外の処理モデルの標準化検討の対象外としている.その
619ため,ARM-Mでの扱いを決めて,マニュアルに明記すればよいと考えられる.
620
621
62212. 外部優å…
623ˆåº¦ã¨å†…
624部優å…
625ˆåº¦ã®å¤‰æ›
626
627外部優å…
628ˆåº¦ã¨ã¯APIで指定する割込み優å…
629ˆåº¦(PRI型)のことであり,値が小さい
630ほど優å…
631ˆåº¦ãŒé«˜ã„.割込みハンドラには,-1から連続した負の値を設定可能で
632ある.内
633部優å…
634ˆåº¦ã¯ï¼ŒBASEPRIやNVICの優å…
635ˆåº¦ãƒ¬ã‚¸ã‚¹ã‚¿ã«è¨­å®šã™ã‚‹å€¤ã§ã‚る.
636
637実装
638される割込み優å…
639ˆåº¦ã®ãƒ“ット幅
640を TBITW_IPRI とすると,設定可能な外部
641優å…
642ˆåº¦ã¯æ¬¡ã®ã‚ˆã†ã«ãªã‚‹ï¼Ž
643
644 TIPM_ENAALL(=0)〜 -(1 << TBITW_IPRI)
645
646
64713. カーネル管理内
648の最高優å…
649ˆåº¦(CPUロック状æ…
650‹ã§ã®å„ªå…
651ˆåº¦ãƒžã‚¹ã‚¯)
652
6536.で述べたように,割込みの出口でSVCハンドラを呼び出す必
654要があるため,
655SVCハンドラはCPUロック状æ…
656‹ã®BASEPRIに設定する優å…
657ˆåº¦ãƒžã‚¹ã‚¯ã‚ˆã‚Šé«˜ã„優å…
658ˆåº¦
659を設定する必
660要がある.
661
662実装
663される割込み優å…
664ˆåº¦ã®ãƒ“ット幅
665を TBITW_IPRI,優å…
666ˆåº¦ä¸­ã®ã‚µãƒ–優å…
667ˆåº¦ã®
668ビット幅
669をTBIT_IPRIとすると,CPUロック状æ…
670‹ï¼ˆã‚«ãƒ¼ãƒãƒ«ç®¡ç†å†…
671割込みに設定
672可能な最高優å…
673ˆåº¦ï¼‰ã¨ã—て指定可能な優å…
674ˆåº¦ãƒžã‚¹ã‚¯ã®è¨­å®šç¯„囲は以下の値の範
675囲となる.
676
677 -(2^(TBIW_IPRI) - 1) + (2^TBITW_SUBIPRI) 〜 -1
678
679
68014. 未解決課題
681
682・割込みロックとCPU例外の関係
683 BASEPRIを使ったとしても,あるCPU例外処理中に他の例外が発生すると,そ
684 の例外は受け付けられないため,ITRON仕様は満たせない.
685 ->あきらめてマニュアル記載に逃げるか.
686 メモリプロテクションの例外もマスク可能であるため要件等.
687
688以上.
Note: See TracBrowser for help on using the repository browser.