source: anotherchoice/tags/jsp-1.4.4-full-UTF8/doc/user.txt@ 363

Last change on this file since 363 was 363, checked in by ykominami, 5 years ago

add tags/jsp-1.4.4-full-UTF8

  • Property svn:executable set to *
File size: 145.2 KB
RevLine 
[363]1
2 = TOPPERS/JSPカーネル ユーザズマニュアル =
3
4 (Release 1.4.4対応,最終更新: 29-Dec-2010)
5
6※ このユーザズマニュアルは,μITRON4.0仕様書(Ver. 4.02.00)の内
7容を
8前提に記述してあります.μITRON4.0仕様書は,以下のURLからダウンロード
9することができます.
10 http://www.ertl.jp/ITRON/SPEC/mitron4-j.html
11
12----------------------------------------------------------------------
13 TOPPERS/JSP Kernel
14 Toyohashi Open Platform for Embedded Real-Time Systems/
15 Just Standard Profile Kernel
16
17 Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
18 Toyohashi Univ. of Technology, JAPAN
19 Copyright (C) 2004-2007 by Embedded and Real-Time Systems Laboratory
20 Graduate School of Information Science, Nagoya Univ., JAPAN
21
22 上記著作権者
23は,以下の (1)〜(4) の条件か,Free Software Foundation
24 によってå…
25¬è¡¨ã•ã‚Œã¦ã„ã‚‹ GNU General Public License の Version 2 に記
26 述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
27 を改変したものを含む.以下同じ)を使用・複製・改変・再é…
28å¸ƒï¼ˆä»¥ä¸‹ï¼Œ
29 利用と呼ぶ)することを無償で許諾する.
30 (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
31 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
32 スコード中に含まれていること.
33 (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
34 用できる形で再é…
35å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é…
36å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
37 者
38マニュアルなど)に,上記の著作権表示,この利用条件および下記
39 の無保証規定を掲載すること.
40 (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
41 用できない形で再é…
42å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ
43 と.
44 (a) 再é…
45å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€…
46マニュアルなど)に,上記の著
47 作権表示,この利用条件および下記の無保証規定を掲載すること.
48 (b) 再é…
49å¸ƒã®å½¢æ…
50‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに
51 報告すること.
52 (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
53 害からも,上記著作権者
54およびTOPPERSプロジェクトをå…
55è²¬ã™ã‚‹ã“と.
56
57 本ソフトウェアは,無保証で提供されているものである.上記著作権者
58お
59 よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
60 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
61 接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
62
63 @(#) $Id: user.txt,v 1.90 2007/05/28 02:06:45 honda Exp $
64----------------------------------------------------------------------
65 * μITRON4.0仕様は,トロン協会が中心となって策定されたオープンなリア
66 ルタイムカーネル仕様です.μITRON4.0仕様の仕様書は,トロン協会のホー
67 ムページ(http://www.assoc.tron.org/)からå…
68¥æ‰‹ã™ã‚‹ã“とができます.
69----------------------------------------------------------------------
70 * TRON は "The Real-time Operating system Nucleus" の略称です.
71 * ITRON は "Industrial TRON" の略称です.
72 * μITRON は "Micro Industrial TRON" の略称です.
73 * TRON,ITRON,およびμITRONは,特定の商品ないしは商品群を指す名称で
74 はありません.
75 * TOPPERS は "Toyohashi OPen Platform for Embedded Real-time Systems"
76 の略称,JSP は "Just Standard Profile" の略称です.
77 * 本マニュアル中の商品名は,各社の商標または登録商標です.
78----------------------------------------------------------------------
79
80
811.TOPPERS/JSPカーネルの概要
82
83TOPPERS/JSPカーネル(以下,単にJSPカーネルと書く)は,TOPPERSプロジェ
84クトにおいて開発したμITRON4.0仕様に準拠したリアルタイムカーネルである.
85JSP(Just Standard Profile)の名前が示す通り,μITRON4.0仕様のスタンダ
86ードプロファイル規定に従って実装
87されている.
88
891.1 ターゲットプロセッサ/ターゲットシステム
90
91JSPカーネルは,現時点で,以下のターゲットプロセッサ/ターゲットシステ
92ムをサポートしている.
93
94 ディレクトリ名 開発環境
95 プロセッサ(型番) システム(メーカ名)
96
97 m68k GNU開発環境
98 M68040(MC68LC040) DVE-68K/40(電産)
99
100 sh1 GNU開発環境
101 SH1(SH7032) KZ-SH1-01(京都マイクロコンピュータ)
102 ※ RISC評価キットSH-1(CQ出版)でも動作
103 SH1(SH7034) μITRON搭載SH1CPUボード((株)中央製作所)
104
105
106 sh2 GNU開発環境
107 SH2(SH7145) AP_SH2F_6A(アルファプロジェクト)
108 SH2(SH7615) HSB7615IT (北斗電子)
109
110 sh3 GNU開発環境
111 SH3(SH7709A) MS7709ASE01 (日立超
112LSIシステムズ)
113 SH3(SH7729R) MS7729RSE01 (日立超
114LSIシステムズ)
115 SH3(SH7727) MS7727CP01 (日立超
116LSIシステムズ)
117 SH4(SH7750) MS7750SE01 (日立超
118LSIシステムズ)
119
120 sh3-ghs GHS開発環境
121 SH3(SH7709A) MS7709ASE01 (日立超
122LSIシステムズ)
123 SH3(SH7727) MS7727CP01 (日立超
124LSIシステムズ)
125
126 h8 GNU開発環境
127 H8(H8/3052F) AKI-H8/3052F(秋月電子通商)
128 H8(H8/3069F) AKI-H8/3069F(秋月電子通商)
129
130 h8-renesas Renesas社の開発環境
131 H8(HSB8F3048BF25) H8/3048F-ONEスタータキット((株)北斗電子)
132
133 h8s-renesas Renesas社の開発環境
134 H8S(H8S/2339F) MiNET-H8S/2339F(株式会社ミスポ製)
135
136 armv4 GNU開発環境
137 ARM9(ARM922T) Integrator/AP+CM922T(ARM)
138 ARM9(ARM926EJ-S) AZ9360MB(YDK)
139
140 armv4-ghs GHS開発環境
141 ARM9 (ARM920T) Integrator/AP+CM920T(ARM)
142 ARM9E(ARM966E-S) Integrator/AP+CM966E-S(ARM)
143
144 m32r GNU開発環境
145 M32R(M32102S6FP) M3A-2131G50(三菱電機)
146 M32R(M32102S6FP) M3A-ZA36 (三菱電機)
147
148 m32c-renesas Renesas社の開発環境
149 M32C OAKS32(オークス電子)
150
151 microblaze GNU開発環境
152 MicroBlaze MIREF(YDK)
153 MicroBlaze MIRE_MULTI3000(YDK)
154 MicroBlaze MultiMedia Board(Xilinx)
155 MicroBlaze Suzaku(アットマークテクノ)
156
157 tms320c54x TI社の開発環境
158 TMS320C54x(TSM320C5402)TMS320VC5402 DSK(TI)
159
160 xstormy16 GNU開発環境
161 Xstormy16 三洋マイコン開発ツール(三洋電機)
162
163 m16c-renesas Renesas社の開発環境
164 M16C(M30620FCAFP-CPU) OASKS16(オークス電子)
165 M16C(M30262F8FG-CPU) OAKS16-MINI(オークス電子)
166
167 s1c33 GNU開発環境
168 SC33 DMT33209(EPSON)
169 SC33 LUXUN2(EPSON)
170
171 s1c33-gnu33 GNU33開発環境
172 SC33 DMT33209(EPSON)
173 SC33 LUXUN2(EPSON)
174
175 nios2 GNU開発環境
176 Nios2 NiosII Development Board(アルテラ)
177
178 v850 GNU開発環境
179 V850 TK-850/KJ1+ (Application Corp.)
180 V850 TK-850/SG2 (Application Corp.)
181
182 tlcs900 東芝セミコンダクタ社製の開発環境
183 TMP91CY22-CPU Zup-F16拡張ボード(タマデン工業株式会社)
184
185また,以下のターゲットは,以前のバージョン(1.4.1)のコードからアップデ
186ートされておらず,動作確認を行っていないため,1.4.2以降では,参考実装
187
188扱いとする.
189
190 h8 GNU開発環境
191 H8(H8/3048F) AKI-H8/3048F(秋月電子通商)
192 H8 (H8/3069F) NKEV-010H8 (品川通信計装
193サービス)
194
195 h8s GNU開発環境
196 H8S(2350) H8S/2350 評価ボード(ミスポ)
197
198 powerpc32 GNU開発環境
199 PowerPC32(MPC860T) TB6102S(タンバック)
200
201 mips3 GNU開発環境
202 MIPS3(VR4131) KZ-Vr4131PCI-01(京都マイクロコンピュータ)
203 MIPS3(VR5500) RTE-VR5500-CB(64)(マイダス・ラボ)
204
205
206JSPカーネルは,カーネルのできる限り多くの部分をC言語で記述する,ターゲッ
207ト非依存部と依存部を明確に分離するなど,他のターゲットプロセッサへのポ
208ーティングが容易な構造になっている.ただし,ポーティングにどの程度の手
209間がかかるかは,ターゲットプロセッサのアーキテクチャやシステムの構成な
210どに依存する.
211
212このユーザズマニュアルでは,ターゲット(ターゲットプロセッサおよびター
213ゲットシステム)に依存しない機能についてのみ説明している.ターゲットに
214依存する機能については,ターゲット毎のマニュアルを参ç…
215§ã™ã‚‹ã“と.
216
2171.2 開発環境
218
219JSPカーネルは,GCCなどのGNU開発環境を標準のソフトウェア開発環境として
220いるが,他の種類の開発環境も利用できるように考æ…
221®ã—ている.利用できる開
222発環境については,ターゲット毎または開発環境毎のマニュアルで説明する.
223
224ターゲット非依存部は,大部分は標準的なC言語によって記述されているが,
225性能と可読性を両立させるために,一部でインライン関数を用いている.イン
226ライン関数の機能を持たない開発環境の場合でも,改造なしに対応可能ではあ
227るが,非効率/無駄なコードが生成されるおそれがある.
228
229カーネル本体は,外部のライブラリ関数に依存しないように記述している.た
230だし,コンパイラが標準Cライブラリ関数を呼び出すコードを生成する場合が
231あり,その場合には標準Cライブラリが必
232要である.また,システムサービス
233やサポートライブラリ,アプリケーションプログラムで標準Cライブラリが必
234
235要になる場合も考えられる.実際,標準é…
236å¸ƒã‚­ãƒƒãƒˆã«å«ã¾ã‚Œã‚‹ä¸­ã§ï¼Œã‚·ã‚¹ãƒ†ãƒ 
237ログ機能を呼び出すためのライブラリ関数内
238で,可変数引数を処理するための
239機能(stdarg.h, va_list, va_start, va_arg)を用いている(実際には,GNU
240開発環境では,可変数引数を処理するための機能はGCC本体でサポートしてい
241るため,標準Cライブラリは必
242要ない).これらの理由により,標準Cライブラ
243リを用いる構成もとれるようにしている.
244
2451.3 シミュレーション環境
246
247JSPカーネルのシミュレーション環境として,Linux上で動作する環境と
248Windows上で動作する環境を用意している.これらのシミュレーション環境は,
249LinuxおよびWindowsの一つのプロセスの中で複数のタスクを切り替えて動作さ
250せるもので,スレッドライブラリとして使うこともできる.
251
252これらのシミュレーション環境についての詳細は,シミュレーション環境毎の
253マニュアルを参ç…
254§ã™ã‚‹ã“と.
255
2561.4 カーネルがサポートする機能
257
258JSPカーネルは,名前が示す通り,μITRON4.0仕様のスタンダードプロファイ
259ルに含まれる機能をすべてサポートしている.スタンダードプロファイルでは,
260割込みハンドラと割込みサービスルーチンのいずれかをサポートすればよいが,
261JSPカーネルは,現状では割込みハンドラのみをサポートしている.
262
263スタンダードプロファイルに含まれない機能として,ターゲット依存に以下の
264割込み管理機能およびサービスコールをサポートする場合がある.これらの機
265能のå…
266·ä½“的な内
267容については,ターゲット毎に異なる.詳しくは,ターゲット
268毎のマニュアルを参ç…
269§ã™ã‚‹ã“と.
270
271 dis_int 割込みの禁止
272 ena_int 割込みの許可
273 chg_ixx 割込みマスクの変更
274 get_ixx 割込みマスクの参ç…
275§
276 ※ xx はターゲット毎に定められる.
277
278また,μITRON4.0仕様に定義されている以外に,以下の独自の拡張機能および
279サービスコールをサポートしている.
280
281(1) CPU例外発生時のシステム状æ…
282‹ã®å‚ç…
283§
284
285スタンダードプロファイルでは,CPU例外ハンドラ内
286で,CPU例外が発生したコ
287ンテキストや状æ…
288‹ã‚’参ç…
289§ã§ãã‚‹ã“とが必
290要であるが,そのためのAPIは定めて
291いない.JSPカーネルでは,CPU例外が発生した処理でsns_yyyを呼び出した場
292合の結果を,CPU例外ハンドラ内
293で取り出せるようにするために,以下の五つ
294のサービスコールを独自にサポートしている.
295
296 vxsns_ctx CPU例外発生時のコンテキストの参ç…
297§
298 vxsns_loc CPU例外発生時のCPUロック状æ…
299‹ã®å‚ç…
300§
301 vxsns_dsp CPU例外発生時のディスパッチ禁止状æ…
302‹ã®å‚ç…
303§
304 vxsns_dpn CPU例外発生時のディスパッチ保留状æ…
305‹ã®å‚ç…
306§
307 vxsns_tex CPU例外発生時のタスク例外処理禁止状æ…
308‹ã®å‚ç…
309§
310
311(2) 性能評価用システム時刻参ç…
312§æ©Ÿèƒ½
313
314性能評価用システム時刻参ç…
315§æ©Ÿèƒ½ã¨ã¯ï¼ŒJSPカーネル上で動作するタスクやJSP
316カーネル自身の性能を計測するための,システム時刻をμ秒単位で読み出す機
317能である.この機能のために追加したサービスコールは次の通りである.
318
319 vxget_tim 性能評価用システム時刻の参ç…
320§
321
322性能評価用システム時刻参ç…
323§æ©Ÿèƒ½ã‚’サポートするかどうかは,ターゲット依存
324部の定義ファイルで指定することができる.また,ターゲットシステムの制限
325により,この機能をサポートできない場合もある.
326
327(3) 終了処理ルーチン機能
328
329JSPカーネルでは,システムの終了時に呼び出される終了処理ルーチンを登録
330するための機能をサポートしている.この機能のために追加した静的APIは次
331の通りである.
332
333 VATT_TER 終了処理ルーチンの追加(静的API)
334
335終了処理ルーチンについては,「2.12 システム終了手順と終了処理ルーチン」
336を参ç…
337§ã®ã“と.
338
339(4) カーネル動作状æ…
340‹ã®å‚ç…
341§
342
343カーネル上で動作するタスクから呼び出される関数が,カーネルの初期化完了
344前や終了処理開始後にも呼び出される可能性がある場合には,その中でカーネ
345ルのサービスコールを呼び出せるかを判別することが必
346要となる.JSPカーネ
347ルでは,この判別を可能にするために,次のサービスコールを追加している.
348
349 vsns_ini カーネル動作状æ…
350‹ã®å‚ç…
351§
352
3531.5 既知の問題点
354
355現バージョンでは,静的APIの処理中のエラーの検出機能の中で,ターゲット
356依存のエラーの検出が不十分である.例えば,割込みハンドラ番号が不正な値
357である場合,カーネルとコンフィギュレータのいずれもエラーを検出せず,カー
358ネルが正しく動作しない結果となる.
359
360kernel_cfg.cは,カーネル,システムサービス,アプリケーションのいずれの
361インクルードファイルもインクルードし,いずれのシンボルも参ç…
362§ã™ã‚‹å¯èƒ½æ€§
363がある.そのため,カーネル,システムサービス,アプリケーションでシンボ
364ル等が衝突している場合や,コンパイルオプションが食い違っている場合に,
365kernel_cfg.cが正しくコンパイルできなくなる場合が考えられる.カーネルの
366シンボルをリネームするなどの方法でかなり軽減されてはいるが,問題がなく
367なっているわけではない.
368
369シリアルインタフェースドライバで,シリアルポートをクローズした後にオー
370プンしなおした場合に,正しく動作しない.これは,シリアルインタフェース
371ドライバが使用しているセマフォが初期化されないためである.
372
3731.6 注意事項
374
375
376CRE_DTQのパラメータdtqcntは,μITRON4.0仕様のVer. 4.01.00では一般定数
377式パラメータと規定されているが,JSPカーネルではVer. 4.02.00に準拠して,
378プリプロセッサ定数式パラメータと扱っている.
379
380
3812.JSPカーネルの機能
382
383この節では,μITRON4.0仕様で実装
384定義となっている事項
385を中心に,JSPカー
386ネルの機能について解説する.
387
3882.1 実装
389方針とモデル
390
391μITRON4.0仕様のスタンダードプロファイルは,システムå…
392¨ä½“を一つのモジュー
393ルにリンクすることを想定して規定されている.また,サービスコールの呼出
394しは,単なるサブルーチンコールによって行うことが想定されている.JSPカー
395ネルは,この想定に従い,アプリケーションとカーネルを一つのモジュールに
396リンクし,サブルーチンコールによってサービスコールを呼び出す方法のみを
397サポートしている.
398
399JSPカーネル上で動作するアプリケーションは,すべてC言語で記述することを
400原則としている.そのため,タスクや割込みハンドラなどの処理単位をアセン
401ブリ言語で記述する方法は,特別には用意していない(もちろん,インタフェー
402スさえC言語の関数にあわせれば,記述にアセンブリ言語を使うことは問題な
403い).
404
405JSPカーネルでは,サービスコールの大部分を一つの割込み禁止区間として実
406装
407しているため,サービスコールの不可分性は厳密に保証される.逆に欠点と
408しては,最大割込み禁止時間(最大割込み応答時間も同様)が,待
409ちキューに
410つながれるタスクの最大数やタイムイベントの最大数に依存することになるが,
411スタンダードプロファイルの機能セットの範囲内
412では,この方法でもそれほど
413問題にならないと思われる.
414
4152.2 データ型
416
417JSPカーネルでは,以下にリストアップするデータ型を,signed int型,
418unsigned int型,またはsize_t型に定義している.これらの型のサイズは,
419JSPカーネルがポーティングされているターゲットプロセッサ/コンパイラの
420多くにおいて 32ビットであるため,そうでない場合にのみターゲット毎のマ
421ニュアルに明示する.すなわち,ターゲット毎のマニュアルに明示されていな
422い限り,以下にリストアップするデータ型のサイズは 32ビットである.
423
424 signed int型に定義しているデータ型
425
426 INT 符号付き整数
427 BOOL 真偽値
428 FN 機能コード
429 ER エラーコード
430 ID ID番号
431 PRI 優å…
432ˆåº¦
433 TMO タイムアウト値
434 ER_BOOL ER または BOOL
435 ER_ID ER または ID
436 ER_UINT ER または UINT
437
438 unsigned int型に定義しているデータ型
439
440 UINT 符号無し整数
441 ATR 属性
442 STAT 状æ…
443‹
444 MODE 動作モード
445 RELTIM 相対時間
446 TEXPTN タスク例外要因のビットパターン
447 FLGPTN イベントフラグのビットパターン
448
449 size_t型に定義しているデータ型
450 SIZE サイズ
451
452ただし,RELTIM型の有効ビット数は31ビットを越えることはない.すなわち,
453unsigned int型のサイズが32ビットの場合には,RELTIM型の有効ビット数は
45431ビットであり,(2^31 - 1)を越える値を RELTIM型のパラメータに渡した場
455合,E_PARエラーとなる.unsigned int型のサイズが16ビットの場合には,
456RELTIM型の有効ビット数も16ビットである.スタンダードプロファイルでは,
457RELTIM型は16ビット以上と規定しており,この仕様でスタンダードプロファイ
458ル規定に準拠している.
459
460SYSTIM型は,32ビットの符号無し整数型に定義しており,構造体として定義す
461る方法は用いていない.
462
463時間をあらわすデータ型(TMO,RELTIM,SYSTIM)の時間単位は,スタンダー
464ドプロファイルの規定に従い,すべて1ミリ秒としている.
465
4662.3 オブジェクトのID番号と優å…
467ˆåº¦
468
469オブジェクトのID番号には,1から連続した正の値を用いる.オブジェクトの
470ID番号に抜けがある場合(例えば,ID=1とID=3のオブジェクトが登録され,
471ID=2のオブジェクトが登録されない場合)には,コンフィギュレータがエラー
472を報告する.負のID番号を用いたシステムオブジェクトとユーザオブジェクト
473の区別はサポートしていない.
474
475生成できるオブジェクトの最大数は,カーネルのコード上は,ID番号がID型
476(signed int型に定義している)で表現できる範囲内
477であるが,実際にはメモ
478リ容量によって制限される.なお,JSPカーネルでは,オブジェクトを生成す
479るためのサービスコールはサポートしていない.
480
481タスクとメッセージの優å…
482ˆåº¦ã«ã¯ï¼Œ1〜16の正の値を用いる.
483
4842.4 エラーチェックとエラーコード
485
486JSPカーネルでは,以下に示すメインエラーコードを返すエラーの検出を省略
487している.
488
489 E_SYS システムエラー
490 E_MACV メモリアクセス違反
491
492また,ポインタの値が不正な場合のパラメータエラー(E_PAR)の検出も省略
493している.メモリアクセス違反(E_MACV)の検出も省略しているため,引数に
494ポインタを渡すサービスコールに対して,存在しないメモリ番地を差すポイン
495タなど,不正なアクセスを引き起こすポインタを渡した場合,プロセッサがバ
496スエラーなどのCPU例外を起こす場合がある(å…
497·ä½“的な動作はターゲットプロ
498セッサに依存).
499
500μITRON4.0仕様書に定義されているメインエラーコードの中で,スタンダード
501プロファイルの機能では発生しないものや,JSPカーネルの実装
502上発生しない
503ものがある.JSPカーネルでサービスコールが返すメインエラーコードについ
504ては,「9.3 メインエラーコード一覧」を参ç…
505§ã®ã“と.
506
507JSPカーネルでは,サブエラーコードは用いていない.サブエラーコードには
508常に-1が返る.
509
5102.5 割込みハンドラ
511
512JSPカーネルでは,割込みハンドラの機能とそれを定義する静的API(DEF_INH)
513をサポートしており,割込みサービスルーチンの機能とそれを追加する静的
514API(ATT_ISR)はサポートしていない.
515
516割込みハンドラのC言語による記述形式は次の通りとする.
517
518 void interrupt_handler(void)
519 {
520 割込みハンドラ本体
521 }
522
523JSPカーネルでは,C言語で記述された割込みハンドラが呼ばれる時点で,CPU
524ロック解除状æ…
525‹ã«ãªã£ã¦ã„る.また,割込みハンドラからリターンするには,
526C言語の関数から単にリターンすればよい.
527
528割込みハンドラをアセンブリ言語で記述する方法は,サポートしていない.
529
530NMI(マスクできない割込み)以外にカーネルの管理外の割込みがあるかどう
531かは,ターゲット依存である.å…
532·ä½“的な仕様については,ターゲット毎のマニュ
533アルを参ç…
534§ã™ã‚‹ã“と.
535
5362.6 タイムイベントハンドラ
537
538JSPカーネルでは,タイムイベントハンドラとして,周期ハンドラのみをサポー
539トしている.周期ハンドラは,isig_timサービスコールの中から,サブルーチ
540ンコールで呼び出される.そのため,周期ハンドラの優å…
541ˆé †ä½ã¯ï¼Œisig_timを
542呼び出した割込みハンドラよりも一つだけ高い(厳密に言うと,isig_timを呼
543び出した割込みハンドラよりも高く,その割込みハンドラよりも高い優å…
544ˆé †ä½
545を持つ他のいずれの処理よりも低い).
546
5472.7 CPU例外ハンドラ
548
549JSPカーネルでは,スタンダードプロファイル規定に従って,CPU例外ハンドラ
550の機能とそれを定義する静的API(DEF_EXC)をサポートしている.
551
552JSPカーネルでは,CPU例外ハンドラは非タスクコンテキストで実行される.非
553タスクコンテキストから呼び出せるサービスコールは,CPU例外ハンドラ内
554か
555ら呼び出すことができる.ただし,CPU例外がCPUロック状æ…
556‹ã§ç™ºç”Ÿã—た場合に
557は,CPU例外ハンドラ中でCPUロックを解除することはできず,非タスクコンテ
558キストから呼び出せるサービスコールを呼び出すこともできない.
559
560μITRON4.0仕様において,CPU例外ハンドラ内
561で行えるべきものとして規定さ
562れている各操作は,次のような方法で行うことができる.
563
564 (a) CPU例外が発生したコンテキストや状æ…
565‹ã®å‚ç…
566§ã¯ï¼Œãã®ãŸã‚ã«ç”¨æ„ã•ã‚ŒãŸ
567 JSPカーネル独自のサービスコール(vxsns_ctx,vxsns_loc,vxsns_dsp,
568 vxsns_dpn,vxsns_tex)を用いて行うことができる.詳しくは,「3.10
569 CPU例外発生時のシステム状æ…
570‹å‚ç…
571§ã€ã‚’参ç…
572§ã™ã‚‹ã“と.
573
574 (b) CPU例外が発生したタスクのID番号の参ç…
575§ã¯ï¼Œiget_tidサービスコールを
576 呼び出すことによって行うことができる.
577
578 (c) タスク例外処理の要求は,iras_texサービスコールを呼び出すことによっ
579 て行うことができる.
580
581CPU例外ハンドラの優å…
582ˆé †ä½ã¯ï¼Œã‚¿ã‚¹ã‚¯ã‚³ãƒ³ãƒ†ã‚­ã‚¹ãƒˆã‚’実行中にCPU例外が発生
583した場合には,ディスパッチャよりも高く,すべての割込みハンドラおよびタ
584イマハンドラよりも低い.非タスクコンテキストを実行中にCPU例外が発生し
585た場合には,CPU例外が発生した処理の優å…
586ˆé †ä½ã‚ˆã‚Šã‚‚一つだけ高い(厳密に
587言うと,CPU例外が発生した処理よりも高く,CPU例外が発生した処理よりも高
588い優å…
589ˆé †ä½ã‚’持つ他のいずれの処理よりも低い).
590
591CPU例外ハンドラのC言語による記述形式は次の通りとする.
592
593 void cpu_exception_handler(VP p_excinf)
594 {
595 CPU例外ハンドラ本体
596 }
597
598p_excinf には,CPU例外に関する情
599報を記憶している領域のå…
600ˆé ­ç•ªåœ°ãŒæ¸¡ã•ã‚Œ
601る.これは,CPU例外ハンドラ内
602で,CPU例外が発生したコンテキストや状æ…
603‹ã‚’
604参ç…
605§ã™ã‚‹éš›ã«å¿…
606要となる.詳しくは,「3.10 CPU例外発生時のシステム状æ…
607‹å‚
608ç…
609§ã€å‚ç…
610§ã™ã‚‹ã“と.CPU例外ハンドラからリターンするには,C言語の関数から
611単にリターンすればよい.
612
613CPU例外ハンドラをアセンブリ言語で記述する方法は,サポートしていない.
614
6152.8 非タスクコンテキストからのサービスコール呼出しと割込み禁止区間
616
617JSPカーネルでは,タスクコンテキスト専用のサービスコールと,非タスクコ
618ンテキスト専用のサービスコールを厳密に区別している.タスクコンテキスト
619専用のサービスコールを非タスクコンテキストから呼び出した場合や,非タス
620クコンテキスト専用のサービスコールをタスクコンテキストから呼び出した場
621合には,E_CTXエラーを返す.
622
623また,非タスクコンテキストから呼び出されたサービスコールの遅
624延実行は行っ
625ていない.そのため,非タスクコンテキストから呼び出したサービスコールも,
626操作対象のオブジェクトの状æ…
627‹ã«ä¾å­˜ã—て発生するエラーを検出することがで
628きる.
629
6302.9 システム初期化手順と初期化ルーチン
631
632カーネルを起動するには,ターゲットに依存して行わなければならない最低限
633の初期化を行った後,CPUロック状æ…
634‹ã¨åŒç­‰ã®çŠ¶æ…
635‹ã§ï¼Œkernel_start関数を呼
636び出す.JSPカーネルでは,ターゲット毎にスタートアップモジュールを用意
637して,この処理を行っている.詳しくは,ターゲット毎のマニュアルを参ç…
638§ã™
639ること.
640
641ATT_INIによって追加された初期化ルーチンは,カーネル内
642部のデータ構造の
643初期化や他の静的APIの処理を終えた後に,システムコンフィギュレーション
644ファイル中でのATT_INIの記述順と同じ順序で呼び出される.初期化ルーチン
645内
646では,サービスコールを呼び出してはならない.初期化ルーチン内
647でサービ
648スコールを呼び出した場合,システムの動作は保証されない(実際には,ター
649ゲットによって,呼び出しても差し支えないサービスコールがある).また,
650初期化ルーチンを実行中にカーネルの管理外の割込みが禁止されているかどう
651かは,ターゲットおよびkernel_start関数が呼び出された時の状æ…
652‹ã«ä¾å­˜ã™ã‚‹ï¼Ž
653å…
654·ä½“的には,ターゲット毎のマニュアルを参ç…
655§ã™ã‚‹ã“と.
656
6572.10 静的APIとコンフィギュレータ
658
659JSPカーネルは,μITRON4.0仕様に規定されたシステムコンフィギュレーショ
660ン手順に準拠した手順で,コンフィギュレーションを行う.
661
662システムの構成を記述したシステムコンフィギュレーションファイルは,まず
663C言語のプリプロセッサで処理され,その結果をカーネルのコンフィギュレー
664タ(cfgプログラム)にå…
665¥åŠ›ã™ã‚‹ï¼Žã‚«ãƒ¼ãƒãƒ«ã®ã‚³ãƒ³ãƒ•ã‚£ã‚®ãƒ¥ãƒ¬ãƒ¼ã‚¿ã¯ï¼Œã‚«ãƒ¼ãƒ
666ル構成・初期化ファイルをkernel_cfg.cに,ID自動割付け結果ヘッダファイル
667をkernel_id.hに生成する.また,静的APIのパラメータチェックに用いるファ
668イルをkernel_chk.cに,静的APIの解析内
669容を含むオブジェクト定義ファイル
670をkernel_obj.datに生成する.静的APIの文法エラー(および処理中のエラー
671の一部)が検出されれば,カーネルのコンフィギュレータがエラーを報告する.
672
673kernel_cfg.cは,コンパイルされて,アプリケーションプログラムおよびカー
674ネルとå…
675±ã«ãƒªãƒ³ã‚¯ã•ã‚Œã‚‹ï¼Žãƒªãƒ³ã‚¯ã«ã‚ˆã‚Šç”Ÿæˆã•ã‚ŒãŸãƒ­ãƒ¼ãƒ‰ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ï¼Œã‚«ãƒ¼
676ネルのパラメータチェックプログラム(chkプログラム)によって,静的APIの
677パラメータチェックが行われる.パラメータの値のエラーが検出されると,パ
678ラメータチェックプログラムがエラーを報告するが,「1.5 既知の問題点」で
679述べた通り,現バージョンではパラメータエラーのチェックは不完å…
680¨ã§ã‚る.
681
682以上の手順は,Makefile内
683に記述されている.ソフトウェア部品のコンフィギュ
684レータを組み込みたい場合には,Makefileを修正する必
685要がある.
686
6872.11 インクルードファイル
688
689アプリケーションが用いることができるインクルードファイルは,includeディ
690レクトリの下に置かれている.
691
692t_services.hは,カーネル上で動作するプログラムのソースファイルでインク
693ルードするべき標準インクルードファイルである.この中で,kernel.h(さら
694にここから,t_stddef.h,itron.h,tool_defs.h,sys_defs.h,cpu_defs.h,
695t_syslog.h)とserial.hをインクルードしている.また,アプリケーションに
696有益と思われる定義をいくつか含んでいる.
697
698s_services.hは,直接ハードウェアにアクセスするデバイスドライバのソース
699ファイルでインクルードするべき標準インクルードファイルである.この中で,
700sil.h(さらにここから,t_stddef.h,itron.h,tool_defs.h,sys_defs.h,
701cpu_defs.h,t_syslog.h)とt_config.h(さらにここから,sys_config.h,
702cpu_config.h,tool_config.h)をインクルードしている.また,アプリケー
703ションから呼ばれるデバイスドライバのインクルードファイルで,インライン
704関数などでシステムインタフェースレイヤを用いている場合にも,このファイ
705ルをインクルードする.
706
707この2つのファイルからインクルードされるファイル(上に列挙したもの)は,
708直接インクルードしないのが原則であるが,次の3つのケースは例外である.
709
710(1) カーネルから呼ばれるデバイスドライバのインクルードファイルで,イン
711 ライン関数などでシステムインタフェースレイヤを用いている場合には,
712 sil.hをインクルードする.
713
714(2) カーネル上で動作するプログラムで,ターゲット依存情
715報を参ç…
716§ã—たい場
717 合には,t_config.hをインクルードする.
718
719(3) 他のITRON仕様OSからソフトウェアをポーティングする場合などには,
720 kernel.hを直接インクルードしてもよい.
721
722(4) ITRON仕様å…
723±é€šè¦å®šã«æº–拠するソフトウェア部品のインクルードファイル
724 は,itron.hを直接インクルードしてもよい.
725
726JSPカーネルのRelease 1.3以前のバージョンでは,t_services.hは
727jsp_services.hというファイル名になっていた.バージョンを問わずに動作す
728るプログラムを作る際には,t_services.hをインクルードし,古いバージョン
729でjsp_services.hをt_services.hにシンボリックリンクを貼る方法を推奨する.
730
731なお,jsp_kernel.hは,カーネルを構成するプログラムのソースファイルでイ
732ンクルードするべき標準インクルードファイルであり,カーネル上で動作する
733プログラムのソースファイルからは通常はインクルードしない.
734
7352.12 システム終了手順と終了処理ルーチン
736
737アプリケーションから kernel_exit関数を呼び出すことで,カーネルを終了す
738ることができる.kernel_exit関数が呼び出されると,カーネルは,終了処理
739ルーチンの実行,開発環境依存の終了処理(atexit によって登録された関数
740や C++ におけるデストラクタの実行)を行った後,カーネルの終了処理を行
741う.
742
743終了処理ルーチンは,アプリケーションで用意し,VATT_TER を使ってカーネ
744ルに登録する.VATT_TER によって追加された終了処理ルーチンは,カーネル
745の管理外の割込みを除くすべての割込みを禁止した状æ…
746‹ã§ï¼Œã‚·ã‚¹ãƒ†ãƒ ã‚³ãƒ³ãƒ•ã‚£
747ギュレーションファイル中での VATT_TER の記述順と逆の順序で呼び出される.
748終了処理ルーチン内
749では,サービスコールを呼び出してはならない.終了処理
750ルーチン内
751でサービスコールを呼び出した場合,システムの動作は保証されな
752い(実際には,ターゲットによって,呼び出しても差し支えないサービスコー
753ルがある).
754
7552.13 その他
756
757JSPカーネルでは,t_stddef.h の中で,次のマクロを定義している.
758
759(1) assert(exp)
760
761JSPカーネルでは,assertマクロを独自に定義している.開発環境の標準の
762assertマクロは使われない.
763
764(2) throw()
765
766C言語とEC++言語では,throw() が空になるように定義している.C++言語から
767呼び出す可能性のあるC言語で記述された関数のプロトタイプ宣言に,throw()
768をつけることを想定している.
769
770また,t_services.h の中で,次のマクロを定義している.
771
772(3) syscall(s)
773
774サービスコール s を呼び出し,返値がエラーであれば,エラーメッセージを
775出力する.
776
777(4) _syscall(s)
778
779サービスコール s を呼び出し,返値がエラーであれば,エラーメッセージを
780出力し,カーネルを異常終了させる.
781
782
7833.JSPカーネルのサービスコールと静的API
784
785この節では,JSPカーネルのサービスコールと静的APIについて,μITRON4.0仕
786様で実装
787定義となっている事項
788とJSPカーネル独自のサービスコールを中心に
789解説する.
790
7913.1 タスク管理機能
792
793タスクの起動要求キューイング数の最大値(TMAX_ACTCNT)は1に固定している.
794
795(1) CRE_TSK タスクの生成(静的API)
796
797tskatr に TA_ASM が指定された場合の機能(タスクをアセンブリ言語で記述
798する)はサポートしていない.また,stk に NULL 以外が指定された場合の機
799能(スタック領域のå…
800ˆé ­ç•ªåœ°ã‚’指定する)もサポートしていない.
801
802(2) act_tsk, iact_tsk タスクの起動
803
804(3) can_act タスク起動要求のキャンセル
805
806(4) ext_tsk 自タスクの終了
807
808ext_tsk が非タスクコンテキストから呼ばれた場合,システムログ機能を用い
809てエラー情
810報を出力し(LOG_EMERGレベル),そのまま実行を続けるが,動作
811は保証されない.
812
813ext_tsk がCPUロック状æ…
814‹ï¼ˆã¾ãŸã¯ãƒ‡ã‚£ã‚¹ãƒ‘ッチ禁止状æ…
815‹ï¼‰ã§å‘¼ã°ã‚ŒãŸå ´åˆï¼Œ
816システムログにエラーを記録し(LOG_WARNINGレベル),CPUロック解除状æ…
817‹
818(またはディスパッチ許可状æ…
819‹ï¼‰ã«ã—てからタスクを終了する.
820
821(5) ter_tsk タスクの強制終了
822
823(6) chg_pri タスク優å…
824ˆåº¦ã®å¤‰æ›´
825
826(7) get_pri タスク優å…
827ˆåº¦ã®å‚ç…
828§
829
8303.2 タスク付属同期機能
831
832タスクの起床要求キューイング数の最大値(TMAX_WUPCNT)は 1 に固定してい
833る.また,タスクの強制待
834ち要求ネスト数の最大値(TMAX_SUSCNT)も 1 に固
835定している.
836
837(1) slp_tsk 起床待
838ち
839(2) tslp_tsk 起床待
840ち(タイムアウトあり)
841
842(3) wup_tsk, iwup_tsk タスクの起床
843
844(4) can_wup タスク起床要求のキャンセル
845
846(5) rel_wai, irel_wai 待
847ち状æ…
848‹ã®å¼·åˆ¶è§£é™¤
849
850(6) sus_tsk 強制待
851ち状æ…
852‹ã¸ã®ç§»è¡Œ
853
854(7) rsm_tsk 強制待
855ち状æ…
856‹ã‹ã‚‰ã®å†é–‹
857(8) frsm_tsk 強制待
858ち状æ…
859‹ã‹ã‚‰ã®å¼·åˆ¶å†é–‹
860
861タスクの強制待
862ち要求ネスト数の最大値(TMAX_SUSCNT)が 1 であるため,
863rsm_tsk と frsm_tsk の処理内
864容は同一である.
865
866(9) dly_tsk 自タスクの遅
867延
868
8693.3 タスク例外処理機能
870
871TEXPTN型は,unsigned int型に定義している.よって TBIT_TEXPTN は,
872unsigned int型が 32ビットの場合は 32,16ビットの場合は 16 になる.
873
874(1) DEF_TEX タスク例外処理ルーチンの定義(静的API)
875
876texatr に TA_ASM が指定された場合の機能(タスク例外処理ルーチンをアセ
877ンブリ言語で記述する)はサポートしていない.
878
879(2) ras_tex, iras_tex タスク例外処理の要求
880
881(3) dis_tex タスク例外処理の禁止
882
883(4) ena_tex タスク例外処理の許可
884
885(5) sns_tex タスク例外処理禁止状æ…
886‹ã®å‚ç…
887§
888
8893.4 同期・通信機能
890
8913.4.1 セマフォ
892
893セマフォの最大資源数は,UINT型(unsigned int型に定義している)で表現で
894きる数値の範囲内
895である.すなわち,unsigned int型が 32ビットの場合は
896(2^32 - 1),16ビットの場合は (2^16 - 1) = 65535 である.TMAX_MAXSEM は
897定義していない.
898
899(1) CRE_SEM セマフォの生成(静的API)
900
901(2) sig_sem, isig_sem セマフォ資源の返却
902
903(3) wai_sem セマフォ資源の獲得
904(4) pol_sem セマフォ資源の獲得(ポーリング)
905(5) twai_sem セマフォ資源の獲得(タイムアウトあり)
906
9073.4.2 イベントフラグ
908
909一つのイベントフラグで複数のタスクが待
910ち状æ…
911‹ã«ãªã‚Œã‚‹æ©Ÿèƒ½ã¯ã‚µãƒãƒ¼ãƒˆã—て
912いない.
913
914FLGPTN型は,unsigned int型に定義している.よって TBIT_FLGPTN は,
915unsigned int型が 32ビットの場合は 32,16ビットの場合は 16 になる.
916
917(1) CRE_FLG イベントフラグの生成(静的API)
918
919flgatr に TA_WMUL が指定された場合の機能(イベントフラグで複数のタスク
920が待
921ち状æ…
922‹ã«ãªã‚Œã‚‹ï¼‰ã¯ã‚µãƒãƒ¼ãƒˆã—ていない.
923
924(2) set_flg, iset_flg イベントフラグのセット
925
926(3) clr_flg イベントフラグのクリア
927
928(4) wai_flg イベントフラグ待
929ち
930(5) pol_flg イベントフラグ待
931ち(ポーリング)
932(6) twai_flg イベントフラグ待
933ち(タイムアウトあり)
934
9353.4.3 データキュー
936
937dtqcnt個のデータを格納するのに必
938要なデータキュー領域のサイズは,
939sizeof(VP_INT) * dtqcnt バイトである.TSZ_DTQ は定義していない.
940
941(1) CRE_DTQ データキューの生成(静的API)
942
943dtq に NULL 以外が指定された場合の機能(データキュー領域のå…
944ˆé ­ç•ªåœ°ã‚’指
945定する)はサポートしていない.
946
947(2) snd_dtq データキューへの送信
948(3) psnd_dtq, ipsnd_dtq データキューへの送信(ポーリング)
949(4) tsnd_dtq データキューへの送信(タイムアウトあり)
950
951(5) fsnd_dtq, ifsnd_dtq データキューへの強制送信
952
953(6) rcv_dtq データキューからの受信
954(7) prcv_dtq データキューからの受信(ポーリング)
955(8) trcv_dtq データキューからの受信(タイムアウトあり)
956
9573.4.4 メールボックス
958
959T_MSG型は下記のように定義されている.T_MSG型のサイズは,ターゲットプロ
960セッサ/コンパイラのポインタのサイズに一致する.
961
962 typedef struct t_msg {
963 struct t_msg *next;
964 } T_MSG;
965
966JSPカーネルでは,優å…
967ˆåº¦åˆ¥ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚­ãƒ¥ãƒ¼ãƒ˜ãƒƒãƒ€é ˜åŸŸã¯ç”¨ã„ていない.
968TSZ_MPRIHD は定義していないが,定義するとしたら 0 となる.
969
970(1) CRE_MBX メールボックスの生成(静的API)
971
972mprihd に NULL 以外が指定された場合の機能(優å…
973ˆåº¦åˆ¥ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚­ãƒ¥ãƒ¼ãƒ˜ãƒƒ
974ダ領域のå…
975ˆé ­ç•ªåœ°ã‚’指定する)はサポートしていない.
976
977(2) snd_mbx メールボックスへの送信
978
979(3) rcv_mbx メールボックスからの受信
980(4) prcv_mbx メールボックスからの受信(ポーリング)
981(5) trcv_mbx メールボックスからの受信(タイムアウトあり)
982
9833.5 メモリプール管理機能
984
9853.5.1 固定長メモリプール
986
987サイズが blkszバイトのメモリブロックを blkcnt個獲得できるのに必
988要な固
989定長メモリプール領域のサイズは,TROUND_VP(blksz) * blkcnt バイトである.
990ここで,TROUND_VP(blksz) は,blksz をターゲットプロセッサ/コンパイラ
991のポインタのサイズの倍数になるよう切り上げた数を表す.TSZ_MPF は定義し
992ていない.
993
994(1) CRE_MPF 固定長メモリプールの生成(静的API)
995
996mpf に NULL 以外が指定された場合の機能(固定長メモリプール領域のå…
997ˆé ­ç•ª
998地を指定する)はサポートしていない.
999
1000(2) get_mpf 固定長メモリブロックの獲得
1001(3) pget_mpf 固定長メモリブロックの獲得(ポーリング)
1002(4) tget_mpf 固定長メモリブロックの獲得(タイムアウトあり)
1003
1004(5) rel_mpf 固定長メモリブロックの返却
1005
1006blkパラメータ(返却するメモリブロックのå…
1007ˆé ­ç•ªåœ°ï¼‰ã®å€¤ãŒï¼Œè¿”却å…
1008ˆã®ãƒ¡ãƒ¢
1009リプール領域の外や,メモリブロックの途中を指す場合には,E_PARエラーを
1010返す.未獲得のメモリブロックを返却した場合や,返却済のメモリブロックを
1011再度返却した場合の動作は保証されない.
1012
10133.6 時間管理機能
1014
1015タイムイベントハンドラに関しては,「2.6 タイムイベントハンドラ」を参ç…
1016§
1017すること.
1018
10193.6.1 システム時刻管理
1020
1021JSPカーネルでは,タイムティックの供給(isig_tim を周期的に呼び出す処理)
1022はシステムサービスのシステムクロックドライバによって実現している.シス
1023テムクロックドライバの主要部分は,ターゲット毎にハードウェアタイマを使っ
1024て実現されており,isig_tim を呼び出す周期はターゲット毎に定める.その
1025ため TIC_NUME と TIC_DENO は,ターゲット依存部のアプリケーション用のイ
1026ンクルードファイル(cpu_defs.h および sys_defs.h)の中で定義している.
1027ターゲットによっては,この数値を変更するだけで isig_tim を呼び出す周期
1028を変更できるように実装
1029されている場合もある.詳しくは,ターゲット毎のマ
1030ニュアルを参ç…
1031§ã™ã‚‹ã“と.
1032
1033(1) set_tim システム時刻の設定
1034
1035(2) get_tim システム時刻の参ç…
1036§
1037
1038(3) isig_tim タイムティックの供給
1039
1040isig_tim は,ターゲット依存に定義された TIC_NUME と TIC_DENO で指定さ
1041れる時間だけシステム時刻を進め,必
1042要なタイムイベント(タイムアウト,周
1043期ハンドラの起動など)の処理を行う.JSPカーネルでは,システムクロック
1044ドライバがこのサービスコールを周期的に呼び出すため,アプリケーションか
1045ら呼び出す必
1046要はない.
1047
10483.6.2 周期ハンドラ
1049
1050周期ハンドラの起動位相を保存する機能はサポートしていない.
1051
1052(1) CRE_CYC 周期ハンドラの生成(静的API)
1053
1054cycatr に TA_PHS が指定された場合の機能(周期ハンドラの起動位相を保存
1055する)はサポートしていない.また,TA_ASM が指定された場合の機能(周期
1056ハンドラをアセンブリ言語で記述する)もサポートしていない.
1057
1058cycatr に TA_STA を指定し,cycphs に 0 を指定した場合,周期ハンドラの
1059初回の起動は,システム起動後の最初のタイムティックで行われる.すなわち,
1060cycphs に 1 を指定した場合と同じ振る舞いとなる.混乱の原因となるため,
1061cycphs に 0 を指定することは推奨しない.
1062
1063(2) sta_cyc 周期ハンドラの動作開始
1064
1065(3) stp_cyc 周期ハンドラの動作停止
1066
10673.7 システム状æ…
1068‹ç®¡ç†æ©Ÿèƒ½
1069
1070(1) rot_rdq, irot_rdq タスクの優å…
1071ˆé †ä½ã®å›žè»¢
1072
1073(2) get_tid, iget_tid 実行状æ…
1074‹ã®ã‚¿ã‚¹ã‚¯IDの参ç…
1075§
1076
1077(3) loc_cpu, iloc_cpu CPUロック状æ…
1078‹ã¸ã®ç§»è¡Œ
1079
1080(4) unl_cpu, iunl_cpu CPUロック状æ…
1081‹ã®è§£é™¤
1082
1083(5) dis_dsp ディスパッチの禁止
1084
1085(6) ena_dsp ディスパッチの許可
1086
1087(7) sns_ctx コンテキストの参ç…
1088§
1089
1090(8) sns_loc CPUロック状æ…
1091‹ã®å‚ç…
1092§
1093
1094(9) sns_dsp ディスパッチ禁止状æ…
1095‹ã®å‚ç…
1096§
1097
1098(10) sns_dpn ディスパッチ保留状æ…
1099‹ã®å‚ç…
1100§
1101
1102(11) vsns_ini カーネル動作状æ…
1103‹ã®å‚ç…
1104§
1105
1106【C言語API】
1107 BOOL state = vsns_ini();
1108
1109【パラメータ】
1110 なし
1111
1112【リターンパラメータ】
1113 BOOL state カーネル動作状æ…
1114‹
1115
1116【機能】
1117
1118カーネルの初期化完了前または終了処理開始後に呼び出された場合に TRUE,
1119カーネルの動作中に呼び出された場合に FALSE を返す.
1120
1121このサービスコールが TRUE を返す時には,他のサービスコールを呼び出して
1122はならない.このサービスコールが TRUE を返す時に他のサービスコールを呼
1123び出した場合,システムの動作は保証されない.
1124
11253.8 割込み管理機能
1126
1127割込みハンドラに関しては,「2.5 割込みハンドラ」を参ç…
1128§ã™ã‚‹ã“と.
1129
1130(1) DEF_INH 割込みハンドラの定義(静的API)
1131
1132INHNO型の定義と inhno の意味はターゲット毎に定める.inhatr には,
1133TA_HLNG のみを指定することができる.
1134
1135(2) dis_int 割込みの禁止
1136(3) ena_int 割込みの許可
1137(4) chg_ixx 割込みマスクの変更
1138(5) get_ixx 割込みマスクの参ç…
1139§
1140
1141これらのサービスコールがサポートされているかどうか,サポートされている
1142場合の仕様(xx の部分の名称,型とパラメータの名称と意味,CPUロック状æ…
1143‹
1144やディスパッチ状æ…
1145‹ã¨ã®é–¢é€£ï¼‰ã«ã¤ã„ては,ターゲット依存である.å…
1146·ä½“的に
1147は,ターゲット毎のマニュアルを参ç…
1148§ã™ã‚‹ã“と.
1149
11503.9 システム構成管理機能
1151
1152CPU例外ハンドラに関しては「2.7 CPU例外ハンドラ」を,初期化ルーチンに関
1153しては「2.9 システム初期化手順と初期化ルーチン」参ç…
1154§ã™ã‚‹ã“と.
1155
1156(1) DEF_EXC CPU例外ハンドラの定義(静的API)
1157
1158EXCNO型の定義と excno の意味はターゲット毎に定める.excatr には,
1159TA_HLNG のみを指定することができる.
1160
1161(2) ATT_INI 初期化ルーチンの追加(静的API)
1162
1163iniatr に TA_ASM が指定された場合の機能(初期化ルーチンをアセンブリ言
1164語で記述する)はサポートしていない.
1165
1166(3) VATT_TER 終了処理ルーチンの追加(静的API)
1167
1168【静的API】
1169 VATT_TER({ ATR teratr, VP_INT exinf, FP terrtn });
1170
1171【パラメータ】
1172 ATR teratr 終了処理ルーチン属性
1173 VP_INT exinf 終了処理ルーチンの拡張情
1174å ±
1175 FP terrtn 終了処理ルーチンの起動番地
1176
1177【機能】
1178
1179終了処理ルーチンを,指定される各パラメータに基づいて追加する.teratr
1180は終了処理ルーチンの属性,exinf は終了処理ルーチンを起動する時にパラメ
1181ータとして渡す拡張情
1182報,terrtn は終了処理ルーチンの起動番地である.
1183
1184VATT_TER においては,teratr はプリプロセッサ定数式パラメータである.
1185teratr には,TA_HLNG の指定ができる.TA_HLNG(=0x00)が指定された場合
1186には高級言語用のインタフェースで終了処理ルーチンを起動する.
1187
1188VATT_ATR によって追加された終了処理ルーチンは,システム終了処理時に実
1189行される.詳しくは,「2.12 システム終了手順と終了処理ルーチン」を参ç…
1190§
1191すること.
1192
11933.10 CPU例外発生時のシステム状æ…
1194‹å‚ç…
1195§
1196
1197CPU例外ハンドラ内
1198で,CPU例外が発生したコンテキストや状æ…
1199‹ã‚’参ç…
1200§ã™ã‚‹ãŸã‚
1201のサービスコールとして,JSPカーネルでは,五つのサービスコールを独自に
1202サポートしている.サービスコール vxsns_yyy は,CPU例外が発生した処理で
1203sns_yyy を呼び出した場合の結果を取り出すもので,CPU例外ハンドラに渡さ
1204れるパラメータ p_excinf をパラメータとする.
1205
1206(1) vxsns_ctx CPU例外発生時のコンテキストの参ç…
1207§
1208
1209【C言語API】
1210 BOOL state = vxsns_ctx(VP p_excinf);
1211
1212【パラメータ】
1213 VP p_excinf CPU例外に関する情
1214報を記憶している領域の
1215 å…
1216ˆé ­ç•ªåœ°
1217
1218【リターンパラメータ】
1219 BOOL state コンテキスト
1220
1221【機能】
1222
1223CPU例外が発生したコンテキストが,非タスクコンテキストの場合に TRUE,タ
1224スクコンテキストの場合に FALSE を返す.p_excinf には,CPU例外ハンドラ
1225に渡される p_excinfパラメータをそのまま渡す.CPU例外ハンドラ以外から呼
1226び出した場合や,p_excinf を正しく渡さなかった場合の振舞いは保証されな
1227い.
1228
1229(2) vxsns_loc CPU例外発生時のCPUロック状æ…
1230‹ã®å‚ç…
1231§
1232
1233【C言語API】
1234 BOOL state = vxsns_loc(VP p_excinf);
1235
1236【パラメータ】
1237 VP p_excinf CPU例外に関する情
1238報を記憶している領域の
1239 å…
1240ˆé ­ç•ªåœ°
1241
1242【リターンパラメータ】
1243 BOOL state CPUロック状æ…
1244‹
1245
1246【機能】
1247
1248CPU例外が発生した状æ…
1249‹ãŒï¼ŒCPUロック状æ…
1250‹ã®å ´åˆã« TRUE,CPUロック解除状æ…
1251‹
1252の場合に FALSE を返す.p_excinf には,CPU例外ハンドラに渡される
1253p_excinfパラメータをそのまま渡す.CPU例外ハンドラ以外から呼び出した場
1254合や,p_excinf を正しく渡さなかった場合の振舞いは保証されない.
1255
1256(3) vxsns_dsp CPU例外発生時のディスパッチ禁止状æ…
1257‹ã®å‚ç…
1258§
1259
1260【C言語API】
1261 BOOL state = vxsns_dsp(VP p_excinf);
1262
1263【パラメータ】
1264 VP p_excinf CPU例外に関する情
1265報を記憶している領域の
1266 å…
1267ˆé ­ç•ªåœ°
1268
1269【リターンパラメータ】
1270 BOOL state ディスパッチ禁止状æ…
1271‹
1272
1273【機能】
1274
1275CPU例外が発生した状æ…
1276‹ãŒï¼Œãƒ‡ã‚£ã‚¹ãƒ‘ッチ禁止状æ…
1277‹ã®å ´åˆã« TRUE,ディスパッ
1278チ許可状æ…
1279‹ã®å ´åˆã« FALSE を返す.p_excinf には,CPU例外ハンドラに渡さ
1280れる p_excinfパラメータをそのまま渡す.CPU例外ハンドラ以外から呼び出し
1281た場合や,p_excinf を正しく渡さなかった場合の振舞いは保証されない.
1282
1283【補足説明】
1284
1285CPU例外ハンドラの起動によってディスパッチ禁止/許可状æ…
1286‹ã¯å¤‰åŒ–せず,CPU
1287例外ハンドラ中ではディスパッチの禁止や許可は行えないため,vxsns_dsp の
1288返り値は sns_dsp の返り値に常に一致する.そのため,vxsns_dsp と
1289sns_dsp の処理内
1290容は同一となっている.
1291
1292(4) vxsns_dpn CPU例外発生時のディスパッチ保留状æ…
1293‹ã®å‚ç…
1294§
1295
1296【C言語API】
1297 BOOL state = vxsns_dpn(VP p_excinf);
1298
1299【パラメータ】
1300 VP p_excinf CPU例外に関する情
1301報を記憶している領域の
1302 å…
1303ˆé ­ç•ªåœ°
1304
1305【リターンパラメータ】
1306 BOOL state ディスパッチ保留状æ…
1307‹
1308
1309【機能】
1310
1311CPU例外が発生した状æ…
1312‹ãŒï¼Œãƒ‡ã‚£ã‚¹ãƒ‘ッチ保留状æ…
1313‹ã®å ´åˆã« TRUE,そうでない
1314場合に FALSE を返す.すなわち,ディスパッチャよりも優å…
1315ˆé †ä½ãŒé«˜ã„処理
1316が実行されていた時,CPUロック状æ…
1317‹ã§ã‚った時およびディスパッチ禁止状æ…
1318‹
1319であった時は,TRUE を返す.p_excinf には,CPU例外ハンドラに渡される
1320p_excinfパラメータをそのまま渡す.CPU例外ハンドラ以外から呼び出した場
1321合や, p_excinf を正しく渡さなかった場合の振舞いは保証されない.
1322
1323(5) vxsns_tex CPU例外発生時のタスク例外処理禁止状æ…
1324‹ã®å‚ç…
1325§
1326
1327【C言語API】
1328 BOOL state = vxsns_tex(VP p_excinf);
1329
1330【パラメータ】
1331 VP p_excinf CPU例外に関する情
1332報を記憶している領域の
1333 å…
1334ˆé ­ç•ªåœ°
1335
1336【リターンパラメータ】
1337 BOOL state タスク例外処理禁止状æ…
1338‹
1339
1340【機能】
1341
1342CPU例外が発生した時に実行状æ…
1343‹ã§ã‚ったタスクが,タスク例外処理禁止状æ…
1344‹
1345の場合に TRUE,タスク例外処理許可状æ…
1346‹ã®å ´åˆã« FALSE を返す.CPU例外が
1347非タスクコンテキストで発生し,その時に実行状æ…
1348‹ã®ã‚¿ã‚¹ã‚¯ãŒãªã‹ã£ãŸå ´åˆã«
1349も,FALSE を返す.p_excinf には,CPU例外ハンドラに渡される p_excinfパ
1350ラメータをそのまま渡す.CPU例外ハンドラ以外から呼び出した場合や,
1351p_excinf を正しく渡さなかった場合の振舞いは保証されない.
1352
1353【補足説明】
1354
1355CPU例外ハンドラの起動によってタスク例外処理禁止/許可状æ…
1356‹ã¯å¤‰åŒ–せず,
1357CPU例外ハンドラ中ではタスク例外処理の禁止や許可は行えないため,
1358vxsns_tex の返り値は sns_tex の返り値に常に一致する.そのため,
1359vxsns_tex と sns_tex の処理内
1360容は同一となっている.
1361
13623.11 性能評価用システム時刻参ç…
1363§æ©Ÿèƒ½
1364
1365JSPカーネルでは,JSPカーネル上で動作するタスクやJSPカーネル自身の性能
1366を計測するために,システム時刻より精度の高い性能評価用システム時刻を読
1367み出す機能を,ターゲット依存にサポートしている.性能評価用システム時刻
1368は,μ秒単位で表現されるが,実際の精度はターゲット依存である.å…
1369·ä½“的に
1370は,ターゲット毎のマニュアルを参ç…
1371§ã™ã‚‹ã“と.
1372
1373性能評価用システム時刻参ç…
1374§æ©Ÿèƒ½ã§ã¯ï¼Œæ¬¡ã®ãƒ‡ãƒ¼ã‚¿åž‹ã‚’用いる.
1375
1376 SYSUTIM 性能評価用システム時刻(符号無し整数)
1377
1378SYSUTIM型のサイズ数はターゲット依存である.å…
1379·ä½“的には,ターゲット毎の
1380マニュアルを参ç…
1381§ã™ã‚‹ã“と.
1382
1383(1) vxget_tim 性能評価用システム時刻の参ç…
1384§
1385
1386【C言語API】
1387 ER ercd = vxget_tim(SYSUTIM *p_sysutim);
1388
1389【パラメータ】
1390 なし
1391
1392【リターンパラメータ】
1393 ER ercd エラーコード
1394 SYSUTIM sysutim 現在の性能評価用システム時刻
1395
1396【エラーコード】
1397 E_CTX コンテキストエラー
1398
1399【機能】
1400
1401現在の性能評価用システム時刻を読み出し,sysutim に返す.
1402
1403このサービスコールは,タスクコンテキストからのみ呼び出すことができる.
1404非タスクコンテキストから呼び出した場合には,E_CTXエラーとなる.
1405
1406タスクコンテキストであれば,CPUロック状æ…
1407‹ã§ã‚っても呼び出せるが,CPUロッ
1408ク状æ…
1409‹ãŒé•·æ™‚間継続すると,タイマ割込みがå…
1410¥ã‚‰ãªã„ためにシステム時刻が更
1411新されず,このサービスコールも正しい性能評価用システム時刻を返せなくな
1412る.時間測定区間が短い場合を除いては,時間測定区間å…
1413¨ä½“ã‚’CPUロック状æ…
1414‹
1415とするのは適切ではない.
1416
1417
14184.システムログ機能
1419
1420システムログ機能は,カーネル内
1421で発生した異常事象(アサーションの失敗,
1422エラーコードを返せないエラー)を,システムの外部に通知するための機能で
1423ある.カーネルのトレースログ,システムサービスやアプリケーション内
1424で発
1425生した異常事象やトレースログにも,同じ機能を利用することができる.
1426
14274.1 システムログ機能の位置付け
1428
1429カーネル内
1430で発生した異常事象をシステムの外部に通知するための方法として,
1431シリアルインタフェースに出力する,ディスクに書き出すなどの方法が考えら
1432れる.
1433
1434システムログ機能は,カーネル内
1435部から呼び出されるという観点からは,カー
1436ネルの一部と考えるのが自然である.一方,シリアルインタフェースやディス
1437クにアクセスするためのサービス(デバイスドライバなど)はカーネル上で動
1438作するため,それらを用いるシステムログ機能は,カーネル上に実装
1439されたシ
1440ステムサービスと考える方が自然で,位置づけが微妙である.
1441
1442そこでJSPカーネルでは,カーネルの拡張機能として,異常事象に関する情
1443å ±
1444やトレースログ情
1445報(これを,ログ情
1446報と総称する)を,カーネル内
1447のバッファ
1448(これをログバッファと呼ぶ)に記録する機能と,ログバッファからログ情
1449å ±
1450を読み出す機能を用意する.これを,システムログ機能と呼ぶ.ログ情
1451報をロ
1452グバッファから読み出し,デバイスにアクセスするサービスを用いて外部に出
1453力する機能は,システムログタスクとしてカーネル上に実現する.
1454
14554.2 ログバッファへの記録と低レベル出力
1456
1457上述したように,ログ情
1458報をシステムの外部に出力するために,デバイスにア
1459クセスするサービスが必
1460要になるが,これらのサービスはカーネル上で動作し
1461ているため,カーネルの動作を継続できないような重大な異常事象が起こった
1462場合には,これらのサービスを使うことができない.また,これらのサービス
1463自身をデバッグする場合にも,デバイスにアクセスするサービスを使うことが
1464できない.
1465
1466そこで,カーネル上で動作するサービスが使えない場合にでもログ情
1467報を出力
1468するために,低レベル出力機能を用意する.低レベル出力機能は,ターゲット
1469依存に用意する低レベルの文字出力関数(sys_putc)を用いてログ情
1470報を出力
1471する機能である.低レベルの文字出力関数は,ターゲット依存部で用意するこ
1472ととしているが,最終製品に組み込まれる場合などでは,文字を出力する方法
1473がない状況も考えられる.そのような場合,低レベルの文字出力関数に送られ
1474た文字は,メモリ上に残しておくか,捨ててしまうしかない.
1475
1476ログ情
1477報を,ログバッファへ記録するか低レベル出力機能を用いて出力するか
1478の設定は,カーネルの拡張サービスコール(vmsk_log)によって行うことがで
1479きる.vmsk_log の使い方については後述する.
1480
1481低レベル出力機能を用いると,ログメッセージの作成処理(printf 相当の処
1482理)と低レベルの文字出力処理をカーネル内
1483で行うために,カーネルの応答性
1484が悪くなることに注意しなければならない.特に,低レベルの文字出力処理は
1485デバイスをポーリングする形で実装
1486するのが通常で,その場合には,カーネル
1487の応答性は実用的と言えない程に悪くなる.
1488
1489一方,カーネルの動作を継続できるような(あまり重大でない)事象について
1490は,ログ情
1491報をカーネル内
1492のログバッファに記録し,記録したログ情
1493報の出力
1494は,デバイスにアクセスするサービスを用いて動作するシステムログタスクに
1495任せる.システムログタスクはカーネル上で動作するタスクであり,カーネル
1496の拡張サービスコール(vrea_log)を用いて,ログバッファからログ情
1497報を読
1498み出す.JSPカーネルの標準é…
1499å¸ƒã‚­ãƒƒãƒˆã«ã¯ï¼Œã‚·ã‚¹ãƒ†ãƒ ãƒ­ã‚°ã‚¿ã‚¹ã‚¯ã®ä¸€ä¾‹ã¨ã—
1500て,シリアルインタフェースにログ情
1501報を文字列の形で出力するシステムログ
1502タスクを含めている.
1503
15044.3 ログ情
1505報の種別
1506
1507JSPカーネルのシステムログ機能は,ログ情
1508報に以下の種別を設けている.
1509
1510 LOG_TYPE_INH 割込みハンドラ
1511 LOG_TYPE_ISR 割込みサービスルーチン
1512 LOG_TYPE_CYC 周期ハンドラ
1513 LOG_TYPE_EXC CPU例外ハンドラ
1514 LOG_TYPE_TEX タスク例外処理ルーチン
1515 LOG_TYPE_TSKSTAT タスク状æ…
1516‹å¤‰åŒ–
1517 LOG_TYPE_DSP ディスパッチャ
1518 LOG_TYPE_SVC サービスコール
1519 LOG_TYPE_COMMENT コメント
1520 LOG_TYPE_ASSERT アサーションの失敗
1521
1522これらの種別は,ITRONデバッギングインタフェース仕様を参考に定めている.
1523ただし,ITRONデバッギングインタフェース仕様におけるトレースログ形式は,
1524RIM(RTOS Interface Module)がデバッグツールに渡す場合の形式を定めたも
1525のであり,カーネルが出力する形式と一致している必
1526要はない(RIM が変換す
1527ればよいため).実際,上の種別の中で,LOG_TYPE_CYC と LOG_TYPE_ASSERT
1528は,デバッギングインタフェース仕様と一致していない.
1529
1530ログ情
1531報の種別の中で,LOG_TYPE_COMMENT と LOG_TYPE_ASSERT 以外はカーネ
1532ルのトレースログのためのもので,どのように用いるかはターゲット依存部に
1533任されている(4.5節参ç…
1534§ï¼‰ï¼Ž
1535
15364.4 ログ情
1537報の重要度
1538
1539JSPカーネルのシステムログ機能は,ログ情
1540報を出力する際に指定する重要度
1541に基づいて,実際に出力するログ情
1542報を動的に設定することができる.これは,
1543UNIX のシステムログ機能をまねたもので,ログの重要度の種類や指定方法も
1544UNIX の API を参考にしている.また,低レベル出力機能を用いて出力するロ
1545グ情
1546報も,重要度に基づいて動的に設定することができる.
1547
1548å…
1549·ä½“的には,ログの重要度として次の8段階を用意している.
1550
1551 LOG_EMERG システムをシャットダウンすべきエラー
1552 LOG_ALERT
1553 LOG_CRIT
1554 LOG_ERROR 重要性の低いシステムエラー
1555 LOG_WARNING 警告メッセージ.システムは安å…
1556¨ã«ç¶™ç¶šå‹•ä½œã§ãã‚‹
1557 LOG_NOTICE
1558 LOG_INFO
1559 LOG_DEBUG デバッグのためのメッセージ
1560
1561なお,アサーションの失敗は,LOG_EMERG で出力する.カーネルのトレースロ
1562グは,LOG_DEBUG で出力するのを標準とする(ターゲット依存).
1563
1564どの重要度のログ情
1565報をログバッファに記録するかと,どの重要度のログ情
1566å ±
1567を低レベル出力機能を用いて出力するかは,カーネルの拡張サービスコール
1568(vmsk_log)によって設定することができる.vmsk_log の各パラメータは,
1569指定するログ情
1570報の集合を表すビットマップである.また,ビットマップを作
1571るためのマクロとして,LOG_MASK と LOG_UPTO を用意している.
1572
15734.5 トレースログ機能
1574
1575JSPカーネルは,カーネルのトレースログを取得するための基本的な仕組みを
1576持っているが,トレースログの実際の取得方法はターゲット依存となる.カー
1577ネルのトレースログの取得に,システムログ機能を使うのも選択肢の1つであ
1578る.ただし,カーネルのトレースログをシステムログタスクを用いて取り出す
1579方法は考えていない(システムログタスクが動作することによりトレースログ
1580が生成され,取り出すより多くのログ情
1581報が生成される可能性があるため).
1582
15834.6 システムログ機能の拡張サービスコール
1584
1585システムログ機能の提供する拡張サービスコールは次の通りである.
1586
1587(1) ER vwri_log(UINT prio, SYSLOG *p_log)
1588
1589システムログ機能に,重要度 prio でログ情
1590報を出力する(ログバッファへ記
1591録するか低レベル出力機能を用いて出力する).SYSLOG は,ログ情
1592報を格納
1593するためのデータ型(構造体)で,この拡張サービスコールには,それへのポ
1594インタを渡す.
1595
1596(2) ER_UINT vrea_log(SYSLOG *p_log)
1597
1598ログバッファからログ情
1599報を1つ取り出す.ログバッファが空の時は E_OBJ,
1600そうでない場合は,失われたログ情
1601報の数(ログ情
1602報が失われていない場合は
16030)を返す.システムログタスクが用いることを想定している.
1604
1605(3) ER vmsk_log(UINT logmask, UINT lowmask)
1606
1607ログバッファに記録すべきログ情
1608報の重要度のビットマスク(logmask)と,
1609低レベル出力機能を用いて出力すべきログ情
1610報の重要度のビットマスク
1611(lowmask)を設定する.
1612
16134.7 システムログ機能のためのライブラリ関数とマクロ
1614
1615システムログ機能は,上記のサービスコールに加えて,次のライブラリ関数と
1616マクロを提供する.
1617
1618(1) void _syslog_n(UINT prio, UINT type, VP_INT arg1, ..., VP_INT argn)
1619 ※ n は 0〜6 のいずれか.
1620
1621ログ種別が type,パラメータが arg1〜argn のログ情
1622報を,重要度 prio で
1623出力するためのライブラリ関数.
1624
1625(2) void syslog_n(UINT prio, const char *format, arg1, ..., argn)
1626 ※ n は 0〜5 のいずれか.
1627
1628format 文字列およびそれに続く引数から作成されるコメント(ログ種別が
1629LOG_TYPE_COMMENT のログ情
1630報)を,重要度 prio で出力するためのマクロ.
1631
1632format はメッセージのフォーマット記述,arg1〜argn はフォーマット記述中
1633で参ç…
1634§ã•ã‚Œã‚‹å€¤ã§ï¼Œprintf のフォーマット記述のサブセットとなっている.
1635arg1〜argn は VP_INT型にキャストされるため,VP_INT型に型変換できる任意
1636の型を渡すことができ,型チェックはされない.format および arg1〜argn
1637には,次の制限がある.
1638
1639・format のフォーマット記述は,このマクロから戻った後も変化してはなら
1640ない.定数文字列を渡すことを想定している.
1641
1642・format 中に使えるフォーマット指定は次の通り.
1643
1644 %d 引数をsigned int型とみなし,10進数で表示
1645 %u 引数をunsigned int型とみなし,10進数で表示
1646 %x 引数をunsigned int型とみなし,16進数(英文字は小文字)で表示
1647 %X 引数をunsigned int型とみなし,16進数(英文字は大文字)で表示
1648 %p 引数をポインタとみなし,16進数(英文字は小文字)で表示
1649 %c 引数を文字コードとみなし,文字を表示
1650 %s 引数を文字列を示すポインタとみなし,文字列を表示
1651 %% '%' を表示(引数は取らない)
1652
1653%d, %u, %x, %X においては,'%' の直後に表示桁数を指定する10進数値を記述
1654することができる.その場合,表示すべき文字列が指定した桁数に満たない場
1655合には,指定した桁数内
1656に右詰めで表示する.10進数値が '0' で始まる場合
1657には,その間に '0' を埋める.
1658
1659また,VP_INT型のサイズが long型のサイズ以上である環境においては,次の
1660フォーマット指定も使用することができる.この他のフォーマット指定に 'l'
1661を付加した場合には無視する(%lcと%lsには対応していない).
1662
1663 %ld 引数をsigned long型とみなし,10進数で表示
1664 %lu 引数をunsigned long型とみなし,10進数で表示
1665 %lx 引数をunsigned long型とみなし,16進数(英文字は小文字)で表示
1666 %lX 引数をunsigned long型とみなし,16進数(英文字は大文字)で表示
1667
1668・arg1〜argn にポインタを渡す場合(%s に対応する引数の場合)に,ポイン
1669タの指すデータは,このマクロから戻った後も変化してはならない.定数文字
1670列を渡すことを想定している.
1671
1672(3) void syslog(UINT prio, const char *format, ...)
1673
1674format 文字列およびそれに続く引数から作成されるメッセージを,重要度
1675prio でログ情
1676報として出力するためのライブラリ関数で,引数の数を可変に
1677したもの.format に続く引数は最大5個まで.format およびそれに続く引数
1678には,syslog_n と同様の制限がある.
1679
1680このライブラリ関数は,可変数引数を処理するために内
1681部で文字列をスキャン
1682する.そのため,実行時間が長くなる可能性があり,割込み禁止状æ…
1683‹ã§å‘¼ã³å‡º
1684すべきではない.主にアプリケーションプログラムが用いることを想定してい
1685る.そのため,このライブラリ関数のソースファイルは,サポートライブラリ
1686のディレクトリに置いている.
1687
1688(4) UINT LOG_MASK(UINT prio)
1689
1690重要度 prio のみセットされたビットマップを作るマクロ.vmsk_log に渡す
1691引数を作るために用いる.
1692
1693(5) UINT LOG_UPTO(UINT prio)
1694
1695重要度 prio 以上の重要度がすべてセットされたビットマップを作るマクロ.
1696vmsk_log に渡す引数を作るために用いる.
1697
1698(6) void syslog_printf(const char *format, VP_INT *args, void (*putc)(char))
1699(7) void syslog_print(SYSLOG *p_sys, void (*putc)(char))
1700(8) void syslog_output(void (*putc)(char))
1701
1702ログ情
1703報をフォーマット出力するためのライブラリ関数.syslog_printf は渡
1704されたフォーマット文字列と引数を,syslog_print は渡されたログ情
1705報を,
1706syslog_output はログバッファに格納されたログ情
1707報をフォーマット出力する.
1708
1709システムログタスクが用いることを想定しているため,このライブラリ関数の
1710ソースファイルはサポートライブラリのディレクトリに置いている.ただし,
1711低レベル出力を行うために,システムログ機能内
1712部でも用いている.
1713
17144.8 システムログ機能の設定方法
1715
1716JSPカーネルのシステムログ機能の想定されている設定方法は,以下の通りで
1717ある.
1718
1719(a) 重大な異常事象を示すログ情
1720報は低レベル出力機能を用いて出力し,そう
1721でないログ情
1722報の出力はシステムログタスクに任せる.
1723
1724ログバッファに記録するログ情
1725報の重要度と,低レベル出力を用いて出力する
1726ログ情
1727報の重要度を適切に設定する.また,ログバッファからログ情
1728報を読み
1729出して外部へ通知するシステムログタスクと,低レベルの文字出力関数を用意
1730する.
1731
1732(b) すべてのログ情
1733報を,低レベル出力機能を用いて出力する.
1734
1735必
1736要なログ情
1737報はすべて低レベル出力機能を用いて出力するよう設定
1738(vmsk_log の第1パラメータを 0 に設定)する.また,低レベルの文字出力
1739関数を用意する.システムログタスクは不要.
1740
1741(c) ログ情
1742報はメモリ上に記録するだけで,システム外部には出力しない.
1743
1744必
1745要なログ情
1746報はすべてログバッファへ記録するように設定(vmsk_log の第2
1747パラメータを 0 に設定)する.システムログタスクは不要.
1748
1749(d) ログ情
1750報は記録も出力もしない.
1751
1752いずれのログ情
1753報も記録/出力しないように設定(vmsk_log の両パラメータ
1754ともに 0 に設定)する.
1755
1756別の方法として,OMIT_SYSLOG を定義してコンパイルすることで,システムロ
1757グ機能をカーネルから取り外し,カーネルのコードサイズを小さくすることが
1758できる.ただし,アプリケーションから syslog,syslog_printf,syslog_print,
1759syslog_output の各関数を呼び出している場合,それらの関数のコードは外れ
1760ない.また,カーネルからのログ情
1761報は記録/出力しないが,アプリケーショ
1762ンからのログ情
1763報は記録/出力したい場合には,カーネルのみ OMIT_SYSLOG
1764を定義してコンパイルすればよい.この場合,システムログ機能の初期化関数
1765(_kernel_syslog_initialize)と終了処理関数(_kernel_syslog_teminate)
1766は,アプリケーションから呼び出す必
1767要がある.
1768
1769なお,(b)〜(c) の設定に固定して使用する場合にも,カーネル内
1770の一部のコー
1771ドが不要になり,コードサイズを小さくできる余地があるが,簡易な方法は用
1772意していない.
1773
1774
17755.システムサービス
1776
1777この節では,JSPカーネルがサポートしているシステムインタフェースレイヤ
1778(SIL)と,JSPカーネルが標準的に動作させるドライバおよびシステムタスク
1779について説明する.
1780
17815.1 システムインタフェースレイヤ(SIL)
1782
1783JSPカーネルは,ITRONデバイスドライバ設計ガイドラインの一部分として検討
1784されているシステムインタフェースレイヤ(SIL)の中で,以下に挙げる機能
1785をサポートしている.SILを用いるプログラムからは,t_services.hに代えて,
1786s_services.hをインクルードする.
1787
1788ITRONデバイスドライバ設計ガイドラインでは,デバイスドライバの中で,SIL
1789を通して直接デバイスにアクセスするモジュール(PDIC)と,カーネルの機能
1790を用いるモジュール(GDIC)を分離することにしている.すなわち,PDICは
1791SILを用いるがカーネルの機能は用いず,GDICはカーネルの機能は用いるがSIL
1792を用いてはならない.そのため,s_services.hには,カーネルを用いるための
1793宣言や定義は含まれていない.
1794
17955.1.1 割込みロック状æ…
1796‹ã®åˆ¶å¾¡
1797
1798デバイスを扱うプログラムの中では,すべての割込み(NMIを除く,以下同じ)
1799を禁止したい場合がある.μITRON4.0仕様のCPUロック状æ…
1800‹ã¯ï¼Œã‚«ãƒ¼ãƒãƒ«ã®ç®¡
1801理外の割込み(NMI以外にカーネルの管理外の割込みがあるかは,JSPカーネル
1802ではターゲット依存)を禁止するとは限らず,このような場合に用いるのは適
1803切でない.
1804
1805そこで,すべての割込みを禁止した状æ…
1806‹ã‚’割込みロック状æ…
1807‹ã¨å‘¼ã³ï¼ŒSILでは
1808割込みロック状æ…
1809‹ã‚’制御するための以下の機能を用意している.
1810
1811(1) SIL_PRE_LOC
1812
1813割込みロック状æ…
1814‹ã®åˆ¶å¾¡ã«å¿…
1815要な変数を宣言し,それを初期化するマクロ.こ
1816のマクロを記述した時点で,割込みの禁止状æ…
1817‹ã‚’記録する.SIL_LOC_INT,
1818SIL_UNL_INTを用いる関数(ブロック)のå…
1819ˆé ­ã®å¤‰æ•°å®£è¨€éƒ¨ã«è¨˜è¿°ã—なければ
1820ならない.
1821
1822(2) SIL_LOC_INT()
1823
1824すべての割込みを禁止し,割込みロック状æ…
1825‹ã«ç§»è¡Œã™ã‚‹ï¼Ž
1826
1827(3) SIL_UNL_INT()
1828
1829SIL_PRE_LOCを記述した時点の状æ…
1830‹ã«æˆ»ã™ï¼Ž
1831
1832割込みロック状æ…
1833‹ã®åˆ¶å¾¡æ©Ÿèƒ½ã®ä½¿ç”¨ä¾‹ã¯æ¬¡ã®é€šã‚Šï¼Ž
1834
1835 {
1836 SIL_PRE_LOC;
1837
1838 SIL_LOC_INT();
1839 この間はすべての割込みが禁止される
1840 この間にサービスコールを呼び出してはならない
1841 SIL_UNL_INT();
1842 }
1843
1844なお,JSPカーネル自身は割込みロック状æ…
1845‹ã¯ç®¡ç†ã—ていないため,割込ロッ
1846ク状æ…
1847‹ã§ã¯ã‚µãƒ¼ãƒ“スコールを呼び出してはならない(呼び出した場合の動作は
1848保証されない).
1849
18505.1.2 微少時間待
1851ち
1852
1853デバイスをアクセスする際に,微少な時間待
1854ちをå…
1855¥ã‚Œãªã‘ればならない場合が
1856ある.そのような場合に,nopをいくつかå…
1857¥ã‚Œã‚‹ãªã©ã®æ–¹æ³•ã§å¯¾å¿œã™ã‚‹ã¨ï¼Œãƒ
1858ータビリティが悪くなる.そこでSILでは,微少な時間待
1859ちを行うための機能
1860を用意している.
1861
1862(1) void sil_dly_nse(UINT dlytim)
1863
1864dlytimで指定された以上の時間(単位はナノ秒),ループなどによって待
1865つ.
1866指定した値によっては,指定した時間よりもかなり長く待
1867つ場合があるので注
1868意すること.
1869
18705.1.3 エンディアン
1871
1872プロセッサのエンディアンを知るためのマクロとして,以下のマクロを定義し
1873ている.
1874
1875(1) SIL_ENDIAN
1876
1877リトルエンディアンプロセッサではSIL_ENDIAN_LITTLE(=0),ビッグエンディ
1878アンプロセッサではSIL_ENDIAN_BIG(=1)にマクロ定義される.
1879
18805.1.4 メモリ空間アクセス関数
1881
1882メモリ空間にマッピングされたデバイスレジスタや,デバイスとのå…
1883±æœ‰ãƒ¡ãƒ¢ãƒª
1884をアクセスするために,以下の関数を用意している.
1885
1886(1) VB sil_reb_mem(VP mem)
1887
1888memで指定されるアドレスから,8ビット単位で読んだ値を返す.
1889
1890(2) void sil_wrb_mem(VP mem, VB data)
1891
1892memで指定されるアドレスに,dataで指定される値を8ビット単位で書き込む.
1893
1894(3) VH sil_reh_mem(VP mem)
1895
1896memで指定されるアドレスから,16ビット単位で読んだ値を返す.
1897
1898(4) void sil_wrh_mem(VP mem, VH data)
1899
1900memで指定されるアドレスに,dataで指定される値を16ビット単位で書き込む.
1901
1902(5) VH sil_reh_lem(VP mem)
1903
1904memで指定されるアドレスから,16ビット単位でリトルエンディアンで読んだ
1905値を返す.リトルエンディアンプロセッサでは,sil_reh_memと一致する.
1906
1907(6) void sil_wrh_lem(VP mem, VH data)
1908
1909memで指定されるアドレスに,dataで指定される値を16ビット単位でリトルエ
1910ンディアンで書き込む.リトルエンディアンプロセッサでは,sil_wrh_memと
1911一致する.
1912
1913(7) VH sil_reh_bem(VP mem)
1914
1915memで指定されるアドレスから,16ビット単位でビッグエンディアンで読んだ
1916値を返す.ビッグエンディアンプロセッサでは,sil_reh_memと一致する.
1917
1918(8) void sil_wrh_bem(VP mem, VH data)
1919
1920memで指定されるアドレスに,dataで指定される値を16ビット単位でビッグエ
1921ンディアンで書き込む.ビッグエンディアンプロセッサでは,sil_wrh_memと
1922一致する.
1923
1924(9) VW sil_rew_mem(VP mem)
1925
1926memで指定されるアドレスから,32ビット単位で読んだ値を返す.
1927
1928(10) void sil_wrw_mem(VP mem, VW data)
1929
1930memで指定されるアドレスに,dataで指定される値を32ビット単位で書き込む.
1931
1932(11) VW sil_rew_lem(VP mem)
1933
1934memで指定されるアドレスから,32ビット単位でリトルエンディアンで読んだ
1935値を返す.リトルエンディアンプロセッサでは,sil_rew_memと一致する.
1936
1937(12) void sil_wrw_lem(VP mem, VW data)
1938
1939memで指定されるアドレスに,dataで指定される値を32ビット単位でリトルエ
1940ンディアンで書き込む.リトルエンディアンプロセッサでは,sil_wrw_memと
1941一致する.
1942
1943(13) VW sil_rew_bem(VP mem)
1944
1945memで指定されるアドレスから,32ビット単位でビッグエンディアンで読んだ
1946値を返す.ビッグエンディアンプロセッサでは,sil_rew_memと一致する.
1947
1948(14) void sil_wrw_bem(VP mem, VW data)
1949
1950memで指定されるアドレスに,dataで指定される値を32ビット単位でビッグエ
1951ンディアンで書き込む.ビッグエンディアンプロセッサでは,sil_wrw_memと
1952一致する.
1953
1954なお,JSPカーネルのターゲット非依存部では,I/O空間にアクセスするための
1955関数を用意していないが,ターゲット依存部でサポートすることは可能である.
1956詳しくは,ターゲット毎のマニュアルを参ç…
1957§ã™ã‚‹ã“と.
1958
19595.2 システムクロックドライバ
1960
1961システムクロックドライバは,ハードウェアタイマを用いて周期的に割込みを
1962発生させ,isig_timを呼び出してカーネルにタイムティックを供給する.シス
1963テムクロックドライバは,システムコンフィギュレーションファイルに
1964timer.cfgをインクルードすることで,システムに組み込むことができる.
1965
19665.2.1 システムクロックドライバの内
1967部構成
1968
1969システムクロックドライバは,タイマの起動処理,タイマ割込みハンドラ,タ
1970イマの停止処理で構成される.
1971
1972(1) void timer_initialize(VP_INT exinf)
1973
1974タイマの起動処理.タイマを初期化し,周期的なタイマ割込み要求を発生させ
1975る.カーネルに初期化ルーチンとして登録する.exinfは無視する.
1976
1977(2) void timer_handler()
1978
1979タイマ割込みハンドラ.タイマ割込み要求をクリアした後,isig_timを呼び出
1980してタイムティックを供給する.カーネルに割込みハンドラとして登録する.
1981
1982(3) void timer_terminate(VP_INT exinf)
1983
1984タイマの停止処理.周期的なタイマ割込み要求を停止させる.カーネルに終了
1985処理ルーチンとして登録する.exinf は無視する.
1986
19875.3 シリアルインタフェースドライバ
1988
1989シリアルインタフェースドライバは,シリアルポートを扱うためのドライバで
1990ある.シリアルインタフェースドライバは,システムコンフィギュレーション
1991ファイルにserial.cfgをインクルードすることで,システムに組み込むことが
1992できる.
1993
1994シリアルインタフェースドライバは,ポート毎にセマフォを2個ずつ使用する.
1995セマフォを生成する静的APIは,serial.cfgに含まれている.
1996
1997NEWLIBやGLIBCなどの標準Cライブラリを使用する場合には,標準Cライブラリ
1998の低レベルå…
1999¥å‡ºåŠ›ãƒ«ãƒ¼ãƒãƒ³ã‚’シリアルインタフェースドライバを呼び出すもの
2000にすることで,タスクの標準å…
2001¥å‡ºåŠ›ã‚’シリアルインタフェースドライバ経由に
2002切り替えることができる.å…
2003·ä½“的な方法は,用いる標準Cライブラリに依存す
2004る.
2005
20065.3.1 シリアルインタフェースドライバのサービスコール
2007
2008シリアルインタフェースドライバを呼び出すサービスコールの仕様は下記の通
2009りである.この中で,シリアルポートのID番号(portid)の解釈はターゲット
2010依存となる.
2011
2012これらのサービスコールは,非タスクコンテキストから呼び出すことはできな
2013い.また,serial_rea_datとserial_wri_datは,ディスパッチ保留状æ…
2014‹ã§å‘¼ã³
2015出すことはできない.いずれも,呼び出した場合にはE_CTXエラーとなる.
2016
2017(1) ER serial_opn_por(ID portid)
2018
2019portidで示されるシリアルポートをオープンし,受信/送信が可能な状æ…
2020‹ã«ã™
2021る.
2022
2023(2) ER serial_cls_por(ID portid)
2024
2025portidで示されるシリアルポートをクローズする.
2026
2027(3) ER_UINT serial_rea_dat(ID portid, char *buf, UINT len)
2028
2029portidで示されるシリアルポートから,lenバイトの文字列を受信し,bufから
2030の領域にå…
2031¥ã‚Œã‚‹ï¼Žlenバイト受信するまで,待
2032ち状æ…
2033‹ã¨ãªã‚‹ï¼Žå—信した文字数
2034またはエラーコードを返す.
2035
2036(4) ER_UINT serial_wri_dat(ID portid, char *buf, UINT len)
2037
2038portidで示されるシリアルポートに,bufからのlenバイトの文字列を送信する.
2039lenバイト送信バッファにå…
2040¥ã‚Œã‚‹ã¾ã§ï¼Œå¾…
2041ち状æ…
2042‹ã¨ãªã‚‹ï¼Žé€ä¿¡ã—た文字数また
2043はエラーコードを返す.
2044
2045(5) ER serial_ctl_por(ID portid, UINT ioctl)
2046
2047portidで示されるシリアルポートの制御情
2048報を,ioctlで示される値に設定す
2049る.
2050
2051ioctlには,以下の制御情
2052報を表す定数を,ビット毎に論理和をとったものを
2053指定する.
2054
2055 IOCTL_ECHO(エコーバックモード)
2056 このビットを設定すると,シリアルインタフェースドライバがエコー
2057 バックを行う.å…
2058·ä½“的には,バッファから文字を取り出す度に,その
2059 文字を書き出す.
2060
2061 IOCTL_CRLF(改行モード)
2062 LF(line feed)を書き出すと,CR(carriage return)+ LFに変換し
2063 て書き出す.
2064
2065 IOCTL_FCSND(出力フロー制御)
2066 文字を送信する処理に対して,XON/XOFFによるフロー制御を行う.
2067 すなわち,STOP(コントロール-S)を受信すると送信を停止し,
2068 START(コントロール-Q)を受信すると送信を再開する.
2069
2070 IOCTL_FCANY(送信フロー制御で任意の文字で送信再開)
2071 IOCTL_FCOUTを指定している時に,送信停止中に受信した任意の文字
2072 で送信を再開する.
2073
2074 IOCTL_FCRCV(受信フロー制御)
2075 文字を受信する処理に対して,XON/XOFFによるフロー制御を行う.
2076 すなわち,受信バッファの残り領域が少なくなるとSTOP(コントロー
2077 ル-S)を送出し,残り領域が増えればSTART(コントロール-Q)を送
2078 出する.
2079
2080なお,オープン直後のデフォルトの設定値は(IOCTL_ECHO | IOCTL_CRLF |
2081IOCTL_FCOUT | IOCTL_FCIN)である.
2082
2083(6) ER serial_ref_por(ID portid, T_SERIAL_RPOR *pk_rpor)
2084
2085portidで示されるシリアルポートの状æ…
2086‹ã‚’参ç…
2087§ã—,pk_rporで指定されるパケッ
2088トに返す.パケット中のreacntには受信バッファ中の文字数を,wricntには送
2089信バッファ中の文字数を返す.
2090
20915.3.2 シリアルインタフェースドライバの内
2092部構成
2093
2094シリアルインタフェースドライバは,前記のサービスコールに加えて,初期化
2095処理と割込みハンドラで構成される.初期化処理は,カーネルに初期化ルーチ
2096ンとして登録する.割込みハンドラは,カーネルに割込みハンドラとして登録
2097する.これらの登録処理はserial.cfgに含まれる.
2098
2099(1) void serial_initialize(VP_INT exinf)
2100
2101シリアルインタフェースドライバを初期化する.カーネルに初期化ルーチンと
2102して登録する.exinfは無視する.
2103
2104(2) 割込みハンドラ
2105
2106シリアルI/Oデバイスの種類によって,割込みハンドラの種類や数は異なる.
2107å…
2108·ä½“的には,送信割込みと受信割込みが別れているものと別れていないものや,
2109ポートを複数持つシリアルI/Oデバイスでポート毎に割込みハンドラが別れて
2110いるものと別れていないものがある.シリアルインタフェースドライバの割込
2111みハンドラは,カーネルに割込みハンドラとして登録する.
2112
21135.4 システムログタスク
2114
2115システムログタスクは,カーネル内
2116のログバッファからログ情
2117報を取り出し,
2118デバイスにアクセスするサービスを用いて外部に出力するタスクである.
2119
2120JSPカーネルの標準é…
2121å¸ƒã‚­ãƒƒãƒˆã«å«ã¾ã‚Œã‚‹ã‚·ã‚¹ãƒ†ãƒ ãƒ­ã‚°ã‚¿ã‚¹ã‚¯ã¯ï¼Œã‚·ãƒªã‚¢ãƒ«ã‚¤
2122ンタフェースにログ情
2123報を文字列の形で出力するもので,システムログタスク
2124の一例という位置付けで提供している.このシステムログタスクは,システム
2125コンフィギュレーションファイルにlogtask.cfgをインクルードすることで,
2126システムに組み込むことができる.
2127
2128
21296.サポートライブラリ
2130
2131サポートライブラリは,アプリケーションやシステムサービスを作成するため
2132に利用できるライブラリ関数群である.現バージョンでは,システムサービス
2133やサンプルプログラムで使う最低限の関数しか用意していない.
2134
2135(1) const char *itron_strerror(ER ercd)
2136
2137ercd で示されるメインエラーコードに対応するエラーコードの文字列を返す.
2138返された文字列を書き換えてはならない.
2139
2140(2) void t_perror(const char *file, int line, const char *expr, ER ercd)
2141
2142エラーメッセージをシステムログサービスに出力する.assertマクロなどで利
2143用することを想定している.
2144
2145
21467.開発環境・インストール・ポーティング
2147
21487.1 ディレクトリ・ファイル構成
2149
2150ソースファイルのディレクトリ構成は次の通り.
2151
2152 include/ å…
2153±é€šãƒ˜ãƒƒãƒ€ãƒ•ã‚¡ã‚¤ãƒ«
2154 kernel/ カーネルソースファイル
2155 systask/ システムサービスソースファイル
2156 library/ サポートライブラリソースファイル
2157 config/ ターゲット依存部
2158 m68k/ M68040 プロセッサ依存ファイル
2159 dve68k/ DVE-68K/40 システム依存ファイル
2160 sh1/ SH1 プロセッサ依存ファイル
2161 kz_sh1/ KZ-SH1-01 システム依存ファイル
2162 zunda_sh1/ ZUNDA/SH1 システム依存ファイル
2163 sh2/ SH2 プロセッサ依存ファイル
2164 apsh2f6a/ APSH2F6A システム依存ファイル
2165 hsb7616it/ HSB7616IT システム依存ファイル
2166 sh3/ SH3 プロセッサ依存ファイル
2167 ms7727cp01/ MS7727CP01 システム依存ファイル
2168 solution_engine/ Solution Engine システム依存ファイル
2169 sh3-ghs/ SH3 プロセッサ依存ファイル(GHS開発環境)
2170 ms7727cp01/ MS7727CP01 システム依存ファイル
2171 solution_engine/ Solution Engine システム依存ファイル
2172 h8/ H8 プロセッサ依存ファイル
2173 akih8_3048f/ AKI-H8/3048F システム依存ファイル
2174 akih8_3052f/ AKI-H8/3052F システム依存ファイル
2175 akih8_3069f/ AKI-H8/3069F システム依存ファイル
2176 nkev_010h8/ NKEV-010H8 システム依存ファイル
2177 h8-renesas/ H8 プロセッサ依存ファイル(Renesas開発環境)
2178 hsb8f3048bf25/ H8_3048F システム依存ファイル
2179 h8s/ H8S プロセッサ依存ファイル
2180 h8s2350/ H8S_2350 システム依存ファイル
2181 h8s2351/ H8S_2351 システム依存ファイル
2182 armv4/ ARMV4 プロセッサ依存ファイル
2183 integrator/ Integrator システム依存ファイル
2184 az9360mb/ AZ9360MB システム依存ファイル
2185 armv4-ghs/ ARMV4 プロセッサ依存ファイル(GHS開発環境)
2186 integrator/ Integrator システム依存ファイル
2187 microblaze/ MicroBlaze プロセッサ依存ファイル
2188 miref/ MIREF システム依存ファイル
2189 mire_multi/ MIRE_MULTI3000 システム依存ファイル
2190 mutlimedia/ MultiMedia Board システム依存ファイル
2191 suzaku/ Suzaku システム依存ファイル
2192 tms320c54x/ TMS320C54x プロセッサ依存ファイル
2193 c5402dsk/ TMS320VC5402 DSK システム依存ファイル
2194 xstormy16/ Xstormy16 プロセッサ依存ファイル
2195 simulator/ 三洋マイコン開発ツール環境 依存ファイル
2196 mips3/ MIPS3 プロセッサ依存ファイル
2197 vr4131/ VR4131 システム依存ファイル
2198 vr5500/ VR5500 システム依存ファイル
2199 m16c-renesas/ M16C プロセッサ依存ファイル(Renesas開発環境)
2200 oaks16/ OAKS16 システム依存ファイル
2201 oaks16_mini/ OAKS16_MINI システム依存ファイル
2202 m32c-renesas/ M32C プロセッサ依存ファイル(Renesas開発環境)
2203 oaks32/ OAKS32 システム依存ファイル
2204 m32r/ M32R プロセッサ依存ファイル
2205 m3a2131g50/ M3A-2131G50 システム依存ファイル
2206 m3a_za36/ M3A-ZA36 システム依存ファイル
2207 s1c33/ S1C33 プロセッサ依存ファイル
2208 dmt33209/ DMT33209 システム依存ファイル
2209 dmt33401/ DMT33401 システム依存ファイル
2210 luxun2/ LUXUN2 システム依存ファイル
2211 luxun4/ LUXUN4 システム依存ファイル
2212 s1c33-gnu33/ S1C33 プロセッサ依存ファイル(GNU33開発環境)
2213 dmt33209/ DMT33209 システム依存ファイル
2214 dmt33401/ DMT33401 システム依存ファイル
2215 luxun2/ LUXUN2 システム依存ファイル
2216 luxun4/ LUXUN4 システム依存ファイル
2217 powerpc32/ POWERPC32 プロセッサ依存ファイル
2218 ibm_ppc_emb_sample/ The IBM PowerPC Embedded Environment システム依存ファイル
2219 mpc860t/ MPC860T システム依存ファイル
2220 nios2/ NIOS2 プロセッサ依存ファイル
2221 altera_dev_board/ ALTERA_DEV システム依存ファイル
2222 v850/ V850 プロセッサ依存ファイル
2223 tk850_kj1/ TK-850ES システム依存ファイル
2224 tk850_sg2/ TK-850SG2 システム依存ファイル
2225 tlcs900-toshiba/ TLCS900 プロセッサ依存部ファイル
2226 zup_f16_ex/ Zup-F16拡張ボード システム依存ファイル
2227 linux/ Linux上のシミュレーション環境依存ファイル
2228 windows/ Windows上のシミュレーション環境依存ファイル
2229 tools/ 開発環境依存ディレクトリ
2230 WINDOWS/ Windows上のサンプルプログラムとプロジェクトファイル
2231 GHS/ GHS(Green Hills Software)開発環境用のファイル
2232 C5402DSK/ TMS320VC5402 DSK用のプロジェクトファイル
2233 H8-RENESAS/ H8-RENESAS用のプロジェクトディレクトリ
2234 M16C-RENESAS/ M16C-RENESAS用のプロジェクトディレクトリ
2235 M32C-RENESAS/ M32C-RENESAS用のプロジェクトディレクトリ
2236 pdic/ PDIC(デバイスドライバのOS非依存部分)
2237 simple_sio/ 簡易SIOドライバ(シリアルドライバが使用するもの)
2238 cfg/ カーネルコンフィギュレータ
2239 utils/ ユーティリティ
2240 h8/ H8用ベクターテーブル生成ユーティリティ
2241 h8-renesas/ H8-RENESAS用ベクターテーブル生成ユーティリティ
2242 m16c-renesas/ M16C-RENESAS用ベクターテーブル生成ユーティリティ
2243 sample/ サンプルプログラムと Makefile
2244 doc/ ドキュメント
2245 windev/ Windowsデバイスマネージャ
2246
2247ターゲット非依存部(カーネルコンフィギュレータは除く)の各ファイルの概
2248要は次の通り.
2249
2250 README TOPPERS/JSPカーネルの簡単な紹介
2251 configure コンフィギュレーションスクリプト
2252
2253 include/
2254 itron.h ITRON仕様å…
2255±é€šè¦å®šã«é–¢é€£ã™ã‚‹å®šç¾©
2256 kernel.h μITRON4.0仕様に関連する定義
2257 kernel_debug.h μITRON4.0仕様 デバッグ用インクルードファイル
2258 sil.h システムインタフェースレイヤ(SIL)
2259 t_stddef.h カーネル・アプリケーション å…
2260±é€šã‚¤ãƒ³ã‚¯ãƒ«ãƒ¼ãƒ‰ãƒ•ã‚¡ã‚¤ãƒ«
2261 t_config.h ターゲット依存情
2262報の定義
2263 t_syslog.h システムログサービス関連の定義
2264 t_services.h アプリケーション用 標準インクルードファイル
2265 s_services.h デバイスドライバ用 標準インクルードファイル
2266 kernel_cfg.h kernel_cfg.c用のインクルードファイル
2267 timer.h システムクロックドライバ関連の定義
2268 serial.h シリアルインタフェースドライバ関連の定義
2269 logtask.h システムログタスク関連の定義
2270 linux_sigio.h Linux用 ノンブロッキングI/Oサポート
2271
2272 kernel/
2273 Makefile.kernel カーネルのファイル構成の定義
2274 jsp_kernel.h JSPカーネル用 標準インクルードファイル
2275 jsp_rename.def カーネルの内
2276部識別名のリネーム定義
2277 jsp_rename.h カーネルの内
2278部識別名のリネーム
2279 jsp_unrename.h カーネルの内
2280部識別名のリネーム解除
2281 check.h エラーチェック用マクロ
2282 queue.h ダブルリンクキューの構造と操作
2283 startup.c カーネルの初期化処理
2284 banner.c カーネルの起動メッセージの出力
2285 task.h タスク操作ルーチン関連の定義
2286 task.c タスク操作ルーチン
2287 wait.h 待
2288ち状æ…
2289‹æ“ä½œãƒ«ãƒ¼ãƒãƒ³é–¢é€£ã®å®šç¾©
2290 wait.c 待
2291ち状æ…
2292‹æ“ä½œãƒ«ãƒ¼ãƒãƒ³
2293 time_event.h タイムイベント管理関連の定義
2294 time_event.c タイムイベント管理
2295 syslog.h システムログ機能関連の定義
2296 syslog.c システムログ機能
2297 task_manage.c タスク管理機能
2298 task_sync.c タスク付属同期機能
2299 task_except.c タスク例外処理機能
2300 semaphore.h セマフォ機能関連の定義
2301 semaphore.c セマフォ機能
2302 eventflag.h イベントフラグ機能関連の定義
2303 eventflag.c イベントフラグ機能
2304 dataqueue.h データキュー機能関連の定義
2305 dataqueue.c データキュー機能
2306 mailbox.h メールボックス機能関連の定義
2307 mailbox.c メールボックス機能
2308 mempfix.h 固定長メモリプール関連の定義
2309 mempfix.c 固定長メモリプール
2310 time_manage.c システム時刻管理機能
2311 cyclic.h 周期ハンドラ機能関連の定義
2312 cyclic.c 周期ハンドラ機能
2313 sys_manage.c システム管理機能
2314 interrupt.h 割込み管理機能関連の定義
2315 interrupt.c 割込み管理機能
2316 exception.h CPU例外管理機能関連の定義
2317 exception.c CPU例外管理機能
2318
2319 systask/
2320 timer.c システムクロックドライバ
2321 timer.cfg システムクロックドライバの設定記述
2322 serial.c シリアルインタフェースドライバ
2323 serial.cfg シリアルインタフェースドライバの設定記述
2324 logtask.c システムログタスク
2325 logtask.cfg システムログタスクの設定記述
2326 linux_sigio.c Linux用 ノンブロッキングI/Oサポート
2327 linux_sigio.cfg Linux用 ノンブロッキングI/Oサポートの設定記述
2328 linux_serial.c Linux用 疑似シリアルドライバ
2329 linux_serial.cfg Linux用 疑似シリアルドライバの設定記述
2330 cxxrt.c C++対応ランタイム本体
2331 cxxrt.cfg C++対応ランタイム用オブジェクト設定
2332 newlibrt.c NEWLIB対応ランタイム
2333
2334 library/
2335 log_output.c システムログ機能用ライブラリ関数(syslog_outputなど)
2336 strerror.c itron_strerror関数
2337 t_perror.c t_perror関数
2338 vasyslog.c syslog関数
2339
2340 utils/
2341 makedep 依存関係定義の生成
2342 genoffset offset.h 生成プログラム
2343 gencheck パラメータチェック用ファイルの生成
2344 genrename 内
2345部シンボルリネーム定義の生成
2346 rename 内
2347部シンボルのリネーム処理
2348
2349 sample/
2350 Makefile サンプルの Makefile
2351 Makefile.linux サンプルの Makefile(Linux用)
2352 Makefile.mware サンプルの Makefile(ミドルウェアとの組み合わせ用)
2353 sample1.cfg サンプルプログラム(1)の設定記述
2354 sample1.h サンプルプログラム(1)に関する定義
2355 sample1.c サンプルプログラム(1)の本体
2356 cxx_sample1.cfg C++用サンプルプログラム(1)の設定記述
2357 cxx_sample1.h C++用サンプルプログラム(1)に関する定義
2358 cxx_sample1.c C++用サンプルプログラム(1)の本体
2359 cxx_sample2.cfg C++用サンプルプログラム(1)の設定記述
2360 cxx_sample2.h C++用サンプルプログラム(1)に関する定義
2361 cxx_sample2.c C++用サンプルプログラム(1)の本体
2362
2363 doc/
2364 user.txt TOPPERS/JSPカーネル ユーザズマニュアル
2365 gnu_install.txt GNU開発環境構築マニュアル
2366 m68k.txt M68040 ターゲット依存部マニュアル
2367 sh1.txt SH1 ターゲット依存部マニュアル
2368 sh2.txt SH2 ターゲット依存部マニュアル
2369 sh3.txt SH3 ターゲット依存部マニュアル
2370 h8.txt H8 ターゲット依存部マニュアル
2371 h8-renesas.txt H8-RENESAS ターゲット依存部マニュアル
2372 h8s.txt H8S ターゲット依存部マニュアル
2373 armv4.txt ARMV4 ターゲット依存部マニュアル
2374 microblaze.txt MicroBlaze ターゲット依存部マニュアル
2375 tsm320c54x.txt TMS320C54x ターゲット依存部マニュアル
2376 xstormy16.txt Xstormy16 ターゲット依存部マニュアル
2377 mips3.txt MIPS3 ターゲット依存部マニュアル
2378 m16c.txt M16C ターゲット依存部マニュアル
2379 m32c.txt M32C ターゲット依存部マニュアル
2380 m32r.txt M32R ターゲット依存部マニュアル
2381 nios2.txt Nios2 ターゲット依存部マニュアル
2382 powerpc32.txt POWERPC32 ターゲット依存部マニュアル
2383 s1c33.txt S1C33 ターゲット依存部マニュアル
2384 v850.txt V850 ターゲット依存部マニュアル
2385 linux.txt Linux シミュレーション環境依存部マニュアル
2386 windows.txt Windows シミュレーション環境依存部マニュアル
2387 config.txt JSPカーネル ターゲット依存部 ポーティングガイド
2388 configurator.txt JSPカーネル コンフィギュレータ仕様
2389 design.txt JSPカーネル 設計メモ
2390
23917.2 開発環境
2392
2393JSPカーネルを用いたシステム構築には,以下のツールが必
2394要である.
2395
2396 ホスト環境用のツール
2397 標準規格に準拠したCコンパイラ,Cライブラリ
2398 C++コンパイラ,C++ライブラリ,STL
2399 動作確認: GNU C++ 2.95.3,3.2,3.3(Linux環境)
2400 GNU C++ 3.2(Cygwin環境)
2401 Visual C++ 6.0,.NET (Windowsシミュレーション)
2402 perl(動作確認は 5.6.1)
2403 GNU Make(動作確認は 3.79.1)
2404
2405 クロス環境用のツール
2406 GNU開発環境
2407 BINUTILS(アセンブラ,リンカなど)
2408 GCC または GCC-CORE(Cコンパイラ)
2409 GDB(デバッガ)
2410 NEWLIB(標準Cライブラリ)
2411
2412GNU開発環境をインストール方法については,「GNU開発環境構築マニュアル」
2413を用意しているので,それを参ç…
2414§ã™ã‚‹ã¨ã‚ˆã„.また,動作確認バージョンにつ
2415いては,ターゲット毎のマニュアルを参ç…
2416§ã™ã‚‹ã“と.
2417
2418ホスト環境用のCコンパイラとCライブラリは,クロス環境用のツールのインス
2419トールに必
2420要になる.また,C++コンパイラ,C++ライブラリと STL(Standard
2421Template Library)は,カーネルのコンフィギュレーションツールのコンパイ
2422ルに必
2423要である.クロス環境用のツールとコンフィギュレーションツールをバ
2424イナリでå…
2425¥æ‰‹ã—た場合には,これらのツールは必
2426要ない.
2427
2428クロス環境用の標準Cライブラリは,アプリケーションが標準Cライブラリを使
2429用しない場合には,必
2430要ない.ただし,コンパイラが標準Cライブラリ関数
2431(memcpy,memsetなど)を呼び出すコードを生成する場合があり,その場合に
2432は標準Cライブラリが必
2433要である.ないしは,生成したコードが呼び出す関数
2434のみを自分で用意してもよい.
2435
2436以下では,これらのツールが用意できていることを前提に,UNIXマシン(動作
2437確認は Linux)上で構築手順を説明する.また以下の説明では,makeコマンド
2438が GNU Make であるものとする(JSPカーネルの Makefile は,GNU Make の拡
2439張機能を用いている).
2440
24417.3 コンフィギュレーションツールの構築
2442
2443カーネルを構築する前に,まず,コンフィギュレーションツールをコンパイル
2444する必
2445要がある(コンフィギュレーションツールをバイナリでå…
2446¥æ‰‹ã—た場合に
2447は,このステップは必
2448要ない).
2449
2450JSPカーネルのコンフィギュレーションツールは,コンフィギュレータ(cfgプ
2451ログラム)とパラメータチェックプログラム(chkプログラム)から構成され
2452る.コンフィギュレーションツールの使い方については,「7.9 コンフィギュ
2453レーションツールの使い方」を参ç…
2454§ã™ã‚‹ã“と.
2455
2456コンフィギュレーションツール(cfgプログラムとchkプログラム)は,cfgディ
2457レクトリに移動し,make dependで依存関係ファイル(Makefile.depend)を生
2458成した後,makeコマンドにより生成される.
2459
2460 % cd cfg
2461 % make depend
2462 % make
2463
2464また,Microsoft Visual C++ 6.0 (MSVC++6.0)でコンフィギュレーションツール
2465をビルドするためのファイル群がJSPカーネルのソースファイルには含まれている.
2466その際には,cfg/vc_project 内
2467の configurator.dsw を開き,ビルドする.
2468MSVC++6.0 と上位互換を持つ統合開発環境でもビルドできるはずであるが,
2469十分な確認が取れているわけではない.
2470
2471
24727.4 サンプルプログラムの構築
2473
2474次に,サンプルプログラムを構築する方法を説明する.
2475
2476まず,サンプルプログラムのオブジェクトファイルを置くディレクトリを作成
2477し,コンフィギュレーションスクリプトを実行する.例えば,オブジェクトファ
2478イルを置くディレクトリを,JSPカーネルのソースファイルを展開したディレ
2479クトリの下のOBJという名称のディレクトリにする場合には,次のコマンドを
2480実行する(ディレクトリの場所は名称は任意に決めてよい).
2481
2482 % mkdir OBJ
2483 % cd OBJ
2484 % perl ../configure -C m68k -S dve68k
2485
2486ここで,m68kはターゲットプロセッサ名,dve68kはターゲットシステム名であ
2487る.これらのコンフィギュレーションスクリプトのオプションについては,次
2488の節で説明する.
2489
2490コンフィギュレーションスクリプトの実行により,カレントディレクトリには,
2491サンプルプログラムを構築するためのMakefile,サンプルプログラム用のコン
2492フィギュレーションファイル(sample1.cfg),サンプルプログラム本体
2493(sample1.hおよびsample1.c)が生成される.
2494
2495コンフィギュレーションスクリプトの実行後,必
2496要であればMakefileを修正す
2497る.Makefileの修正方法については,「7.7 Makefileの修正」を参ç…
2498§ã™ã‚‹ã“と.
2499
2500その後,make dependで依存関係ファイル(Makefile.depend)を生成した後,
2501makeコマンドによりサンプルプログラムのロードモジュール(jspまたは
2502jsp.exe)が生成できる.依存関係ファイルの生成には若干時間がかかる.
2503
2504 % make depend
2505 % make
2506
2507ここで構築したサンプルプログラム(sample1.h,sample1.c,sample1.cfg)
2508は,JSPカーネルの基本的な動作を確認するためのものである.このプログラ
2509ムの概要説明は,sample1.cのå…
2510ˆé ­ã®ã‚³ãƒ¡ãƒ³ãƒˆã«ã‚る.
2511
25127.5 アプリケーションとカーネルを別々
2513に構築する方法
2514
2515前節で説明した方法では,アプリケーションとカーネルを同時に生成するため,
2516オブジェクトファイルを置くディレクトリに非常に多くのファイルが作成され
2517て,扱いにくくなる.そこで,カーネルを修正する頻度が低い場合には,カー
2518ネルは事前に構築しておき,後でアプリケーションだけを構築する方法を用意
2519している.以下では,サンプルプログラムを構築を例に,その手順について説
2520明する.
2521
2522まず,カーネルを構築するディレクトリを作成し,コンフィギュレーションス
2523クリプトを実行する.例えば,カーネルを構築するディレクトリを,JSPカー
2524ネルのソースファイルを展開したディレクトリの下のkernel_libという名称の
2525ディレクトリにする場合には,次のコマンドを実行する(ディレクトリの場所
2526は名称は任意に決めてよい).
2527
2528 % mkdir kernel_lib
2529 % cd kernel_lib
2530 % perl ../configure -C m68k -S dve68k
2531
2532これにより,カーネルを構築するディレクトリに,Makefile,sample1.cfg,
2533sample1.h,sample1.cが生成されるが,Makefile以外は使用しない.
2534
2535make dependで依存関係ファイル(Makefile.depend)を生成した後,make
2536libkernel.aによりカーネルライブラリ(libkernel.a)が生成できる.
2537
2538 % make depend
2539 % make libkernel.a
2540
2541次に,アプリケーションを構築するディレクトリを作成し,コンフィギュレー
2542ションスクリプトを実行する.例えば,アプリケーションを構築するディレク
2543トリを,JSPカーネルのソースファイルを展開したディレクトリの下のAPLとい
2544う名称のディレクトリにする場合には,次のコマンドを実行する(ディレクト
2545リの場所は名称は任意に決めてよい).
2546
2547 % cd ..
2548 % mkdir APL
2549 % cd APL
2550 % perl ../configure -C m68k -S dve68k -L ../kernel_lib
2551
2552ここで-Lオプションには,カーネルを構築したディレクトリのパスを指定する.
2553
2554最後に,make dependで依存関係ファイル(Makefile.depend)を生成した後,
2555makeコマンドによりサンプルプログラムのロードモジュール(jspまたは
2556jsp.exe)が生成できる.
2557
2558 % make depend
2559 % make
2560
2561この手順では,アプリケーション構築時にはカーネルの再構築が必
2562要かチェッ
2563クしないため,カーネルのソースコードを修正した場合には,カーネルを構築
2564したディレクトリでmake libkernel.aを再実行する必
2565要がある.また,アプリ
2566ケーション構築時にカーネルライブラリが更新されたかチェックしないため,
2567アプリケーションを構築したディレクトリで,ロードモジュールを削除した後
2568にmakeを再実行する必
2569要がある.
2570
2571以上では,カーネルとアプリケーションを別々
2572のディレクトリで構築したが,
2573-Lオプションにカレントディレクトリ(".")を指定することで,同じディレ
2574クトリで(別々
2575に)構築することもできる.å…
2576·ä½“的には,次の手順となる.
2577
2578 % mkdir OBJ
2579 % cd OBJ
2580 % perl ../configure -C m68k -S dve68k -L .
2581 % make depend
2582 % make libkernel.a
2583 % make cleankernel
2584 % make
2585
2586ここで,make cleankernelは,カーネルライブラリを生成するための中間ファ
2587イルを削除するものである.この手順では,make dependによりカーネルライ
2588ブラリに関する依存関係を生成しないため,カーネルのソースコードを修正し
2589た場合には,必
2590ずmake cleankernel(または,make clean)してから,make
2591libkernel.aする必
2592要があるので注意すること.さらに,ロードモジュールを
2593削除した後にmakeを再実行する必
2594要があるのは,前の場合と同様である.
2595
25967.6 コンフィギュレーションスクリプトの使い方
2597
2598コンフィギュレーションスクリプトは,JSPカーネルおよびアプリケーション
2599プログラムを構築するために必
2600要な基本的なコンフィギュレーションを行うた
2601めのプログラムである.JSPカーネルを用いてアプリケーションを作成する場
2602合には,まずオブジェクトファイルを置くディレクトリを作成し,そのディレ
2603クトリでコンフィギュレーションスクリプトを実行する.オブジェクトファイ
2604ルを置くディレクトリの場所や名称は,任意に決めてよい.
2605
2606コンフィギュレーションスクリプトに対するオプションは次の通り.
2607
2608 -C <プロセッサ名>
2609 ターゲットプロセッサ名またはシミュレーション環境名を,configディ
2610 レクトリの下のディレクトリ名称で指定する(必
2611須).
2612
2613 -S <システム名>
2614 ターゲットシステム名を,configの下のプロセッサのディレクトリの
2615 下のディレクトリ名称で指定する.シミュレーション環境の場合には,
2616 指定する必
2617要がない.
2618
2619 -T <開発環境名>
2620 開発環境名を,configの下のディレクトリ名称の後半の名称で指定す
2621 る.GNU開発環境を用いる場合には,指定する必
2622要がない.
2623
2624 -A <アプリケーションプログラム名>
2625 アプリケーションプログラムの名称を指定する.省略した場合には,
2626 標準のサンプルプログラム(sample1)となる.
2627
2628 -U <オブジェクトファイル名>
2629 アプリケーションプログラムのメインのオブジェクトファイル(-A
2630 で指定したアプリケーションプログラム名に".o"を付加したもの)以
2631 外に,リンクすべきオブジェクトファイルの名称を,".o"を付加した
2632 形で指定する.""で囲むことによって,複数のファイルを指定するこ
2633 とも可能である(-U オプションを複数使ってはならない).
2634
2635 -L <カーネルライブラリのディレクトリ名>
2636 事前に構築したカーネルを用いて,アプリケーションのみを構築する
2637 場合には,このオプションにカーネルライブラリ(libkernel.a)の
2638 置かれたディレクトリ名を指定する.このオプションの使用方法につ
2639 いては,「7.5 アプリケーションとカーネルを別々
2640に構築する方法」
2641 を参ç…
2642§ã™ã‚‹ã“と.
2643
2644 -D <JSPカーネルソースディレクトリ名>
2645 JSPカーネルのソースコードを置いたディレクトリ名を指定する.省
2646 略した場合には,configureの置かれているディレクトリとなる.
2647
2648コンフィギュレーションスクリプトが行う処理は次の通りである.
2649
2650(1) Makefileの生成
2651
2652sampleディレクトリから適切なMakefileを選択し,必
2653要な箇所を書き換えて,
2654Makefileを生成する.
2655
2656(2) サンプルプログラムの生成
2657
2658指定したアプリケーションプログラムがsampleディレクトリにある場合,適切
2659なサンプルプログラムのソースファイルを選択し,必
2660要な箇所を書き換えて,
2661サンプルプログラムのソースファイル(例えば,sample1.h,sample1.c,
2662sample1.cfg)を生成する.
2663
26647.7 Makefileの修正
2665
2666JSPカーネルの実行環境によっては,コンフィギュレーションスクリプトが生
2667成したMakefileを修正することが必
2668要になる.ここでは,Makefileの中で,修
2669正が必
2670要となる可能性の高い箇所について説明する.
2671
2672なお,Makefileを修正した後にコンフィギュレーションスクリプトを再実行す
2673ると,修正したMakefileが上書きされてしまうので注意すること(古いものが
2674Makefile.bakに保存される).
2675
2676(A) ターゲット名の定義
2677
2678CPUはターゲットプロセッサ名,SYSはターゲットシステム名,TOOLは開発環境
2679名に定義する.これらの定義は,コンフィギュレーションスクリプトが行う.
2680
2681(B) オブジェクトファイルの拡張子の設定
2682
2683Cygwin環境でコンパイルする時には,OBJEXTを"exe"に定義する必
2684要がある.
2685これは,Cygwin環境では,オブジェクトプログラムに拡張子"exe"が付加され
2686るのに対応するためのものである.Cygwin環境であることを判定できれば,コ
2687ンフィギュレーションスクリプトがこの定義を行う.
2688
2689(C) 実行環境の定義(ターゲット依存)
2690
2691ターゲットによっては,実行環境に対応してターゲット依存部のコードを差し
2692換える場合がある.これを可能にするために,実行環境の名称をDBGENVに定義
2693している.標準では,GDBスタブを用いることを想定して,これをGNU_STUBに
2694定義しているが,ターゲット依存の定義をå…
2695¥ã‚ŒãŸMakefile.configで上書きさ
2696れる場合もある.どのターゲットがどの実行環境に対応しているかは,ターゲッ
2697ト毎のマニュアルを参ç…
2698§ã™ã‚‹ã“と.
2699
2700(D) カーネルライブラリのディレクトリ名の定義
2701
2702KERNEL_LIBには,カーネルライブラリの置かれたディレクトリ名を定義する.
2703この定義は,通常はコンフィギュレーションスクリプトが行うが,事後に
2704KERNEL_LIBの定義を変更してもかまわない.
2705
2706(E) å…
2707±é€šã‚³ãƒ³ãƒ‘イルオプションの定義
2708
2709å…
2710¨ä½“にå…
2711±é€šã™ã‚‹ã‚³ãƒ³ãƒ‘イルオプションの追加が必
2712要な場合には,下の変数の定
2713義を変更する.そのコンパイルオプションが,特定のターゲットで常に必
2714要な
2715場合には,ターゲット依存の定義をå…
2716¥ã‚ŒãŸMakefile.configを修正すべきであ
2717る.追加の可能性のあるコンパイルオプションについては,「7.8 コンパイル
2718オプション」を参ç…
2719§ã®ã“と.
2720
2721 CDEFS -D オプションを記述する.
2722 INCLUDES -I オプションを記述する.
2723 COPTS コンパイラに対するその他のオプションを記述する.
2724 LDFLAGS リンカに対するオプションを記述する.
2725 LIBS ライブラリリンクのためのオプションを記述する.
2726
2727(F) アプリケーションプログラムに関する定義
2728
2729アプリケーションプログラムが一つのCソースファイル(*.c)のみで構成され
2730ている場合には,UNAMEにそのファイル名を定義すればよい.アプリケーショ
2731ンプログラムが複数のソースファイルで構成される場合には,UNAMEにそのア
2732プリケーション名を定義し,オブジェクトファイル名をUTASK_ASMOBJSおよび
2733UTASK_COBJSに列挙する.いずれの場合にも,コンフィギュレーションファイ
2734ルは,UNAMEに定義した名前に拡張子"cfg"を付加した名前とする.
2735
2736ソースファイルをコンパイルするのとは別のディレクトリに置く場合には,
2737UTASK_DIRSにそのディレクトリを追加する.また,アプリケーションのコンパ
2738イルに必
2739要なコンパイルオプションや,アプリケーションがライブラリを必
2740要
2741とする場合には,UTASK_CFLAGSおよびUTASK_LIBS に定義する.
2742
2743(G) オブジェクトファイル名の定義
2744
2745オブジェクトファイル名をOBJNAMEに定義する.デフォルトはjspである.
2746
2747(H) ターゲットファイルの定義
2748
2749ロードモジュールの形式を指定する.å…
2750·ä½“的には,ELF形式の時は$(OBJFILE)
2751または$(OBJNAME).out(PARTNER-J環境の時),バイナリ形式の時は
2752$(OBJNAME).bin,モトローラ S形式の時は$(OBJNAME).srecを指定する.
2753$(OBJFILE) は,Cygwin環境でOBJEXTを"exe"に定義した時には$(OBJNAME).exe,
2754そうでない場合には$(OBJNAME)となる.
2755
2756(I) カーネルのコンフィギュレーションファイルの生成
2757
2758ソフトウェア部品のコンフィギュレータを追加する場合には,この規則を修正
2759することが必
2760要である.
2761
27627.8 コンパイルオプション
2763
2764JSPカーネルのコード中には,assertマクロが使われている.assertマクロは,
2765NDEBUGを定義することで,オブジェクトコード中から消すことができる.カー
2766ネルのデバッグが終了すれば,CDEFSに-DNDEBUGを指定してコンパイルした方
2767が効率がよくなる.
2768
2769また,システムログ機能を取り外すためのOMIT_SYSLOGを用意している.詳し
2770くは,「4.8 システムログ機能の設定方法」を参ç…
2771§ã™ã‚‹ã“と.
2772
27737.9 コンフィギュレーションツールの使い方
2774
2775以下では,cfgプログラムとchkプログラムのオプションについて説明する.こ
2776れらのプログラムによるコンフィギュレーション手順については,「2.10 静
2777的APIとコンフィギュレータ」を参ç…
2778§ã™ã‚‹ã“と.
2779
2780cfgプログラムとchkプログラムにå…
2781±é€šã®ã‚ªãƒ—ションは次の通り.
2782
2783 -cpu <プロセッサ名>
2784 ターゲットプロセッサ名を指定する.
2785
2786 -system <システム名>
2787 ターゲットシステム名を指定する.
2788
2789 -h, --help
2790 ヘルプメッセージを表示する.
2791
2792 -v
2793 処理の途中結果を表示する.
2794
2795 -le, --english
2796 メッセージを英語で表示する(デフォルト).
2797
2798 -lj, --japanese
2799 メッセージを日本語で表示する.
2800
2801cfgプログラムに対するオプションは次の通り.
2802
2803 -s, --source <ファイル名>
2804 <ファイル名>で指定されたシステムコンフィギュレーションファイル
2805 (C言語のプリプロセッサで処理したもの)を読み込む.<ファイル名>
2806 を省略した場合は,システムコンフィギュレーションファイルを標準
2807 å…
2808¥åŠ›ã‹ã‚‰èª­ã¿è¾¼ã‚€ï¼ˆã‚ªãƒ—ション自身を省略してはならない).
2809
2810 -c, --check
2811 静的APIのパラメータチェックに用いるファイルをkernel_chk.cに生
2812 成する(デフォルトでは生成しない).
2813
2814 -obj, --dump-object <ファイル名>
2815 静的APIの解析内
2816容を含むオブジェクト定義ファイルを,<ファイル名>
2817 で指定されたファイルに生成する.<ファイル名>を省略した場合は,
2818 kernel_obj.datに生成する.
2819
2820 -z, --nonzero
2821 __EMTPY_LABELマクロの使用を抑止する.
2822
2823 -ao=xxx
2824 IDの割付順序を指定する.xxxに指定できる内
2825容は次の通り.
2826
2827 alphabetic 名称の昇順(Aに近いものほど小さな値)
2828 fcfs 定義順の昇順 (å…
2829ˆã«å®£è¨€ã—たものほど小さな値)
2830 alphabetic,reverse 名称の降順
2831 fcfs,reverse 定義順の降順
2832
2833 -id=<ファイル名>
2834 自動ID割付け結果ヘッダファイル(kernel_id.h)の名称を変更する.
2835
2836 -cfg=<ファイル名>
2837 カーネル構成ファイル(kernel_cfg.c)の名称を変更する.
2838
2839 -oproto
2840 ハンドラやタスク本体などの関数のプロトタイプ宣言をカーネル構成
2841 ファイル(kernel_cfg.c)に出力する.
2842
2843 -il
2844 カーネル関連のヘッダをインクルードする際に,"ファイル名" ではなく
2845 <ファイル名> を使用する.
2846
2847 -1.3
2848 TOPPERS/JSPカーネル Release 1.3互換の形式で生成する.
2849 (注意: -1.3で生成したファイルは1.4以降では使用できない)
2850
2851 -iapi
2852 カーネルコンフィギュレータが処理できない静的APIを無視する.
2853
2854 -t
2855 カーネルコンフィギュレータが処理できない静的APIを標準出力に出力
2856 する.
2857
2858 -ext
2859 標準外の拡張機能の使用を許可する.
2860
2861chkプログラムに対するオプションは次の通り.
2862
2863 -m, --module <モジュール記述>
2864 チェックするロードモジュールを指定する.標準のchkプログラムは,
2865 ロードモジュールのシンボルファイル(GNU BINUTILSのnmが出力する
2866 形式)とモトローラSレコードファイルを読み込んでパラメータチェッ
2867 クを行なう.この場合,<モジュール記述>には,シンボルファイルと
2868 Sレコードファイルの2つを","で区切って指定する.
2869
2870 -cs, --script <ファイル名>
2871 <ファイル名>で指定されたチェックファイルを用いてチェックする.
2872 チェックファイルとは,cfgプログラムが生成したkernel_chk.cを,
2873 コンパイラおよび utils/gencheck により加工したファイルのことで
2874 ある.このオプションを省略した場合,いくつかのチェックが行われ
2875 なくなる.オプションを指定した場合には,<ファイル名>は省略でき
2876 ない.
2877
2878 -obj, --load-object <ファイル名>
2879 静的APIの解析内
2880容を含むオブジェクト定義ファイルを,<ファイル名>
2881 で指定されたファイルから読み込む.<ファイル名>を省略した場合は,
2882 kernel_obj.datから読み込む.
2883
2884 -cl <エラーレベル>
2885 エラー検出レベルを変更する.レベルはLAZY(重大なエラーのみ検
2886 出),STANDARD(ITRON仕様の範囲のみで検出),TOPPERS(JSPカー
2887 ネルの制限違反まで検出),RESTRICTED(すべてのエラーを検出)の
2888 4種類のうちから選択する(デフォルトはRESTRICTED).
2889
28907.10 リンカスクリプトとメモリ領域
2891
2892JSPカーネルのリンク方法は,ターゲット依存のリンカスクリプト(*.ld)に
2893記述されている.サンプルプログラムの Makefile では,ターゲット依存の定
2894義をå…
2895¥ã‚ŒãŸ Makefile.config の中で LDSCRIPT を定義すると,定義した名前
2896のファイルをリンカスクリプトに用いる.
2897
2898JSPカーネル動作時には,以下のメモリ領域が必
2899要になる.
2900
2901(a) コード領域
2902
2903カーネルおよびアプリケーションのプログラムおよび定数データが置かれる領
2904域.ROM上に置くことも可能である.å…
2905ˆé ­ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’,カーネルをリンクする
2906際の -Ttext オプションで指定する.サンプルプログラムの Makefile では,
2907ターゲット依存の定義をå…
2908¥ã‚ŒãŸ Makefile.config の中で TEXT_START_ADDRESS
2909を定義すると,リンク時に -Ttext オプションが付加される.
2910
2911(b) データ領域
2912
2913カーネルおよびアプリケーションの使用するデータ領域.固定的なデータ領域
2914と,sbrk関数によって取られるヒープ領域からなる.カーネルはヒープ領域を
2915使用しない.å…
2916ˆé ­ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’,カーネルをリンクする際の -Tdata オプション
2917で指定する.サンプルプログラムの Makefile では,ターゲット依存の定義を
2918å…
2919¥ã‚ŒãŸ Makefile.config の中で DATA_START_ADDRESS を定義すると,リンク
2920時に -Tdata オプションが付加される.
2921
2922(c) 非タスクコンテキスト用のスタック領域
2923
2924割込みハンドラなどの非タスクコンテキストが使用するスタック領域.領域の
2925設定方法はターゲット依存であるが,通常は,ターゲットシステム依存のイン
2926クルードファイル(sys_config.h)でスタックの初期値を定義し,ターゲット
2927プロセッサ依存のスタートアップモジュール(start.S)中で初期化される.
2928
29297.11 他のターゲットへのポーティング
2930
2931JSPカーネルを他のターゲットへポーティングするために必
2932要な作業は,カー
2933ネル自身のポーティング,システムサービスのポーティング,開発環境の構築
2934と標準の開発環境との差異の吸収などからなる.詳しくは,「JSPカーネル タ
2935ーゲット依存部 ポーティングガイド」(config.txt)を参ç…
2936§ã™ã‚‹ã“と.
2937
29387.12 カーネルの内
2939部識別子のリネーム
2940
2941μITRON4.0仕様は,カーネルの内
2942部識別子を_kernel_または_KERNEL_で始める
2943ことを要求している.ところが,カーネルのソースコード中で直接このような
2944識別子を用いると,識別子の長さが長くなり,可読性を損なう.そこでJSPカー
2945ネルでは,xxxxxというカーネルの内
2946部識別子を_kernel_xxxxxにリネームする
2947仕組みをå…
2948¥ã‚Œã¦ã„る.
2949
2950ところが,この仕組みにより,デバッグ作業が非効率になるケースが考えられ
2951る.å…
2952·ä½“的には,ソースコード中の識別子がオブジェクトコード中の識別子と
2953一致しないために,ソースコード中の変数を指定してその値を読んだり,関数
2954を指定してそこにブレークポイントを置くといったことができない.
2955
2956この問題を解決するために,JSPカーネルでは,ソースコード中の必
2957要な識別
2958子をリネームするためのユーティリティ(utils/rename)を用意している.
2959renameユーティリティに,リネーム定義ファイル(xxx_rename.def)のプリ
2960フィックス(xxxの部分)と,リネームしたいファイルリストを与えると,リ
2961ネーム処理を行なう.例えば,kernelディレクトリのすべてのファイルに対し
2962て,カーネルの内
2963部識別名をリネームするには,次のコマンドを用いればよい.
2964
2965 % cd kernel
2966 % ../utils/rename jsp *
2967
2968
29698.その他
2970
29718.1 ウェブサイト
2972
2973TOPPERSプロジェクトおよびJSPカーネルのためのウェブサイトを,以下のURL
2974に用意している.
2975
2976 http://www.toppers.jp/
2977
2978é…
2979ä»˜ã‚­ãƒƒãƒˆã®æœ€æ–°ç‰ˆã¯ï¼Œã“のウェブサイトからダウンロードすることができる.
2980また,後述のメーリングリストのアーカイブなども,このウェブサイトで閲覧
2981することができる.
2982
29838.2 利用条件・著作権
2984
2985JSPカーネルの利用条件は,各ファイルのå…
2986ˆé ­ã«æ˜Žç¤ºã•ã‚Œã¦ã„る(このドキュ
2987メントのå…
2988ˆé ­ã«ã‚‚ついている).著作権は,各ファイルのå…
2989ˆé ­ã«è¡¨ç¤ºã•ã‚Œã¦ã„
2990る著作権者
2991が保有している.
2992
2993利用条件の (3) の (b) において,利用の形æ…
2994‹ã‚’TOPPERSプロジェクトに報告
2995する方法としては,JSPカーネルを利用した製品の名称と応用分野,製品化し
2996た会社名と業種等の情
2997報を,以下のURLのページから報告するものとする.
2998
2999 http://www.toppers.jp/report.html
3000
3001またその際に,JSPカーネルを使用してのコメントやご意見もいただけると幸
3002いである.
3003
30048.3 保証・サポート・適用性
3005
3006JSPカーネルは無保証で提供されているものである.開発者
3007は,その適用可能
3008性も含めて,いかなる保証も行わない.また,サポートの約束もしていない.
3009質問がある場合は,後述のメーリングリストを利用していただけると幸いであ
3010る.
3011
30128.4 メーリングリスト
3013
3014JSPカーネルのユーザに対する情
3015報提供およびユーザ相互間の情
3016報交換を容易
3017にするために,TOPPERSユーザズメーリングリストを用意している.このメー
3018リングリストには,誰でも自由にメールを送付することができる.また,送付
3019されたメールは,誰でも自由にウェブサイトで読むことができる.JSPカーネ
3020ルにバグや問題点を発見した場合には,このメーリングリストに報告して欲し
3021い.
3022
3023メーリングリストへのメールの送付å…
3024ˆã¯æ¬¡ã®é€šã‚Šï¼Ž
3025
3026 users@toppers.jp
3027
3028メーリングリストにバグや問題点などを報告する場合には,必
3029要に応じて,次
3030の情
3031報を知らせて欲しい.
3032
3033 ターゲットに関する情
3034å ±
3035 ・ターゲットプロセッサの種類
3036 ・ターゲットボードの種類
3037
3038 ホストに関する情
3039å ±
3040 ・OSのバージョン(サービスパックの適用状況も)
3041 ・コンパイラなどの開発環境のバージョン(Cygwinのバージョンも)
3042
3043このメーリングリストへの登録を希望する場合は,まず,
3044users-ctl@toppers.jp 宛てに,本文に
3045
3046 subscribe あなたの名前
3047 例: subscribe Hiroaki Takada
3048
3049と書いたメールを送付する(上記のコマンド中には半角英文字のみを使うこと).
3050折り返し,登録確認のためのメールが送られてくるので,その指示に従って登
3051録する.
3052
30538.5 TOPPERSプロジェクトへの参加
3054
3055TOPPERSプロジェクトでは,何からの形でプロジェクトに貢献されたい方,プ
3056ロジェクトで開発したソフトウェアをお使いの方,プロジェクトに興味をお持
3057ちの方の参加を求めている.TOPPERSプロジェクトへの参加方法については,
3058TOPPERSプロジェクトのウェブサイトを参ç…
3059§ã™ã‚‹ã“と.
3060
30618.6 ミドルウェア用の Makefile
3062
3063サンプルディレクトリにある Makefilew.mware はJSPカーネルにミドルウェア
3064を組み合わせてコンパイルするための Makefile である.この Makefile から
3065インクルードするミドルウェア用の Makefile では,以下の変数を定義するこ
3066と.
3067
3068(1) MTASK_CFG
3069ミドルウェアのコンフィギュレーションファイル(ソース)を追加する.
3070
3071(2) MTASK_KERNEL_CFG
3072ミドルウェアのコンフィギュレータから出力され,JSPカーネル のシステムコ
3073ンフィギュレーションファイルにインクルードされるファイルを追加する.
3074
3075(3) MTASK_DIR
3076ミドルウェアのディレクトリを追加する.
3077
3078(4) MTASK_LCSRCS
3079ミドルウェアをライブラリ化するソースファイルを追加する.
3080
3081(5) MTASK_ASMOBJS
3082ミドルウェアのアセンブリ言語のオブジェクトファイルを追加する.
3083
3084(6) MTASK_CXXOBJS
3085ミドルウェアの C++ 言語のオブジェクトファイルを追加する.
3086
3087(7) MTASK_COBJS
3088ミドルウェアの C 言語のオブジェクトファイルを追加する.
3089
3090(8) MTASK_CFLAGS
3091ミドルウェアをコンパイルするときのオプションを指定する.
3092
3093(9) MTASK_LIBS
3094ミドルウェアのライブラリを追加する.
3095
3096(10) MAKE_MTASK
3097ライブラリ化したミドルウェアを指定する.
3098
30999.リファレンス
3100
31019.1 サービスコール一覧
3102
3103(1) タスク管理機能
3104
3105 ER ercd = act_tsk(ID tskid);
3106 ER ercd = iact_tsk(ID tskid);
3107 ER_UINT actcnt = can_act(ID tskid);
3108 void ext_tsk();
3109 ER ercd = ter_tsk(ID tskid);
3110 ER ercd = chg_pri(ID tskid, PRI tskpri);
3111 ER ercd = get_pri(ID tskid, PRI *p_tskpri);
3112
3113(2) タスク付属同期機能
3114
3115 ER ercd = slp_tsk();
3116 ER ercd = tslp_tsk(TMO tmout);
3117 ER ercd = wup_tsk(ID tskid);
3118 ER ercd = iwup_tsk(ID tskid);
3119 ER_UINT wupcnt = can_wup(ID tskid);
3120 ER ercd = rel_wai(ID tskid);
3121 ER ercd = irel_wai(ID tskid);
3122 ER ercd = sus_tsk(ID tskid);
3123 ER ercd = rsm_tsk(ID tskid);
3124 ER ercd = frsm_tsk(ID tskid);
3125 ER ercd = dly_tsk(RELTIM dlytim);
3126
3127(3) タスク例外処理機能
3128
3129 ER ercd = ras_tex(ID tskid, TEXPTN rasptn);
3130 ER ercd = iras_tex(ID tskid, TEXPTN rasptn);
3131 ER ercd = dis_tex();
3132 ER ercd = ena_tex();
3133 BOOL state = sns_tex();
3134
3135(4) 同期・通信機能
3136
3137 ER ercd = sig_sem(ID semid);
3138 ER ercd = isig_sem(ID semid);
3139 ER ercd = wai_sem(ID semid);
3140 ER ercd = pol_sem(ID semid);
3141 ER ercd = twai_sem(ID semid, TMO tmout);
3142
3143 ER ercd = set_flg(ID flgid, FLGPTN setptn);
3144 ER ercd = iset_flg(ID flgid, FLGPTN setptn);
3145 ER ercd = clr_flg(ID flgid, FLGPTN clrptn);
3146 ER ercd = wai_flg(ID flgid, FLGPTN waiptn,
3147 MODE wfmode, FLGPTN *p_flgptn);
3148 ER ercd = pol_flg(ID flgid, FLGPTN waiptn,
3149 MODE wfmode, FLGPTN *p_flgptn);
3150 ER ercd = twai_flg(ID flgid, FLGPTN waiptn,
3151 MODE wfmode, FLGPTN *p_flgptn, TMO tmout);
3152
3153 ER ercd = snd_dtq(ID dtqid, VP_INT data);
3154 ER ercd = psnd_dtq(ID dtqid, VP_INT data);
3155 ER ercd = ipsnd_dtq(ID dtqid, VP_INT data);
3156 ER ercd = tsnd_dtq(ID dtqid, VP_INT data, TMO tmout);
3157 ER ercd = fsnd_dtq(ID dtqid, VP_INT data);
3158 ER ercd = ifsnd_dtq(ID dtqid, VP_INT data);
3159 ER ercd = rcv_dtq(ID dtqid, VP_INT *p_data);
3160 ER ercd = prcv_dtq(ID dtqid, VP_INT *p_data);
3161 ER ercd = trcv_dtq(ID dtqid, VP_INT *p_data, TMO tmout);
3162
3163 ER ercd = snd_mbx(ID mbxid, T_MSG *pk_msg);
3164 ER ercd = rcv_mbx(ID mbxid, T_MSG **ppk_msg);
3165 ER ercd = prcv_mbx(ID mbxid, T_MSG **ppk_msg);
3166 ER ercd = trcv_mbx(ID mbxid, T_MSG **ppk_msg, TMO tmout);
3167
3168(5) メモリプール管理機能
3169
3170 ER ercd = get_mpf(ID mpfid, VP *p_blk);
3171 ER ercd = pget_mpf(ID mpfid, VP *p_blk);
3172 ER ercd = tget_mpf(ID mpfid, VP *p_blk, TMO tmout);
3173 ER ercd = rel_mpf(ID mpfid, VP blk);
3174
3175(6) 時間管理機能
3176
3177 ER ercd = set_tim(const SYSTIM *p_systim);
3178 ER ercd = get_tim(SYSTIM *p_systim);
3179 ER ercd = isig_tim();
3180
3181 ER ercd = sta_cyc(ID cycid);
3182 ER ercd = stp_cyc(ID cycid);
3183
3184(7) システム状æ…
3185‹ç®¡ç†æ©Ÿèƒ½
3186
3187 ER ercd = rot_rdq(PRI tskpri);
3188 ER ercd = irot_rdq(PRI tskpri);
3189 ER ercd = get_tid(ID *p_tskid);
3190 ER ercd = iget_tid(ID *p_tskid);
3191 ER ercd = loc_cpu();
3192 ER ercd = iloc_cpu();
3193 ER ercd = unl_cpu();
3194 ER ercd = iunl_cpu();
3195 ER ercd = dis_dsp();
3196 ER ercd = ena_dsp();
3197 BOOL state = sns_ctx();
3198 BOOL state = sns_loc();
3199 BOOL state = sns_dsp();
3200 BOOL state = sns_dpn();
3201 BOOL state = vsns_ini();
3202
3203(8) 割込み管理機能
3204
3205 ER ercd = dis_int(INTNO intno);
3206 ER ercd = ena_int(INTNO intno);
3207 ER ercd = chg_ixx(IXXXX ixxxx);
3208 ER ercd = get_ixx(IXXXX *p_ixxxx);
3209 ※ xx,xxxx,XXXX はターゲット毎に定められる.
3210
3211(9) CPU例外発生時のシステム状æ…
3212‹å‚ç…
3213§
3214
3215 BOOL state = vxsns_ctx(VP p_excinf);
3216 BOOL state = vxsns_loc(VP p_excinf);
3217 BOOL state = vxsns_dsp(VP p_excinf);
3218 BOOL state = vxsns_dpn(VP p_excinf);
3219 BOOL state = vxsns_tex(VP p_excinf);
3220
3221(10) 性能評価用システム時刻参ç…
3222§æ©Ÿèƒ½
3223
3224 ER ercd = vxget_tim(SYSUTIM *p_sysutim);
3225
32269.2 静的API一覧
3227
3228 CRE_TSK(tskid, { ATR tskatr, VP_INT exinf, FP task,
3229 PRI itskpri, SIZE stksz, VP stk });
3230 DEF_TEX(ID tskid, { ATR texatr, FP texrtn });
3231 CRE_SEM(ID semid, { ATR sematr, UINT isemcnt, UINT maxsem });
3232 CRE_FLG(ID flgid, { ATR flgatr, FLGPTN iflgptn });
3233 CRE_DTQ(ID dtqid, { ATR dtqatr, UINT dtqcnt, VP dtq });
3234 CRE_MBX(ID mbxid, { ATR mbxatr, PRI maxmpri, VP mprihd });
3235 CRE_MPF (ID mpfid, { ATR mpfatr, UINT blkcnt, UINT blksz, VP mpf } ) ;
3236 CRE_CYC (ID cycid, { ATR cycatr, VP_INT exinf, FP cychdr,
3237 RELTIM cyctim, RELTIM cycphs } ) ;
3238 DEF_INH(INHNO inhno, { ATR inhatr, FP inthdr });
3239 DEF_EXC(EXCNO excno, { ATR excatr, FP exchdr });
3240 ATT_INI({ ATR iniatr, VP_INT exinf, FP inirtn });
3241 VATT_TER({ ATR teratr, VP_INT exinf, FP terrtn });
3242
32439.3 メインエラーコード一覧(JSPカーネルが返すもののみ)
3244
3245 E_PAR -17 パラメターエラー
3246 E_ID -18 不正ID番号
3247 E_CTX -25 コンテキストエラー
3248 E_ILUSE -28 サービスコール不正使用
3249 E_OBJ -41 オブジェクト状æ…
3250‹ã‚¨ãƒ©ãƒ¼
3251 E_QOVR -43 キューイングオーバーフロー
3252 E_RLWAI -49 待
3253ち状æ…
3254‹ã®å¼·åˆ¶è§£é™¤
3255 E_TMOUT -50 ポーリング失敗またはタイムアウト
3256
32579.4 バージョン履歴
3258
3259 2000年11月15日 Release 1.0 最初のリリース
3260 2000年11月24日 Release 1.0 (PL=1) 問題点の修正
3261 2001年2月24日 Release 1.1 V850の追加など
3262 2001年5月9日 Release 1.1 (PL=1) SH1の追加など
3263 2001年11月15日 Release 1.2 SH4,H8,ARM7TDMIの追加など
3264 2002年4月15日 Release 1.3 M32R,MicroBlaze,TMS320C54x,
3265 i386,H8Sの追加など
3266 2003年12月25日 Release 1.4 多数の改良
3267 2004年10月14日 Release 1.4 (PL=1) SH2,M16C,SC33,PowerPC32,
3268 Nios2の追加など
3269 2005年11月28日 Release 1.4 (PL=2) M32C-Renesas, H8-Renesas,
3270 H8S-Renesas, V850
3271 2007年6月1日 Release 1.4 (PL=3) 問題点の修正,東芝TLCS900の追加など
3272
3273以上
Note: See TracBrowser for help on using the repository browser.