source: asp3_wo_tecs/trunk/doc/extension.txt@ 306

Last change on this file since 306 was 306, checked in by ertl-honda, 7 years ago

3.1.0を反映

File size: 23.1 KB
Line 
1
2 TOPPERS/ASP3カーネル
3 機能拡張・チューニングガイド
4
5 対応バージョン: Release 3.1
6 最終更新: 2016年3月31日
7
8このドキュメントは,TOPPERS/ASPカーネル3を,機能拡張・チューニングする
9ための方法(またはヒント)を説明するものである.
10
11----------------------------------------------------------------------
12 TOPPERS/ASP Kernel
13 Toyohashi Open Platform for Embedded Real-Time Systems/
14 Advanced Standard Profile Kernel
15
16 Copyright (C) 2005-2016 by Embedded and Real-Time Systems Laboratory
17 Graduate School of Information Science, Nagoya Univ., JAPAN
18
19 上記著作権者
20は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
21 ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
22 変・再é…
23å¸ƒï¼ˆä»¥ä¸‹ï¼Œåˆ©ç”¨ã¨å‘¼ã¶ï¼‰ã™ã‚‹ã“とを無償で許諾する.
24 (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
25 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
26 スコード中に含まれていること.
27 (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
28 用できる形で再é…
29å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é…
30å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
31 者
32マニュアルなど)に,上記の著作権表示,この利用条件および下記
33 の無保証規定を掲載すること.
34 (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
35 用できない形で再é…
36å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ
37 と.
38 (a) 再é…
39å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€…
40マニュアルなど)に,上記の著
41 作権表示,この利用条件および下記の無保証規定を掲載すること.
42 (b) 再é…
43å¸ƒã®å½¢æ…
44‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに
45 報告すること.
46 (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
47 害からも,上記著作権者
48およびTOPPERSプロジェクトをå…
49è²¬ã™ã‚‹ã“と.
50 また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
51 由に基づく請求からも,上記著作権者
52およびTOPPERSプロジェクトを
53 å…
54è²¬ã™ã‚‹ã“と.
55
56 本ソフトウェアは,無保証で提供されているものである.上記著作権者
57お
58 よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
59 に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
60 アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
61 の責任を負わない.
62
63 $Id: extension.txt 716 2016-03-31 06:16:23Z ertl-hiro $
64----------------------------------------------------------------------
65
66○目次
67
68・エラーチェックの省略
69・特殊目的のレジスタの扱い
70・拡張パッケージの使い方
71 - ドリフト調整機能拡張パッケージ
72 - メッセージバッファ機能拡張パッケージ
73 - オーバランハンドラ機能拡張パッケージ
74 - タスク優å…
75ˆåº¦æ‹¡å¼µãƒ‘ッケージ
76 - 制約タスク拡張パッケージ
77 - サブ優å…
78ˆåº¦æ©Ÿèƒ½æ‹¡å¼µãƒ‘ッケージ
79 - 動的生成機能拡張パッケージ
80・CPU例外ハンドラの直接呼出し
81 - TA_DIRECT属性の導å…
82¥
83 - ターゲット依存部の修正箇所
84
85
86○エラーチェックの省略
87
88サービスコールのオーバヘッドを削減するために,静的なエラーのチェックを
89省略する方法がある.ASP3カーネルにおいては,静的なエラーのチェックはす
90べてCHECKマクロを用いて行っているため,kernel/check.h中のCHECKマクロを
91変更することで,静的なエラーのチェックを省略することができる.
92
93例えば,オブジェクトIDのチェックを省略したい場合には,CHECK_IDマクロの
94定義を,次のように変更すればよい.
95
96#define CHECK_ID(exp) ((void)(exp))
97
98このマクロの定義を空にする方法もあるが,パラメータに副作用のある式が書
99かれている可能性を考えると(副作用のある式は書くべきではないが,書かれ
100ているコードがå…
101¥ã£ã¦ãã‚‹å¯èƒ½æ€§ãŒå…
102¨ããªã„とは言えない),上の定義の方が
103安å…
104¨ã§ã‚る.副作用のない式であれば,最適化によって削除することができる
105ため,実行時効率には影響がないと期待
106できる.ただし,最適化によって削除
107されない場合には,副作用のある式が書かれていないことを確認した上で,マ
108クロの定義を空にしてもよい.
109
110もう少し小さい粒度でエラーチェックを省略したい場合には,kernel/check.h
111中のVALIDマクロを変更する方法がある.例えば,タスクIDの中でチェックを省
112略したい場合には,VALID_TSKIDマクロの定義を,次のように変更すればよい.
113
114#define VALID_TSKID(tskid) (true)
115
116
117○特殊目的のレジスタの扱い
118
119FPUレジスタやDSPレジスタなどの特殊目的のレジスタ(以下,特殊レジスタ)
120を持つプロセッサでは,レジスタの扱いについて大きく次の3つの方法が考えら
121れる.
122
123(1) 特殊レジスタをタスクのコンテキストに含めない
124
1251つのタスクのみが特殊レジスタを使用する場合には,特殊レジスタをタスクの
126コンテキストに含める必
127要がなく,カーネルで管理する必
128要がない.
129
130(2) 特殊レジスタをタスクのコンテキストに含める
131
132複数のタスクが特殊レジスタを使用する場合には,特殊レジスタをタスクのコ
133ンテキストに含める方法が最も単純である.そのためには,タスクディスパッ
134チャと割込みハンドラ/CPU例外ハンドラの出å…
135¥å£ã§ï¼Œç‰¹æ®Šãƒ¬ã‚¸ã‚¹ã‚¿ã‚’保存/復帰
136するコードを追加する必
137要がある.実際の保存/復帰場所は,スクラッチレジス
138タとそれ以外のレジスタで異なるため,注意が必
139要である.
140
141(3) 特殊レジスタをコンテキストに含めるかどうかをタスク毎に指定する
142
143特殊レジスタを使用するタスクと使用しないタスクがある場合で,すべてのタ
144スクのコンテキストに特殊レジスタを含める方法ではオーバヘッドが問題にな
145る場合には,特殊レジスタをコンテキストに含めるかどうかをタスク毎に指定
146する方法が有力である.これを実現する方法は次の通りである.
147
148まず,特殊レジスタをコンテキストに含めるかどうかを指定するタスク属性を
149設ける.例えば,FPUレジスタであれば,タスク属性にTA_FPUを設ける.タスク
150ディスパッチャでは,タスク属性を見て,その属性が設定されていれば特殊レ
151ジスタを保存/復帰する.
152
153ハードウェア的に特殊レジスタがディスエーブルできる場合には,その属性が
154設定されていないタスクに切り換える時に特殊レジスタをディスエーブルする
155と,誤って特殊レジスタを使った場合を検出できる.
156
157さらに,割込みハンドラ(ISR,周期ハンドラ,アラームハンドラを含む)や
158CPU例外ハンドラで特殊レジスタを使用する場合には,これらの処理単位にも
159特殊レジスタを使用するかどうかの属性を設ける方法が考えられる.
160
161ここで,タスク(または他の処理単位)が特殊レジスタを使用するかどうかは,
162コンパイラやライブラリに依存する場合があるため,注意が必
163要である.例え
164ば,浮動小数点演算を含まないプログラムであっても,コンパイラがその方が
165性能が高いと判断すれば,浮動小数点命令を生成する場合がある.
166
167
168○拡張パッケージの使い方
169
170ASP3カーネルでは,いくつかの拡張機能を実装
171するために,拡張パッケージを
172サポートしている.拡張パッケージは,extensionディレクトリに置いてある.
173
174拡張パッケージを使用する場合には,UNIXであれば,ASP3カーネルのソースファ
175イルのトップディレクトリで,
176
177 % cp -r extension/<拡張パッケージのディレクトリ名>/* .
178
179を実行する.この時,å…
180ƒã®ï¼ˆæ‹¡å¼µå‰ã®ï¼‰ã‚½ãƒ¼ã‚¹ãƒ•ã‚¡ã‚¤ãƒ«ã¯ä¸Šæ›¸ãã•ã‚Œã¦ã—まう
181ため,拡張しないカーネルも使用したい場合には,別のディレクトリにソース
182ファイルを展開して,上のコマンドを実行すること.
183
184複数の拡張パッケージを使うことは考æ…
185®ã—ていないが,拡張パッケージの組み
186合わせによっては,手作業により複数の拡張パッケージをマージすることは可
187能である.
188
189●ドリフト調整機能拡張パッケージ
190
191ドリフト調整機能拡張パッケージは,ドリフトの調整機能を追加するための拡
192張パッケージである.ドリフト調整機能拡張パッケージは,extension/driftディ
193レクトリに置いてある.
194
195ドリフト調整機能拡張パッケージでは,TOPPERS_SUPPORT_DRIFTがkernel.h中で
196定義されているので,これを用いてドリフト調整機能を使用できるかどうかを
197判別することができる.
198
199ドリフト調整機能拡張パッケージにより追加されるサービスコール
200
201 ER ercd = set_dft(int32_t drift)
202
203●メッセージバッファ機能拡張パッケージ
204
205メッセージバッファ機能拡張パッケージは,メッセージバッファ機能を追加す
206るための拡張パッケージである.メッセージバッファ機能拡張パッケージは,
207extension/messagebufディレクトリに置いてある.
208
209メッセージバッファ機能拡張パッケージでは,TOPPERS_SUPPORT_MESSAGEBUFが
210kernel.h中で定義されているので,これを用いてメッセージバッファ機能を使
211用できるかどうかを判別することができる.
212
213メッセージバッファ機能拡張パッケージでは,メッセージバッファに対する送
214信待
215ち状æ…
216‹ã®ã‚¿ã‚¹ã‚¯ãŒè¤‡æ•°å¾…
217ち解除される場合がある.この場合,サービスコー
218ルの実行時間およびカーネル内
219での割込み禁止時間が,待
220ち解除されるタスク
221の数の数のオーダで長くなるので注意が必
222要である.メッセージバッファに対
223する送信待
224ち状æ…
225‹ã®ã‚¿ã‚¹ã‚¯ãŒè¤‡æ•°å¾…
226ち解除されるのは,メッセージバッファ管
227理領域に格納されたメッセージが受信された結果,管理領域に空き領域が生じ
228た場合に加えて,送信待
229ち行列のå…
230ˆé ­ã«ã¤ãªãŒã‚Œã¦ã„るタスクの強制終了や待
231
232ち解除の場合にも生じる.
233
234メッセージバッファ機能拡張パッケージにより追加されるサービスコール
235
236 ER ercd = snd_mbf(ID mbfid, const void *msg, uint_t msgsz)
237 ER ercd = psnd_mbf(ID mbfid, const void *msg, uint_t msgsz)
238 ER ercd = tsnd_mbf(ID mbfid, const void *msg, uint_t msgsz, TMO tmout)
239 ER_UINT msgsz = rcv_mbf(ID mbfid, void *msg)
240 ER_UINT msgsz = prcv_mbf(ID mbfid, void *msg)
241 ER_UINT msgsz = trcv_mbf(ID mbfid, void *msg, TMO tmout)
242 ER ercd = ini_mbf(ID mbfid)
243 ER ercd = ref_mbf(ID mbfid, T_RMBF *pk_rmbf)
244
245メッセージバッファ機能拡張パッケージにより追加される静的API
246
247 CRE_MBF(ID mbfid, { ATR mbfatr, uint_t maxmsz, size_t mbfsz, void *mbfmb })
248
249メッセージバッファ機能拡張パッケージでは,memcpyを使用しているため,標
250準Cライブラリが必
251要である.標準Cライブラリを用意する代わりに,memcpy関
252数のみを自分で用意してもよい.
253
254●オーバランハンドラ機能拡張パッケージ
255
256オーバランハンドラ機能拡張パッケージは,オーバランハンドラ機能を追加す
257るための拡張パッケージである.ただし,この拡張パッケージを使うためには,
258ターゲット依存部が対応している必
259要がある.オーバランハンドラ機能拡張パッ
260ケージは,extension/ovrhdrディレクトリに置いてある.
261
262オーバランハンドラ機能拡張パッケージで,ターゲット依存部が拡張パッケー
263ジに対応している場合には,TOPPERS_SUPPORT_OVRHDRがkernel.h中で定義され
264るので,これを用いてオーバランタイマ機能が使用できるかどうかを判別する
265ことができる.
266
267オーバランハンドラ機能拡張パッケージにより追加されるサービスコール
268
269 ER ercd = sta_ovr(ID tskid, PRCTIM ovrtim)
270 ER ercd = stp_ovr(ID tskid)
271 ER ercd = ref_ovr(ID tskid, T_ROVR *pk_rovr)
272
273オーバランハンドラ機能拡張パッケージにより追加される静的API
274
275 DEF_OVR({ ATR ovratr, OVRHDR ovrhdr })
276
277●タスク優å…
278ˆåº¦æ‹¡å¼µãƒ‘ッケージ
279
280タスク優å…
281ˆåº¦æ‹¡å¼µãƒ‘ッケージは,タスク優å…
282ˆåº¦ã‚’最大256段階に拡張するための
283拡張パッケージである.この拡張パッケージは,タスク優å…
284ˆåº¦ã«åŠ ãˆã¦ï¼Œãƒ‡ãƒ¼
285タ優å…
286ˆåº¦ï¼Œãƒ¡ãƒƒã‚»ãƒ¼ã‚¸å„ªå…
287ˆåº¦ï¼Œå‰²è¾¼ã¿ã‚µãƒ¼ãƒ“スルーチン優å…
288ˆåº¦ã‚‚256段階に拡張
289する.タスク優å…
290ˆåº¦æ‹¡å¼µãƒ‘ッケージは,extension/pri_levelディレクトリに置
291いてある.
292
293タスク優å…
294ˆåº¦æ‹¡å¼µãƒ‘ッケージでは,TOPPERS_SUPPORT_PRI_LEVELがkernel.h中で
295定義されているので,これを用いてタスク優å…
296ˆåº¦ã®ç¯„囲が拡張されているかど
297うかを判別することができる.
298
299●制約タスク拡張パッケージ
300
301制約タスク拡張パッケージは,制約タスクの機能を追加するための拡張パッケー
302ジである.制約タスク拡張パッケージは,extension/rstr_taskディレクトリに
303置いてある.
304
305制約タスク拡張パッケージでは,TOPPERS_SUPPORT_RSTR_TASKがkernel.h中で定
306義されているので,これを用いて制約タスクの機能が使用できるかどうかを判
307別することができる.
308
309●サブ優å…
310ˆåº¦æ©Ÿèƒ½æ‹¡å¼µãƒ‘ッケージ
311
312サブ優å…
313ˆåº¦æ©Ÿèƒ½æ‹¡å¼µãƒ‘ッケージは,サブ優å…
314ˆåº¦æ©Ÿèƒ½ã‚’追加するための拡張パッ
315ケージである.サブ優å…
316ˆåº¦æ©Ÿèƒ½æ‹¡å¼µãƒ‘ッケージは,extension/subprioディレク
317トリに置いてある.
318
319サブ優å…
320ˆåº¦æ©Ÿèƒ½æ‹¡å¼µãƒ‘ッケージでは,TOPPERS_SUPPORT_SUBPRIOがkernel.h中で
321定義されているので,これを用いてサブ優å…
322ˆåº¦æ©Ÿèƒ½ãŒä½¿ç”¨ã§ãã‚‹ã‹ã©ã†ã‹ã‚’判
323別することができる.
324
325サブ優å…
326ˆåº¦æ©Ÿèƒ½æ‹¡å¼µãƒ‘ッケージにより追加されるサービスコール
327
328 ER ercd = chg_spr(ID tskid, uint_t subpri)
329
330サブ優å…
331ˆåº¦æ©Ÿèƒ½æ‹¡å¼µãƒ‘ッケージにより追加されるサービスコール
332
333 ENA_SPR(PRI tskpri)
334
335●動的生成機能拡張パッケージ
336
337動的生成機能拡張パッケージは,オブジェクトの動的生成機能を追加するため
338の拡張パッケージである.TOPPERS第3世代カーネル(ITRON系)統合仕様書に規
339定された以下のオブジェクト生成/削除のためのサービスコール,割付け可能
340なID番号の数を指定する静的APIに加えて,カーネルが割り付けるメモリ領域を
341設定する静的API DEF_KMMを実装
342している.動的生成機能拡張パッケージは,
343extension/dcreディレクトリに置いてある.
344
345ただし,カーネル内
346での動的メモリ管理に関しては,ターゲット非依存部では,
347メモリ領域をå…
348ˆé ­ã‹ã‚‰é †ã«å‰²ã‚Šå½“て,解放されたメモリ領域を再利用しないメ
349モリ管理モジュールのみを実装
350している.本格的な動的メモリ管理を行いたい
351場合には,ターゲット依存部またはユーザ側で,そのための関数を用意する必
352
353要がある.用意する関数等については,「TOPPERS/ASP3カーネル ターゲット依
354存部 ポーティングガイド」の「6.15 動的メモリ管理」の節を参ç…
355§ã™ã‚‹ã“と.
356
357動的生成機能拡張パッケージでは,TOPPERS_SUPPORT_DYNAMIC_CREがkernel.h中
358で定義されているので,これを用いて動的生成機能が使用できるかどうかを判
359別することができる.
360
361動的生成機能拡張パッケージにより追加されるサービスコール
362
363 ER_ID tskid = acre_tsk(const T_CTSK *pk_ctsk)
364 ER ercd = del_tsk(ID tskid)
365 ER_ID semid = acre_sem(const T_CSEM *pk_csem)
366 ER ercd = del_sem(ID semid)
367 ER_ID flgid = acre_flg(const T_CFLG *pk_cflg)
368 ER ercd = del_flg(ID flgid)
369 ER_ID dtqid = acre_dtq(const T_CDTQ *pk_cdtq)
370 ER ercd = del_dtq(ID dtqid)
371 ER_ID pdqid = acre_pdq(const T_CPDQ *pk_cpdq)
372 ER ercd = del_pdq(ID pdqid)
373 ER_ID mtxid = acre_mtx(const T_CMTX *pk_cmtx)
374 ER ercd = del_mtx(ID mtxid)
375 ER_ID mpfid = acre_mpf(const T_CMPF *pk_cmpf)
376 ER ercd = del_mpf(ID mpfid)
377 ER_ID cycid = acre_cyc(const T_CCYC *pk_ccyc)
378 ER ercd = del_cyc(ID cycid)
379 ER_ID almid = acre_alm(const T_CALM *pk_calm)
380 ER ercd = del_alm(ID almid)
381 ER_ID isrid = acre_isr(const T_CISR *pk_cisr)
382 ER ercd = del_isr(ID isrid)
383
384動的生成機能拡張パッケージにより追加される静的API
385
386 AID_TSK(uint_t notsk)
387 AID_SEM(uint_t nosem)
388 AID_FLG(uint_t noflg)
389 AID_DTQ(uint_t nodtq)
390 AID_PDQ(uint_t nopdq)
391 AID_MTX(uint_t nomtx)
392 AID_MPF(uint_t nompf)
393 AID_CYC(uint_t nocyc)
394 AID_ALM(uint_t noalm)
395 AID_ISR(uint_t noisr)
396 DEF_KMM({ SIZE kmmsz, STK_T *kmm })
397
398動的生成機能拡張パッケージでは,del_yyyで削除するオブジェクトに対する待
399
400ち状æ…
401‹ã®ã‚¿ã‚¹ã‚¯ãŒè¤‡æ•°ã‚ると,del_yyyにより,複数のタスクが待
402ち解除される.
403この場合,サービスコールの実行時間およびカーネル内
404での割込み禁止時間が,
405待
406ち解除されるタスクの数のオーダで長くなるので注意が必
407要である.
408
409----------------------------------------------------------------------
410DEF_KMM カーネルが割り付けるメモリ領域の設定〔SD〕
411
412【静的API】
413 DEF_KMM({ SIZE kmmsz, STK_T *kmm })
414 ※ kmmの記述は省略することができる.
415
416【パラメータ】
417 *カーネルが割り付けるメモリ領域の設定情
418å ±
419 SIZE kmmsz カーネルが割り付けるメモリ領域のサイズ(バイト数)
420 STK_T kmm カーネルが割り付けるメモリ領域のå…
421ˆé ­ç•ªåœ°
422
423【エラーコード】
424 E_PAR パラメータエラー
425 ・kmmszが0以下
426 ・その他の条件については機能の項
427を参ç…
428§
429 E_OBJ オブジェクト状æ…
430‹ã‚¨ãƒ©ãƒ¼
431 ・カーネルが割り付けるメモリ領域が設定済み
432
433【機能】
434
435各パラメータで指定したカーネルが割り付けるメモリ領域の設定情
436報に従って,
437カーネルが割り付けるメモリ領域を設定する.
438
439kmmszは整数定数式パラメータ,kmmは一般定数式パラメータである.
440
441kmmの記述を省略するか,kmmをNULLとした場合,kmmszで指定したサイズのメモ
442リ領域を,コンフィギュレータが確保する.kmmszにターゲット定義の制約に合
443致しないサイズを指定した時には,ターゲット定義の制約に合致するようにサ
444イズを大きい方に丸めて確保する.
445
446カーネルが割り付けるメモリ領域をアプリケーションで確保する場合には,
447kmmszで指定したサイズのメモリ領域を確保し,kmmにそのå…
448ˆé ­ç•ªåœ°ã‚’指定する.
449
450DEF_KMMによりカーネルが割り付けるメモリ領域を設定しない場合,カーネルが
451割り付けるメモリ領域は確保されない.
452
453kmmやkmmszにターゲット定義の制約に合致しないå…
454ˆé ­ç•ªåœ°ã‚„サイズを指定した
455時には,E_PARエラーとなる.
456----------------------------------------------------------------------
457
458
459○CPU例外ハンドラの直接呼出し
460
461CPU例外ハンドラの出å…
462¥å£å‡¦ç†ã¯ï¼ŒCPU例外が発生しないように実装
463しなければ
464ならないが,これが防げないターゲットにおいては,CPU例外ハンドラの出å…
465¥å£
466処理を経由せずに,アプリケーションが用意したCPU例外ハンドラを直接実行す
467る方法を用意するのが望ましい.これを,CPU例外ハンドラの直接呼出しと呼ぶ.
468
469ここでは,ハードウェアでベクタテーブルを持つプロセッサにおいて,ターゲッ
470ト非依存部に含まれる標準のCPU例外管理機能の初期化処理を用いている場合
471(OMIT_INITILIZE_EXCEPTIONをマクロ定義していない場合)に,ターゲット依
472存部のみの修正により,CPU例外ハンドラの直接呼出しの機能を追加する方法に
473ついて説明する.
474
475●TA_DIRECT属性の導å…
476¥
477
478CPU例外ハンドラの直接呼出しを指定するために,CPU例外ハンドラ属性に,
479TA_DIRECT属性を導å…
480¥ã™ã‚‹ï¼Ž
481
482●ターゲット依存部の修正箇所
483
484TA_DIRECTの値を,target_kernel.h(または,そこからインクルードされるファ
485イル)で定義し,その値をコンフィギュレータが取り出せるように,
486target_def.csv(または,それに代わるファイル)に次の行を追加する.
487
488TA_DIRECT,TA_DIRECT
489
490次に,target.tf(または,そこからインクルードされるファイル)で,
491TARGET_EXCATRに設定される値に,TA_DIRECTを追加する.例えば,他のターゲッ
492ト依存のCPU例外ハンドラ属性がない場合には,次のように設定する.
493
494$TARGET_EXCATR = TA_DIRECT$
495
496次に,OMIT_INITILIZE_EXCEPTIONをマクロ定義して,CPU例外ハンドラの出å…
497¥å£
498処理を生成するための記述とCPU例外ハンドラ初期化ブロックの標準の定義が生
499成されるのを抑止し,それによって抑止される部分をtarget.tfにコピーした上
500で,以下の修正を加える.
501
502CPU例外ハンドラの出å…
503¥å£å‡¦ç†ã‚’生成するための記述(EXCHDR_ENTRYのリスト)
504を生成する部分は,次のように修正する.
505
506----------------------------------------
507$FOREACH excno EXC.ORDER_LIST$
508 $IF (EXC.EXCATR[excno] & TA_DIRECT) == 0$
509 EXCHDR_ENTRY($EXC.EXCNO[excno]$, $+EXC.EXCNO[excno]$,$SPC$
510 $EXC.EXCHDR[excno]$)$NL$
511 $END$
512$END$$NL$
513----------------------------------------
514
515また,CPU例外ハンドラ初期化ブロックの定義を生成する部分は,次のように修
516正する.
517
518----------------------------------------
519$IF LENGTH(EXC.ORDER_LIST)$
520 const EXCINIB _kernel_excinib_table[TNUM_DEF_EXCNO] = {$NL$
521 $JOINEACH excno EXC.ORDER_LIST ",\n"$
522 $IF (EXC.EXCATR[excno] & TA_DIRECT) == 0$
523 $TAB${$SPC$
524 ($EXC.EXCNO[excno]$),$SPC$
525 ($EXC.EXCATR[excno]$),$SPC$
526 (FP)(EXC_ENTRY($EXC.EXCNO[excno]$, $EXC.EXCHDR[excno]$))$SPC$
527 }
528 $ELSE$
529 $TAB${$SPC$
530 ($EXC.EXCNO[excno]$),$SPC$
531 ($EXC.EXCATR[excno]$),$SPC$
532 (FP)($EXC.EXCHDR[excno]$)
533 }
534 $END$$NL$
535 $END$
536 };$NL$
537$ELSE$
538 TOPPERS_EMPTY_LABEL(const EXCINIB, _kernel_excinib_table);$NL$
539$END$$NL$
540----------------------------------------
541
542以上
Note: See TracBrowser for help on using the repository browser.