source: rtos_arduino/trunk/asp_1.9.2/doc/user.txt@ 136

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

ライブラリとOS及びベーシックなサンプルの追加.

File size: 119.0 KB
Line 
1
2 TOPPERS/ASPカーネル
3 ユーザーズマニュアル
4
5 対応バージョン: Release 1.9.2
6 最終更新: 2015年2月8日
7
8このドキュメントは,TOPPERS/ASPカーネルを使用するために必
9要な事項
10を説明
11するものである.
12
13----------------------------------------------------------------------
14 TOPPERS/ASP Kernel
15 Toyohashi Open Platform for Embedded Real-Time Systems/
16 Advanced Standard Profile Kernel
17
18 Copyright (C) 2005-2015 by Embedded and Real-Time Systems Laboratory
19 Graduate School of Information Science, Nagoya Univ., JAPAN
20
21 上記著作権者
22は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ
23 ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
24 変・再é…
25å¸ƒï¼ˆä»¥ä¸‹ï¼Œåˆ©ç”¨ã¨å‘¼ã¶ï¼‰ã™ã‚‹ã“とを無償で許諾する.
26 (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
27 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
28 スコード中に含まれていること.
29 (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
30 用できる形で再é…
31å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é…
32å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
33 者
34マニュアルなど)に,上記の著作権表示,この利用条件および下記
35 の無保証規定を掲載すること.
36 (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
37 用できない形で再é…
38å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ
39 と.
40 (a) 再é…
41å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€…
42マニュアルなど)に,上記の著
43 作権表示,この利用条件および下記の無保証規定を掲載すること.
44 (b) 再é…
45å¸ƒã®å½¢æ…
46‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに
47 報告すること.
48 (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
49 害からも,上記著作権者
50およびTOPPERSプロジェクトをå…
51è²¬ã™ã‚‹ã“と.
52 また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
53 由に基づく請求からも,上記著作権者
54およびTOPPERSプロジェクトを
55 å…
56è²¬ã™ã‚‹ã“と.
57
58 本ソフトウェアは,無保証で提供されているものである.上記著作権者
59お
60 よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
61 に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
62 アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
63 の責任を負わない.
64
65 $Id: user.txt 2675 2015-02-08 10:11:33Z ertl-hiro $
66----------------------------------------------------------------------
67
68○目次
69
701.TOPPERS/ASPカーネルの概要
71 1.1 TOPPERS/ASPカーネルの位置付け
72 1.2 TOPPERS/ASPカーネルの仕様
73 1.3 マイグレーションガイド
74 1.4 機能拡張・チューニングガイド
75 1.5 既知の問題
76 1.6 Cygwin環境における注意事項
77
782.ターゲット依存部
79 2.1 ターゲット依存部の概要
80 2.2 簡易パッケージ
81 2.3 個別パッケージ
823.クイックスタートガイド
83 3.1 開発環境の準備
84 3.2 コンフィギュレータの構築
85 3.3 サンプルプログラムの構築と実行
86 3.4 カーネルを関数単位でライブラリ化する方法
87 3.5 アプリケーションとカーネルを別々
88に構築する方法
894.ディレクトリ構成・ファイル構成
90 4.1 é…
91å¸ƒãƒ‘ッケージのディレクトリ構成
92 4.2 ターゲット非依存部のファイル構成
935.コンフィギュレーションスクリプトの使い方
946.Makefileの修正方法
95 6.1 Makefileの変数定義
96 6.2 コンパイルオプション
977.コンフィギュレータの使い方
988.システムサービス
99 8.1 システムログ機能
100 8.1.1 システムログ機能の位置付け
101 8.1.2 ログバッファへの記録と低レベル出力
102 8.1.3 ログ情
103報の種別
104 8.1.4 ログ情
105報の重要度
106 8.1.5 ログ情
107報のデータ構造
108 8.1.6 システムログ機能のサービスコール
109 8.1.7 システムログ機能のためのライブラリ関数とマクロ
110 8.1.8 システムログ機能のその他のサービス
111 8.2 シリアルインタフェースドライバ
112 8.2.1 シリアルインタフェースドライバのサービスコール
113 8.2.2 シリアルインタフェースドライバのその他のサービス
114 8.3 システムログタスク
115 8.3.1 システムログタスクのサービスコール
116 8.3.2 システムログタスクのその他のサービス
117 8.4 カーネル起動メッセージの出力
1189.サポートライブラリ
119 9.1 基本的なライブラリ関数
120 9.2 キュー操作ライブラリ関数
121 9.3 システムログ出力用ライブラリ関数
122 9.4 実行時間分布集計モジュール
12310.テストプログラム
124 10.1 テストプログラム用ライブラリ
125 10.2 カーネルの整合性検査
126 10.3 機能テストプログラム
127 10.4 性能評価プログラム
12811.使用上の注意とヒント
129 11.1 タイマドライバの組込み
130 11.2 assertマクロの処理
131 11.3 システムログ機能の扱い
132 11.4 オブジェクトIDの管理
133 11.5 カーネルの内
134部シンボルのリネーム
135 11.6 トレースログ記録のサンプルコードの使用方法
136 11.7 システムの起動時の初期化処理
137 11.8 rodataセクションをRAMに置く場合
13812.参考情
139å ±
140 12.1 利用条件と利用報告
141 12.2 保証・適用性・サポート
142 12.3 バグレポート
143 12.4 ウェブサイト
144 12.5 TOPPERSユーザーズメーリングリスト
145 12.6 TOPPERSプロジェクトのメンバ向けのサービス
146 12.7 TOPPERSプロジェクトへの参加
14713.リファレンス
148 13.1 サービスコール一覧
149 13.2 静的API一覧
150 13.3 バージョン履歴
151
152
1531.TOPPERS/ASPカーネルの概要
154
1551.1 TOPPERS/ASPカーネルの位置付け
156
157TOPPERS/ASPカーネル(以下,ASPカーネル)は,TOPPERS新世代カーネルの基盤
158となるものとして,TOPPERSプロジェクトにおいて開発したリアルタイムカーネ
159ルである.μITRON4.0仕様のスタンダードプロファイル準拠のリアルタイムカー
160ネルであるTOPPERS/JSPカーネルを拡張・改良する形で開発した.
161
1621.2 TOPPERS/ASPカーネルの仕様
163
164ASPカーネルの仕様の概要については,「TOPPERS/ASPカーネルの仕様概要」を
165参ç…
166§ã™ã‚‹ã“と.また,ASPカーネルを含むTOPPERS新世代カーネルの仕様の詳細
167については,別途PDFファイルの形でé…
168å¸ƒã—ている「TOPPERS新世代カーネル統
169合仕様書(Release 1.5.0)」を参ç…
170§ã™ã‚‹ã“と.
171
1721.3 マイグレーションガイド
173
174従来のTOPPERSカーネルや他のμITRON4.0仕様準拠のカーネルから,TOPPERS新
175世代カーネルに移行するための方法(またはヒント)を説明した「TOPPERS新世
176代カーネルへのマイグレーションガイド」を,別途PDFファイルの形でé…
177å¸ƒã—て
178いる.必
179要に応じて参ç…
180§ã™ã‚‹ã“と.
181
1821.4 機能拡張・チューニングガイド
183
184TOPPERS/ASPカーネルを,機能拡張・チューニングするための方法(またはヒン
185ト)を説明した「機能拡張・チューニングガイド」を用意している.拡張パッ
186ケージの使用方法は,「機能拡張・チューニングガイド」に含まれている.必
187
188要に応じて参ç…
189§ã™ã‚‹ã“と.
190
1911.5 既知の問題
192
193割込みサービスルーチンのå…
194ˆé ­ç•ªåœ°ï¼ˆATT_ISRのisr),割込みハンドラのå…
195ˆé ­
196番地(DEF_INHのinthdr),CPU例外ハンドラのå…
197ˆé ­ç•ªåœ°ï¼ˆDEF_EXCのexchdr),
198初期化ルーチンのå…
199ˆé ­ç•ªåœ°ï¼ˆATT_INIのinirtn),終了処理ルーチンのå…
200ˆé ­ç•ªåœ°
201(ATT_TERのterrtn)がプログラムの開始番地として正しくない場合のエラーは,
202コンフィギュレータに検出されない場合がある(ターゲットに依存).
203
204kernel_cfg.c(およびcfg1_out.c)は,カーネル,システムサービス,アプリ
205ケーションのいずれのインクルードファイルもインクルードし,いずれのシン
206ボルも参ç…
207§ã™ã‚‹å¯èƒ½æ€§ãŒã‚る.そのため,カーネル,システムサービス,アプ
208リケーションでシンボル等が衝突している場合や,コンパイルオプションが食
209い違っている場合に,kernel_cfg.c(およびcfg1_out.c)が正しくコンパイル
210できなくなる場合が考えられる.カーネルのシンボルをリネームするなどの方
211法で軽減されてはいるが,問題がなくなっているわけではない.
212
213システムコンフィギュレーションファイルから,コンフィギュレータに対する
214INCLUDEディレクティブにより他のコンフィギュレーションファイルをインクルー
215ドしている場合に,その中に含まれるC言語プリプロセッサのインクルードディ
216レクティブ(#include)で,コンフィギュレーションファイルの置かれている
217ディレクトリが,ファイルを検索するパスにはいらないという問題がある.例
218えば,syssvc/syslog.cfgに「#include "syslog.h"」と記述できないのは,こ
219の問題があるためである.
220
221現時点では,アドレスが64ビットの環境には対応していない.64ビットアドレ
222ス環境をサポートするための最大の課題は,モトローラSレコードフォーマット
223が64ビットアドレスに対応していないことである.
224
2251.6 Cygwin環境における注意事項
226
227
228Cygwin環境においては,ディレクトリの指定を相対パスで行うことを推奨する.
229これは,Cygwin環境の絶対パスは,Windowsネイティブでビルドされたツールは
230解釈できないためである.
231
232
2332.ターゲット依存部
234
2352.1 ターゲット依存部の概要
236
237ASPカーネルのターゲット非依存部と,各種のターゲットシステムに対応するた
238めのターゲット依存部は,別々
239に開発されている.そのため,ASPカーネルが対
240応しているすべてのターゲット依存部を,バージョンを整合させてパッケージ
241化することは困難である.そこで,主に初級のユーザを対象にした簡易パッケー
242ジと,上級のユーザやカーネル開発者
243を対象にした個別パッケージを用意して
244いる.
245
246ASPカーネルを未サポートのターゲットシステムへポーティングするために必
247要
248な作業は,開発環境の構築と標準の開発環境との差異の吸収,カーネル自身の
249ポーティング,システムサービスのポーティングなどからなる.詳しくは,
250「ターゲット依存部 ポーティングガイド」を参ç…
251§ã™ã‚‹ã“と.
252
2532.2 簡易パッケージ
254
255簡易パッケージは,ASPカーネルが対応しているターゲットシステム毎に用意さ
256れ,そのターゲットシステム上でASPカーネルを動作させるために必
257要なファイ
258ル一式をパッケージ化したものである.簡易パッケージに含まれるファイルは,
259バージョンが整合していることが確認されている.
260
261簡易パッケージのバージョン番号は,パッケージ化した日付とすることを原則
262とするが,ターゲットシステム毎の事情
263によりこの原則に従わない場合がある.
264
265簡易パッケージは,基本的には,次に説明する個別パッケージを複数まとめた
266ものである.そのため,対象ターゲットシステムに必
267要のないファイルも含ま
268れている.また,簡易パッケージに含まれている個別パッケージのバージョン
269は,個別パッケージのMANIFESTファイルを参ç…
270§ã™ã‚‹ã“とで知ることができる.
271
2722.3 個別パッケージ
273
274個別パッケージは,ASPカーネルの開発単位毎に,その開発単位で開発を担
275当し
276ているファイル一式をパッケージ化したものである.ASPカーネルのターゲット
277非依存部も,一つの個別パッケージとしてé…
278å¸ƒã•ã‚Œã‚‹ï¼Žã‚る個別パッケージを
279使用するためには,一般には,他の個別パッケージが必
280要となる.ターゲット
281依存部の個別パッケージを使用するために必
282要となる個別パッケージとそのバー
283ジョンについては,ターゲット依存部のユーザーズマニュアルを参ç…
284§ã™ã‚‹ã“と.
285使用する個別パッケージのバージョンを整合させることは,ユーザの責任であ
286る.
287
288個別パッケージのバージョン番号は,X.Y.Zの形で表現される.ターゲット非依
289存部のバージョン番号を,ASPカーネルå…
290¨ä½“のリリース番号とする.ターゲット
291依存部のバージョン番号は,XとYが,それが依存するターゲット非依存部と一
292致している.それに対して,Zは一致しているとは限らない.例えば,ターゲッ
293ト非依存部のバージョン1.1.0に対応するターゲット依存部は,バージョン
2941.1.Zの形となる.ターゲット依存部のみがバージョンアップした場合には,Z
295が変更される.
296
297使用する個別パッケージは,次の例のように,ターゲット非依存部の個別パッ
298ケージを展開したのと同じディレクトリで展開する.
299
300 % tar xvfz asp-1.1.0.tar.gz
301 % tar xvfz asp_arch_arm_gcc_1.1.2.tar.gz
302
303ターゲット非依存部の個別パッケージには,以下のターゲット依存部が含まれ
304ているが,これらは他のターゲットシステムにポーティングする際の参考にす
305るために用意しているものであり,その動作については未検証である.
306
307 target/dve68k_gcc DVE-68K/40(GNU開発環境)用ターゲット依存部
308 arch/m68k_gcc M68040(GNU開発環境)用プロセッサ依存部
309 pdic/upd72001 μPD72001用 簡易SIOドライバ
310
311
3123.クイックスタートガイド
313
314ここでは,ターゲット依存部が用意されているターゲットシステム上で,ASPカー
315ネル上で動作するサンプルプログラムを構築・動作させるまでの手順を示す.
316
3173.1 開発環境の準備
318
319ASPカーネルを用いたシステム構築には,以下のツールが必
320要である.
321
322 ホストシステム用のツール
323 perl 動作確認:5.10.0
324 GNU Make 動作確認:3.81
325
326 TOPPERS新世代カーネル用コンフィギュレータ
327 cfg 動作確認:1.9.0
328 ※ 1.5以前のバージョンでは動作しない.
329
330 ターゲットシステム用のツール(クロス開発環境)
331 標準規格に準拠したCコンパイラ
332 アセンブラ,リンカ,ライブラリアン
333 シンボルファイル出力ツール,ヘキサファイル出力ツール
334 標準Cライブラリ(必
335須ではない)
336
337ターゲットシステム用のツールにGNU開発環境を用いる場合には,以下のツール
338が必
339要である.
340
341 ターゲットシステム用のGNU開発環境ツール
342 BINUTILS(as,ld,ar,nm,ranlib,objcopy,objdump)
343 GCCまたはGCC-CORE(gccおよびそこから呼び出されるツール)
344 NEWLIB(標準Cライブラリ,必
345須ではない)
346
347動作確認されているターゲットシステム用のツールについては,ターゲット依
348存部のユーザーズマニュアルを参ç…
349§ã™ã‚‹ã“と.
350
351ターゲットシステム用の標準Cライブラリは,アプリケーションが標準Cライブ
352ラリを使用しない場合には,必
353要ない.ただし,コンパイラが標準Cライブラリ
354関数(memcpy,memsetなど)を呼び出すコードを生成する場合があり,その場
355合には標準Cライブラリが必
356要である.標準Cライブラリを用意する代わりに,
357生成したコードが呼び出す関数のみを自分で用意してもよい.
358
359以下では,これらのツールが用意できていることを前提に,UNIXマシン上での
360構築手順を説明する.また以下の説明では,makeコマンドがGNU Makeであるも
361のとする(ASPカーネルのサンプルのMakefileは,GNU Makeの拡張機能を用いて
362いる).
363
3643.2 コンフィギュレータの構築
365
366カーネルを構築する前に,まず,TOPPERS新世代カーネル用コンフィギュレータ
367を構築する必
368要がある.簡易パッケージに含まれていた場合など,コンフィギュ
369レータを実行ファイル形式でå…
370¥æ‰‹ã—た場合には,このステップは必
371要ない.
372
373コンフィギュレータの構築には,以下のツールが必
374要である.
375
376 ホストシステム用のツール(セルフ開発環境)
377 C++コンパイラ,C++ライブラリ
378 動作確認(Mac OS X環境):GNU C++ 4.2.1
379 Boost 動作確認:1.52.0
380 GNU Make 動作確認:3.81
381
382最初に,パッケージにコンフィギュレータのソースファイルが含まれていない
383場合には,コンフィギュレータのパッケージを,ASPカーネルのソースファイル
384を展開したディレクトリの下に展開する.
385
386 % cd asp
387 % tar xvfz cfg-1.9.2.tar.gz
388
389または,コンフィギュレータのパッケージを他のディレクトリに展開し,ASPカー
390ネルのソースファイルを展開したディレクトリからシンボリックリンクをはっ
391てもよい.
392
393ソースファイルが展開できると,cfgディレクトリに移動し,コンフィギュレー
394ションスクリプト(configure)でMakefileの環境依存部(Makefile.config)
395を生成した後,makeコマンドによりコンフィギュレータ(cfgプログラム)が構
396築できる.
397
398 % cd cfg
399 % ./configure --without-xml
400 % make depend
401 % make
402
403ただし,Boostをインストールしたディレクトリおよび名称が標準で想定してい
404るものとは違う場合には,configureの--with-headersおよび--with-libraries
405オプションにより,ヘッダファイルおよびライブラリの置かれたディレクトリ
406を指定する必
407要がある.--without-xmlは,AUTOSAR XMLファイルの読み込み機
408能(ASPカーネル用には必
409要ない)を取り込まないことを指定するオプションで
410ある(AUTOSAR XMLファイルの読み込み機能を取り込むには,Xerces-C++ XML
411Parserが必
412要になる).
413
414また,ホストシステムによっては,最適化レベルを上げると正しくコンパイル
415できないことが知られている.そのような場合には,最適化レベルを下げるか,
416最適化を抑止するように,Makefileを修正する必
417要がある.
418
419なお,コンフィギュレータの使用方法については,「7.コンフィギュレータ
420の使い方」の章で説明する.
421
4223.3 サンプルプログラムの構築と実行
423
424次に,ASPカーネル上で動作するサンプルプログラムを構築する方法を説明する.
425
426まず,サンプルプログラムのオブジェクトファイルを置くディレクトリを作成
427し,コンフィギュレーションスクリプトを実行する.例えば,オブジェクトファ
428イルを置くディレクトリを,ASPカーネルのソースファイルを展開したディレ
429クトリの下のOBJという名称のディレクトリにする場合には,次のコマンドを
430実行する(ディレクトリの場所と名称は任意に決めてよい).
431
432 % cd asp
433 % mkdir OBJ
434 % cd OBJ
435 % perl ../configure -T <ターゲット略称>
436
437ここで,<ターゲット略称>は,targetディレクトリの下に置かれているターゲッ
438ト依存部ディレクトリの名称である.コンフィギュレーションスクリプトのオ
439プションについては,「5.コンフィギュレーションスクリプトの使い方」の
440章で説明する.
441
442コンフィギュレーションスクリプトの実行により,カレントディレクトリには,
443サンプルプログラムを構築するためのMakefile,サンプルプログラム用のコン
444フィギュレーションファイル(sample1.cfg),サンプルプログラム本体
445(sample1.hおよびsample1.c)が生成される.
446
447コンフィギュレーションスクリプトの実行後,必
448要であればMakefileを修正す
449る.Makefileの修正方法については,「6.Makefileの修正方法」の章で説明
450する.
451
452その後,make dependで依存関係ファイル(Makefile.depend)を生成した後,
453makeコマンドによりサンプルプログラムのロードモジュール(aspまたは
454asp.exe)が生成できる.依存関係ファイルの生成には若干時間がかかる.
455
456 % make depend
457 % make
458
459ここで構築したサンプルプログラム(sample1.h,sample1.c,sample1.cfg)
460は,ASPカーネルの基本的な動作を確認するためのものである.このプログラ
461ムの概要説明は,sample1.cのå…
462ˆé ­ã®ã‚³ãƒ¡ãƒ³ãƒˆã«ã‚る.
463
4643.4 カーネルを関数単位でライブラリ化する方法
465
466前節の手順では,カーネルをファイル単位でコンパイルし,ライブラリ化して
467いたが,カーネルのコードサイズを縮小するためには,使用しないサービスコー
468ルはリンクしない方が望ましい.そこでASPカーネルでは,カーネルを関数単位
469でコンパイルし,ライブラリ化する方法を用意している.
470
471この方法でサンプルプログラムを構築するには,コンフィギュレーションスク
472リプトに,それを指示するオプション(-f)を付加するだけでよい.
473
474 % mkdir OBJ_LIB
475 % cd OBJ_LIB
476 % perl ../configure -T <ターゲット略称> -f
477
478ここで,OBJ_LIBというディレクトリの場所と名称は,任意に決めてよい.これ
479以降の手順は,前節と同じである.
480
4813.5 アプリケーションとカーネルを別々
482に構築する方法
483
484前節で説明した方法では,アプリケーションとカーネルを同時に生成するため,
485オブジェクトファイルを置くディレクトリに非常に多くのファイルが作成され
486て,扱いにくくなる.そこで,カーネルを修正する頻度が低い場合には,カー
487ネルは事前に構築しておき,後でアプリケーションだけを構築する方法を用意
488している.以下では,サンプルプログラムを構築を例に,その手順について説
489明する.
490
491まず,カーネルを構築するディレクトリを作成し,コンフィギュレーションス
492クリプトを実行する.例えば,カーネルを構築するディレクトリを,ASPカー
493ネルのソースファイルを展開したディレクトリの下のKERNEL_LIBという名称の
494ディレクトリにする場合には,次のコマンドを実行する(ディレクトリの場所
495と名称は任意に決めてよい).
496
497 % mkdir KERNEL_LIB
498 % cd KERNEL_LIB
499 % perl ../configure -T <ターゲット略称> -f
500
501これにより,カーネルを構築するディレクトリに,Makefile,sample1.cfg,
502sample1.h,sample1.cが生成されるが,Makefile以外は実質的には使用しない.
503
504make dependで依存関係ファイル(Makefile.depend)を生成した後,make
505libkernel.aによりカーネルライブラリ(libkernel.a)が生成できる.
506
507 % make depend
508 % make libkernel.a
509
510次に,アプリケーションを構築するディレクトリを作成し,コンフィギュレー
511ションスクリプトを実行する.例えば,アプリケーションを構築するディレク
512トリを,ASPカーネルのソースファイルを展開したディレクトリの下のAPLとい
513う名称のディレクトリにする場合には,次のコマンドを実行する(ディレクト
514リの場所と名称は任意に決めてよい).
515
516 % cd ..
517 % mkdir APL
518 % cd APL
519 % perl ../configure -T <ターゲット略称> -L ../KERNEL_LIB
520
521ここで-Lオプションには,カーネルを構築したディレクトリのパスを指定する.
522
523最後に,make dependで依存関係ファイル(Makefile.depend)を生成した後,
524makeコマンドによりサンプルプログラムのロードモジュール(aspまたは
525asp.exe)が生成できる.
526
527 % make depend
528 % make
529
530この手順では,アプリケーション構築時にはカーネルの再構築が必
531要かチェッ
532クしないため,カーネルのソースコードを修正した場合には,カーネルを構築
533したディレクトリでmake libkernel.aを再実行する必
534要がある.
535
536以上では,カーネルとアプリケーションを別々
537のディレクトリで構築したが,
538-Lオプションにカレントディレクトリ(ただし,"."という記述では不可)を指
539定することで,カーネルとアプリケーションを同じディレクトリで別々
540に構築
541することもできる.å…
542·ä½“的には,次の手順となる.
543
544 % mkdir OBJ
545 % cd OBJ
546 % perl ../configure -T <ターゲット略称> -L ../OBJ
547 % make depend
548 % make libkernel.a
549 % make cleankernel
550 % make
551
552ここで,make cleankernelは,カーネルライブラリを生成するための中間ファ
553イルを削除するものである.この手順では,make dependによりカーネルライ
554ブラリに関する依存関係を生成しないため,カーネルのソースコードを修正し
555た場合には,必
556ずmake cleankernel(または,make clean)してから,make
557libkernel.aする必
558要があるので注意すること.
559
560なお,make realcleanすると,make dependとmakeにより生成したファイルをす
561べて削除する.それに対して,make cleanでは,make dependにより生成した依
562存関係ファイルは削除しない.
563
564
5654.ディレクトリ構成・ファイル構成
566
5674.1 é…
568å¸ƒãƒ‘ッケージのディレクトリ構成
569
570 include/ アプリケーション向けヘッダファイル
571 kernel/ カーネルのソースファイル
572 syssvc/ システムサービスのヘッダファイル,ソースファイル
573 library/ サポートライブラリのソースファイル
574 target/ ターゲット依存部
575 arch/ ターゲット依存部のå…
576±é€šéƒ¨åˆ†
577 gcc/ GCC開発環境依存部
578 logtrace/ トレースログ記録のサンプルコード
579 pdic/ PDIC(デバイスドライバのOS非依存部分)
580 utils/ ユーティリティプログラム
581 sample/ サンプルプログラムとMakefile
582 doc/ ドキュメント
583 test/ テストプログラム
584 extension/ 拡張パッケージ
585
5864.2 ターゲット非依存部のファイル構成
587
588ターゲット非依存部(テストプログラムと拡張パッケージは除く)の各ファイ
589ルの概要は次の通り.
590
591 README.txt TOPPERS/ASPカーネルの簡単な紹介
592 configure コンフィギュレーションスクリプト(GNU開発環境用)
593 MANIFEST 個別パッケージのファイルリスト
594
595 include/
596 kernel.h ASPカーネルを使用するための定義
597 sil.h システムインタフェースレイヤを使用するための定義
598 t_stddef.h TOPPERSå…
599±é€šãƒ˜ãƒƒãƒ€ãƒ•ã‚¡ã‚¤ãƒ«
600 itron.h ITRON仕様å…
601±é€šè¦å®šã®ãƒ‡ãƒ¼ã‚¿åž‹ãƒ»å®šæ•°ãƒ»ãƒžã‚¯ãƒ­
602 t_syslog.h システムログ出力を行うための定義
603 t_stdlib.h 基本的なライブラリ関数を使用するための定義
604 queue.h キュー操作ライブラリを使用するための定義
605 test_lib.h テストプログラム用ライブラリを使用するための定義
606 histogram.h 実行時間分布集計モジュールを使用するための定義
607 log_output.h システムログのフォーマット出力を使用するための定義
608
609 kernel/
610 Makefile.kernel カーネルのファイル構成の定義
611 kernel_impl.h カーネル実装
612用標準ヘッダファイル
613 kernel_int.h kernel_cfg.c用のヘッダファイル
614 kernel_rename.def カーネルの内
615部識別名のリネーム定義
616 kernel_rename.h カーネルの内
617部識別名のリネーム
618 kernel_unrename.h カーネルの内
619部識別名のリネーム解除
620 kernel_api.csv コンフィギュレータの静的APIテーブル
621 kernel_def.csv コンフィギュレータの値取得シンボルテーブル
622 kernel.tf コンフィギュレータのパス2のテンプレートファイル
623 kernel_check.tf コンフィギュレータのパス3のテンプレートファイル
624 genoffset.tf オフセットファイル生成用のテンプレートファイル
625 allfunc.h すべての関数をコンパイルするための定義
626 check.h エラーチェック用マクロ
627 startup.c カーネルの初期化と終了処理
628 task.h タスク操作ルーチン関連の定義
629 task.c タスク操作ルーチン
630 wait.h 待
631ち状æ…
632‹æ“ä½œãƒ«ãƒ¼ãƒãƒ³é–¢é€£ã®å®šç¾©
633 wait.c 待
634ち状æ…
635‹æ“ä½œãƒ«ãƒ¼ãƒãƒ³
636 time_event.h タイムイベント管理関連の定義
637 time_event.c タイムイベント管理
638 task_manage.c タスク管理機能
639 task_refer.c タスク状æ…
640‹å‚ç…
641§æ©Ÿèƒ½
642 task_sync.c タスク付属同期機能
643 task_except.c タスク例外処理機能
644 semaphore.h セマフォ機能関連の定義
645 semaphore.c セマフォ機能
646 eventflag.h イベントフラグ機能関連の定義
647 eventflag.c イベントフラグ機能
648 dataqueue.h データキュー機能関連の定義
649 dataqueue.c データキュー機能
650 pridataq.h 優å…
651ˆåº¦ãƒ‡ãƒ¼ã‚¿ã‚­ãƒ¥ãƒ¼æ©Ÿèƒ½é–¢é€£ã®å®šç¾©
652 pridataq.c 優å…
653ˆåº¦ãƒ‡ãƒ¼ã‚¿ã‚­ãƒ¥ãƒ¼æ©Ÿèƒ½
654 mailbox.h メールボックス機能関連の定義
655 mailbox.c メールボックス機能
656 mempfix.h 固定長メモリプール機能関連の定義
657 mempfix.c 固定長メモリプール機能
658 time_manage.c システム時刻管理機能
659 cyclic.h 周期ハンドラ機能関連の定義
660 cyclic.c 周期ハンドラ機能
661 alarm.h アラームハンドラ機能関連の定義
662 alarm.c アラームハンドラ機能
663 sys_manage.c システム状æ…
664‹ç®¡ç†æ©Ÿèƒ½
665 interrupt.h 割込み管理機能関連の定義
666 interrupt.c 割込み管理機能
667 exception.h CPU例外管理機能関連の定義
668 exception.c CPU例外管理機能
669
670 syssvc/
671 banner.h カーネル起動メッセージの出力のための定義
672 banner.c カーネル起動メッセージの出力
673 banner.cfg カーネル起動メッセージの出力のコンフィギュレー
674 ションファイル
675 logtask.h システムログタスクを使用するための定義
676 logtask.c システムログタスク
677 logtask.cfg システムログタスクのコンフィギュレーションファイル
678 serial.h シリアルインタフェースドライバを使用するための定義
679 serial.c シリアルインタフェースドライバ
680 serial.cfg シリアルドライバのコンフィギュレーションファイル
681 syslog.h システムログ機能を使用するための定義
682 syslog.c システムログ機能
683 syslog.cfg システムログ機能のコンフィギュレーションファイル
684
685 library/
686 histogram.c 実行時間分布集計モジュール
687 log_output.c システムログのフォーマット出力
688 strerror.c エラーメッセージ文字列を返す関数
689 t_perror.c エラーメッセージの出力
690 test_lib.c テストプログラム用ライブラリ
691 vasyslog.c 可変数引数のシステムログライブラリ
692
693 arch/gcc/
694 MANIFEST 個別パッケージのファイルリスト
695 tool_stddef.h t_stddef.hの開発環境依存部(GCC用)
696
697 arch/logtrace/
698 MANIFEST 個別パッケージのファイルリスト
699 trace_config.h トレースログに関する設定
700 trace_config.c トレースログ機能
701 trace_dump.c トレースログのダンプ
702
703 utils/
704 applyrename ファイルにリネームを適用
705 genoffset offset.hの生成(GNU開発環境用)
706 genrename リネームヘッダファイルの生成
707 gentest テストプログラムの生成
708 makedep 依存関係リストの生成(GNU開発環境用)
709 makerelease リリースパッケージの生成
710
711 sample/
712 Makefile サンプルのMakefile(GNU開発環境用)
713 sample1.h サンプルプログラム(1)に関する定義
714 sample1.c サンプルプログラム(1)
715 sample1.cfg サンプルプログラム(1)のコンフィギュレーションファイル
716
717 doc/
718 user.txt ユーザーズマニュアル
719 asp_spec.txt TOPPERS/ASPカーネルの仕様概要
720 extension.txt 機能拡張・チューニングガイド
721 porting.txt ターゲット依存部 ポーティングガイド
722 configurator.txt コンフィギュレータ仕様
723 design.txt 設計メモ
724 version.txt 変更履歴
725
726
7275.コンフィギュレーションスクリプトの使い方
728
729コンフィギュレーションスクリプト(configure)は,ASPカーネルおよびアプ
730リケーションプログラムを構築するために必
731要な基本的なコンフィギュレーショ
732ンを行うためのプログラムである.
733
734ASPカーネルを用いてアプリケーションを作成する場合には,まずオブジェクト
735ファイルを置くディレクトリを作成し,そのディレクトリでコンフィギュレー
736ションスクリプトを実行する.オブジェクトファイルを置くディレクトリの場
737所と名称は,任意に決めてよい.
738
739コンフィギュレーションスクリプトに対するオプションは次の通り.
740
741 -T <ターゲット略称>
742 ターゲットシステムの名称を,targetディレクトリの下に置かれてい
743 るターゲット依存部ディレクトリの名称で指定する(必
744須).
745
746 -A <アプリケーションプログラム名>
747 アプリケーションプログラムの名称を指定する.省略した場合には,
748 サンプルプログラム(sample1)となる.
749
750 -a <アプリケーションのディレクトリ名>
751 アプリケーションプログラムのソースファイル(システムコンフィギュ
752 レーションファイルを除く)を置いたディレクトリ名を指定する.省
753 略した場合には,オブジェクトファイルを置くディレクトリに置かれ
754 ていることを仮定する.システムコンフィギュレーションファイルは,
755 オブジェクトファイルを置くディレクトリに置くこと.
756
757 -U <オブジェクトファイル名>
758 アプリケーションプログラムのメインのオブジェクトファイル(-A
759 で指定したアプリケーションプログラム名に".o"を付加したもの)以
760 外に,リンクすべきオブジェクトファイルの名称を,".o"を付加した
761 形で指定する.""で囲むことによって,複数のファイルを指定するこ
762 とも可能である(-Uオプションを複数使ってはならない).
763
764 -L <カーネルライブラリのディレクトリ名>
765 事前に構築したカーネルライブラリ(libkernel.a)を用いて,アプリ
766 ケーションのみを構築する場合には,このオプションにカーネルライ
767 ブラリの置かれたディレクトリ名を指定する.このオプションの使用
768 例については,「3.5 アプリケーションとカーネルを別々
769に構築する
770 方法」の節を参ç…
771§ã™ã‚‹ã“と.
772
773 -f
774 カーネルを関数単位でコンパイルしライブラリ化する場合に,このオ
775 プションを指定する.このオプションの使用例については,「3.4 カー
776 ネルを関数単位でライブラリ化する方法」の節を参ç…
777§ã™ã‚‹ã“と.
778
779 -D <ASPカーネルのソースディレクトリ名>
780 ASPカーネルのソースファイルを置いたディレクトリ名を指定する.省
781 略した場合には,configureの置かれているディレクトリとなる.
782
783 -l <プログラミング言語>
784 アプリケーションプログラムのプログラミング言語を指定する.現時
785 点では,cとc++のみをサポートしている.
786
787 -t <テンプレートディレクトリ名>
788 Makefileやサンプルプログラムのテンプレートの置かれたディレクト
789 リ名を指定する.省略した場合には,ASPカーネルのソースファイルを
790 置いたディレクトリの下のsampleディレクトリとなる.
791
792 -m <テンプレートMakefile名>
793 Makefileのテンプレートとするファイル名を指定する.省略した場合
794 には,Makefileとなる.
795
796 -d <実行環境名>
797 ターゲットシステム上でのプログラムの実行環境(ないしは,デバッ
798 グ環境)の名称を指定する.このオプションを指定すると,実行環境
799 を指定するシンボル(TOPPERS_<デバッグ環境名>)がマクロ定義され
800 る.省略した場合には,実行環境を指定するシンボルはマクロ定義さ
801 れない.
802
803 -r
804 トレースログ記録のサンプルコードを有効にする場合に,このオプショ
805 ンを指定する.このオプションの使用例については,「11.6 トレース
806 ログ記録のサンプルコードの使用方法」の節を参ç…
807§ã™ã‚‹ã“と.
808
809 -p <perlのパス名>
810 perlのパス名を指定する.省略した場合には,/usr/local/binと
811 /usr/binを探索し,perlのパス名を決定する.
812
813 -g <コンフィギュレータのパス名>
814 コンフィギュレータ(cfg)のパス名を指定する.省略した場合には,
815 デフォルトのパス名(ASPカーネルのソースディレクトリの下の
816 cfg/cfg/cfg)となる.
817
818 -o <オプション文字列>
819 コンパイラに与えるオプション文字列で,シンボル定義以外のもの.
820 シンボル定義のオプションは,-Oオプションを使用する.オプション
821 文字列にスペースが含まれる場合には,"-O2 -Wall"のように,""で囲
822 んで記述する必
823要がある.
824
825 -O <オプション文字列>
826 コンパイラに与えるシンボル定義のためのオプション文字列.オプショ
827 ン文字列にスペースが含まれる場合には,"-DTEST -DPERF"のように,
828 ""で囲んで記述する必
829要がある.
830
831 -k <オプション文字列>
832 リンカに与えるオプション文字列.オプション文字列にスペースが含
833 まれる場合には,""で囲んで記述する必
834要がある.
835
836コンフィギュレーションスクリプトが行う処理は次の通りである.
837
838(1) Makefileの生成
839
840テンプレートディレクトリ(デフォルトでは,sample)から適切なMakefileを
841選択し,必
842要な箇所を書き換えて,Makefileを生成する.
843
844(2) サンプルプログラムの生成
845
846指定したアプリケーションプログラムがテンプレートディレクトリにある場合,
847適切なアプリケーションプログラムのソースファイルを選択し,必
848要な箇所を
849書き換えて,アプリケーションプログラムのソースファイル(例えば,
850sample1.h,sample1.c,sample1.cfg)を生成する.
851
852(3) コンフィギュレータが用意できているかのチェック
853
854コンフィギュレータ(cfg)の実行ファイルがあるかチェックし,ファイルがな
855い場合には,その旨を出力する.
856
857
8586.Makefileの修正方法
859
860前の章で説明したように,コンフィギュレーションスクリプトに与えるオプショ
861ン等からMakefileが生成されるが,コンフィギュレーションスクリプトで対応
862できない場合には,Makefileを直接修正する必
863要がある.ここでは,Makefile
864の中で,修正が必
865要となる可能性の高い箇所について説明する.
866
867なお,Makefileを修正した後にコンフィギュレーションスクリプトを再実行す
868ると,修正したMakefileが上書きされてしまうので注意すること(古いものが
869Makefile.bakに保存される).
870
8716.1 Makefileの変数定義
872
873(A) ターゲット略称
874
875TARGETには,ターゲットシステムの名称を,targetディレクトリの下に置かれ
876ているターゲット依存部ディレクトリの名称で指定する.この定義は,通常は,
877コンフィギュレーションスクリプトに対する-Tオプションにより行う.
878
879(B) オブジェクトファイルの拡張子
880
881Cygwin環境でコンパイルする時には,OBJEXTを"exe"に定義する必
882要がある.こ
883れは,Cygwin環境では,ロードモジュールのファイル名に拡張子".exe"が付加
884されるのに対応するためのものである.Cygwin環境であることを判定できれば,
885コンフィギュレーションスクリプトがこの定義を行う.
886
887(C) 実行環境(ターゲット依存)
888
889ターゲットによっては,実行環境に対応してターゲット依存部のコードを差し
890換える場合がある.これを可能にするために,実行環境の名称をDBGENVに定義
891している.この定義は,通常は,コンフィギュレーションスクリプトに対す
892る-Dオプションにより行う.どのターゲットがどの実行環境に対応しているか
893は,ターゲット依存部のユーザーズマニュアルを参ç…
894§ã™ã‚‹ã“と.
895
896(D) カーネルライブラリのディレクトリ名
897
898KERNEL_LIBには,カーネルライブラリの置かれたディレクトリ名を定義する.
899この定義は,通常は,コンフィギュレーションスクリプトに対する-Lオプショ
900ンにより行う.
901
902(E) カーネルを関数単位でコンパイルするかどうか
903
904KERNEL_FUNCOBJSは,カーネルを関数単位でコンパイルする場合にはtrueに定義
905し,ファイル単位でコンパイルする場合には未定義とする.この定義は,通常
906は,コンフィギュレーションスクリプトに対する-fオプションにより行う.
907
908(F) å…
909±é€šã‚³ãƒ³ãƒ‘イルオプション
910
911すべてのプログラムにå…
912±é€šã™ã‚‹ã‚³ãƒ³ãƒ‘イルオプションの追加が必
913要な場合には,
914下の変数の定義を変更する.そのコンパイルオプションが,特定のターゲット
915で常に必
916要な場合には,ターゲット依存の定義をå…
917¥ã‚ŒãŸMakefile.target等を修
918正すべきである.
919
920 CDEFS コンパイラに対する-Dオプションを記述する.
921 INCLUDES コンパイラに対する-Iオプションを記述する.
922 COPTS コンパイラに対するその他のオプションを記述する.
923 LDFLAGS リンカに対するオプションを記述する.
924 LIBS ライブラリリンクのためのオプションを記述する.
925
926追加の可能性のあるコンパイルオプションについては,「6.2 コンパイルオプ
927ション」の節を参ç…
928§ã®ã“と.
929
930(G) アプリケーションプログラム名
931
932APPLNAMEには,アプリケーションプログラム名を定義する.システムコンフィ
933ギュレーションファイル名は,APPLNAMEに定義した名前に拡張子".cfg"を付加
934した名前とする.また,アプリケーションのメインファイルは,APPLNAMEに定
935義した名前に拡張子".c"を付加した名前とする.この定義は,通常は,コンフィ
936ギュレーションスクリプトに対する-Aオプションにより行う.
937
938(H) アプリケーションのディレクトリ名
939
940アプリケーションのソースファイルを,オブジェクトファイルを置くのとは別
941のディレクトリに置く場合には,APPLDIRにそのディレクトリ名を定義する.こ
942の定義は,通常は,コンフィギュレーションスクリプトに対する-aオプション
943により行う.アプリケーションのソースファイルを置くディレクトリが複数あ
944る場合には,APPL_DIRの定義を変更することで対応する.
945
946(I) アプリケーションのプログラムファイル名
947
948アプリケーションが複数のソースファイルで構成される場合には,そのオブジェ
949クトファイル名を,APPL_ASMOBJS,APPL_COBJS,APPL_CXXOBJSに列挙する.
950
951(J) アプリケーションのコンパイルオプション
952
953アプリケーションのコンパイルに必
954要なコンパイルオプションや,アプリケー
955ションがライブラリを必
956要とする場合には,APPL_CFLAGSおよびAPPL_LIBSに定
957義する.
958
959(K) ロードモジュールのファイル名
960
961標準のロードモジュールのファイル名をOBJNAMEに定義する.デフォルトはasp
962である.
963
964(L) ターゲットファイルの定義
965
966ターゲット"all"の依存ファイルとして,ロードモジュールの形式を指定する.
967å…
968·ä½“的には,ELF形式の時は$(OBJFILE),バイナリ形式の時は$(OBJNAME).bin,
969モトローラ S形式の時は$(OBJNAME).srecを指定する.$(OBJFILE)は,Cygwin
970環境でOBJEXTを"exe"に定義した時には$(OBJNAME).exe,そうでない場合には
971$(OBJNAME)となる.
972
973(M) makedepのオプションの定義
974
975Cygwin環境でルートディレクトリが"cygdrive"でない場合には,makedepの-Rオ
976プションでルートディレクトリ名を与える必
977要がある.また,Makefileのター
978ゲット部(":"の左側)に複数のファイル名を記述すると(カーネルを関数単位
979でライブラリ化する場合に,このような記述が生成される)正しく動作しない
980場合には(Cygwin環境のGNU Makeでこのような制限があるという報告がある),
981makedepに-Sオプションを付与する必
982要がある.
983
984makedepのオプションは,次の例のように,MAKEDEP_OPTSに定義する.
985
986MAKEDEP_OPTS = -R cygdrive -S
987
9886.2 コンパイルオプション
989
990ASPカーネルのコード中には,assertマクロが使われている.assertマクロは,
991NDEBUGを定義することで,オブジェクトコード中から消すことができる.カー
992ネルのデバッグが終了すれば,-DNDEBUGを指定してコンパイルした方が効率が
993よくなる.
994
995ターゲット依存部において,コンパイルオプションに-Werror(警告をエラー扱
996いする)を指定している場合がある.そのようなターゲットにおいて,アプリ
997ケーションで警告が避けられない場合には,ターゲット依存部を修正してコン
998パイルオプションを削除する必
999要がある.
1000
1001また,TOPPERS_OMIT_SYSLOGを定義してコンパイルすることで,システムログ出
1002力を抑止することができる.
1003
1004
10057.コンフィギュレータの使い方
1006
1007コンフィギュレータ(cfg)は,TOPPERS新世代カーネル統合仕様書の2.12.5節
1008の記述の通り,3つのパスで構成される.
1009
1010コンフィギュレータは,システムコンフィギュレーションファイル名をパラメー
1011タに取り,以下のオプションを持つ(重要なもののみ).
1012
1013 --help
1014 オプションのリストと説明を表示する.
1015
1016 -vï¼»--versionï¼½
1017 コンフィギュレータのバージョンを表示する.
1018
1019 -k[--kernel]<カーネル名>
1020 カーネルの名称を指定する.デフォルトはasp.
1021
1022 -p[--pass]<パス番号>
1023 パス番号を指定する.1~3のいずれか.
1024
1025 -I[--include-path]<インクルードパス名>
1026 INCLUDEディレクティブにおいて,インクルードするコンフィギュレー
1027 ションファイルを探すパス名を指定する.
1028
1029 -T[--template-file]<テンプレートファイル名>
1030 テンプレートファイルの名称を指定する.パス2とパス3で有効.
1031
1032 --api-table <静的APIテーブルファイル名>
1033 静的APIテーブルのファイル名を指定する.
1034
1035 --cfg1-def-table <値取得シンボルテーブルファイル名>
1036 値取得シンボルテーブルのファイル名を指定する.
1037
1038 -r[--rom-image]<ロードモジュール名>
1039 ロードモジュールをSレコードフォーマットの形に変換したファイルの
1040 名称を指定する.パス3でのみ有効.
1041
1042 -s [--symbol-table] <シンボルファイル名>
1043 ロードモジュール中の各シンボルとアドレスの対応表を含むシンボル
1044 ファイルの名称を指定する.パス3でのみ有効.
1045
1046 --id-output-file <ID番号出力ファイル名>
1047 オブジェクトのID番号の割付け結果を,指定した名前のファイルに書
1048 き出す.パス2でのみ有効.
1049
1050 --id-input-file <ID番号å…
1051¥åŠ›ãƒ•ã‚¡ã‚¤ãƒ«å>
1052 オブジェクトのID番号の割付けを,指定した名前のファイルから取り
1053 込む.パス2でのみ有効.
1054
1055 --external-id
1056 オブジェクトのID番号を保持する変数の定義を生成する.パス2でのみ
1057 有効.
1058
1059 -M[--print-dependencies]<ターゲットシンボル>
1060 システムコンフィギュレーションファイルの依存関係を出力する.
1061 Makefile中の依存関係を生成する際に用いる.
1062
1063コンフィギュレータの詳細仕様については,別途PDFファイルの形でé…
1064å¸ƒã—てい
1065る「TOPPERS新世代カーネル用コンフィギュレータ仕様」を参ç…
1066§ã™ã‚‹ã“と.
1067
1068
10698.システムサービス
1070
10718.1 システムログ機能
1072
1073システムログ機能は,カーネル内
1074で発生した異常事象やカーネルのトレースロ
1075グ,システムサービスやアプリケーションで発生した異常事象やトレースログ
1076を,ログ情
1077報として記録するための機能である.また,記録したログ情
1078報を取
1079り出す機能も持つ.
1080
1081システムログ機能は,システムコンフィギュレーションファイルでsyslog.cfg
1082をインクルードすることで,システムに組み込むことができる.システムログ
1083出力を行うソースファイルでは,t_syslog.hをインクルードする.また,シス
1084テムログ機能のその他のサービスコールを呼び出すソースファイルでは,
1085syslog.hをインクルードする.
1086
10878.1.1 システムログ機能の位置付け
1088
1089システムログ機能は,カーネル内
1090からも呼び出すことができるため,カーネル
1091より下の階層のモジュールと位置付けることができる.この意味では,他のシ
1092ステムサービスとは位置付けが異なる.
1093
1094一方,ログ情
1095報をシステム外部に出力するためには,シリアルインタフェース
1096ドライバなど,カーネル上で動作するシステムサービスを用いる必
1097要がある.
1098そこで,ログ情
1099報をシステム外部に出力するためのサービス(これを,システ
1100ムログタスクと呼ぶ)は,システムログ機能とは分離して実装
1101することとし,
1102システムログ機能はログ情
1103報の記録・取出しのための機能に絞っている.
1104
1105以上のように,システムログ機能はカーネルより下の階層のモジュールである
1106が,システムログ機能の中でログ時刻を取り出すために,カーネルの機能を必
1107
1108要とする.実装
1109上は,カーネルの内
1110部変数を直接参ç…
1111§ã—ている.そのため,カー
1112ネルの実行開始前や終了後は,ログ時刻は正しく記録されない.
1113
11148.1.2 ログバッファへの記録と低レベル出力
1115
1116上述したように,ログ情
1117報をシステムの外部に出力するためには,カーネル上
1118で動作するシステムサービスを用いる必
1119要があるため,カーネルの動作を継続
1120できないような重大な異常事象が起こった場合には,ログ情
1121報を出力できなく
1122なる.また,これらのシステムサービス自身をデバッグする場合にも,ログ情
1123
1124報の出力ができない.
1125
1126そこで,カーネル上で動作するシステムサービスが使えない場合にでもログ情
1127
1128報を出力するために,低レベル出力機能を用意する.低レベル出力機能は,ター
1129ゲット依存に用意する低レベルの文字出力関数(target_fput_log)を用いてロ
1130グ情
1131報を出力する機能である.低レベルの文字出力関数は,ターゲット依存部
1132で用意することとしているが,最終製品に組み込まれる場合などでは,文字を
1133出力する方法がない状況も考えられる.そのような場合,低レベルの文字出力
1134関数に送られた文字は,メモリ上に残しておくか,捨ててしまうしかない.
1135
1136ログ情
1137報を,ログバッファへ記録するか低レベル出力機能を用いて出力するか
1138の設定は,システムログ機能のサービスコール(syslog_msk_log)によって行
1139うことができる.syslog_msk_logの使い方については後述する.デフォルトで
1140は(システムログタスクを動作させず,syslog_msk_logも呼び出さない場合),
1141すべてのログ情
1142報を低レベル出力機能を用いて出力し,ログバッファには記録
1143しない.
1144
1145低レベル出力機能を用いると,ログメッセージの作成処理(printf相当の処理)
1146と低レベルの文字出力処理をカーネル内
1147で行うために,カーネルの応答性が悪
1148くなることに注意しなければならない.特に,低レベルの文字出力処理はデバ
1149イスをポーリングする形で実装
1150するのが通常で,その場合には,カーネルの応
1151答性は実用的と言えない程に悪くなる.
1152
11538.1.3 ログ情
1154報の種別
1155
1156システムログ機能は,ログ情
1157報に以下の種別を設けている.
1158
1159 LOG_TYPE_COMMENT コメント
1160 LOG_TYPE_ASSERT アサーションの失敗
1161 LOG_TYPE_INH 割込みハンドラ
1162 LOG_TYPE_ISR 割込みサービスルーチン
1163 LOG_TYPE_CYC 周期ハンドラ
1164 LOG_TYPE_ALM アラームハンドラ
1165 LOG_TYPE_OVR オーバランハンドラ
1166 LOG_TYPE_EXC CPU例外ハンドラ
1167 LOG_TYPE_TEX タスク例外処理ルーチン
1168 LOG_TYPE_TSKSTAT タスク状æ…
1169‹å¤‰åŒ–
1170 LOG_TYPE_DSP ディスパッチャ
1171 LOG_TYPE_SVC サービスコール
1172
1173ログ情
1174報の種別の中で,LOG_TYPE_COMMENTとLOG_TYPE_ASSERT以外は,カーネル
1175のトレースログに用いるためのものであるが,使用するかどうかはターゲット
1176依存部に任されている.
1177
11788.1.4 ログ情
1179報の重要度
1180
1181システムログ機能は,ログ情
1182報を出力する際に指定する重要度に基づいて,実
1183際に出力するログ情
1184報を動的に設定することができる.これは,UNIXのシステ
1185ムログ機能をまねたもので,ログの重要度の種類や指定方法もUNIXのAPIを参考
1186にしている.また,低レベル出力機能を用いて出力するログ情
1187報も,重要度に
1188基づいて動的に設定することができる.
1189
1190å…
1191·ä½“的には,ログの重要度として次の8段階を用意している.
1192
1193 LOG_EMERG カーネルの動作を継続できないエラー
1194 LOG_ALERT
1195 LOG_CRIT
1196 LOG_ERROR 重要性の低いシステムエラー
1197 LOG_WARNING 警告メッセージ.システムは安å…
1198¨ã«ç¶™ç¶šå‹•ä½œã§ãã‚‹
1199 LOG_NOTICE
1200 LOG_INFO
1201 LOG_DEBUG デバッグのためのメッセージ
1202
1203どの重要度のログ情
1204報をログバッファに記録するかと,どの重要度のログ情
1205å ±
1206を低レベル出力機能を用いて出力するかは,システムログ機能のサービスコー
1207ル(syslog_msk_log)によって設定することができる.
1208
12098.1.5 ログ情
1210報のデータ構造
1211
1212ログ情
1213報を格納するためのデータ型として,SYSLOG構造体を用意している.
1214SYSLOG構造体には,ログ情
1215報の種別(logtypeフィールド),ログ時刻
1216(logtimフィールド),その他のログ情
1217報(loginfoフィールド)が含まれる.
1218
1219SYSLOG構造体に格納されたログ情
1220報を出力する場合には,ログ時刻は出力関数
1221(syslog_wri_log)によって書き込まれるため,出力関数を呼ぶ側で書き込む
1222必
1223要はない.
1224
12258.1.6 システムログ機能のサービスコール
1226
1227システムログ機能の提供するサービスコールは次の通りである.これらのサー
1228ビスコールを呼び出すソースファイルでは,syslog.hをインクルードする必
1229要
1230がある.
1231
1232(1) ER syslog_wri_log(uint_t prio, const SYSLOG *p_syslog)
1233
1234システムログ機能に,p_syslogで指定されるログ情
1235報を,prioで指定される重
1236要度で出力する(ログバッファへ記録するか低レベル出力機能を用いて出力す
1237る).
1238
1239プロトタイプ宣言において,*p_syslogにconst指定がされているが,実際には,
1240この関数の中で,*p_syslogのlogtimフィールドにシステム時刻を書き込んでい
1241る.
1242
1243(2) ER_UINT syslog_rea_log(SYSLOG *p_syslog)
1244
1245ログバッファからログ情
1246報を1つ取り出す.ログバッファが空の時はE_OBJ,そ
1247うでない場合は,ログバッファのオーバフローにより失われたログ情
1248報の数
1249(ログ情
1250報が失われていない場合は0)を返す.システムログタスクが用いるこ
1251とを想定している.
1252
1253(3) ER syslog_msk_log(uint_t logmask, uint_t lowmask)
1254
1255ログバッファに記録すべきログ情
1256報の重要度の示すビットマップ(logmask)と,
1257低レベル出力機能を用いて出力すべきログ情
1258報の重要度を示すビットマップ
1259(lowmask)を設定する.ビットマップを作るためのマクロとして,LOG_MASKと
1260LOG_UPTOを用意している.
1261
1262(4) ER syslog_ref_log(T_SYSLOG_RLOG *pk_rlog)
1263
1264システムログ機能の状æ…
1265‹ã‚’参ç…
1266§ã™ã‚‹ï¼Žå…
1267·ä½“的には,ログバッファに記録されて
1268いるログ情
1269報の数(T_SYSLOG_RLOG構造体のcountフィールド),ログバッファ
1270のオーバフローにより失われたログ情
1271報の数(lostフィールド),ログバッファ
1272に記録すべきログ情
1273報の重要度の示すビットマップ(logmaskフィールド),低
1274レベル出力機能を用いて出力すべきログ情
1275報の重要度を示すビットマップ
1276(lowmaskフィールド)を参ç…
1277§ã™ã‚‹ã“とができる.
1278
12798.1.7 システムログ機能のためのライブラリ関数とマクロ
1280
1281システムログ出力のためのライブラリ関数とマクロは次の通りである.これら
1282だけを呼び出すソースファイルでは,t_syslog.hをインクルードすればよい.
1283
1284(1) void _syslog_n(uint_t prio, uint_t type, intptr_t arg1, ..., intptr_t argn)
1285 ※ nは0~6のいずれか.
1286
1287ログ種別がtype,パラメータがarg1~argnのログ情
1288報を,重要度prioで出力す
1289るための関数.
1290
1291(2) void syslog_n(uint_t prio, const char *format, arg1, ..., argn)
1292 ※ nは0~5のいずれか.
1293
1294format文字列およびそれに続く引数から作成されるメッセージを,ログ種別が
1295LOG_TYPE_COMMENTのログ情
1296報として,重要度prioで出力するためのマクロ.
1297
1298formatはメッセージのフォーマット記述,arg1~argnはフォーマット記述中で
1299参ç…
1300§ã•ã‚Œã‚‹å€¤ã§ï¼Œprintfのフォーマット記述のサブセットとなっている.arg1~
1301argnは,このマクロ中でintptr_t型にキャストされるため,intptr_t型に型変
1302換できる任意の型を渡すことができ,型チェックはされない.formatおよび
1303arg1~argnには,次の制限がある.
1304
1305・formatのフォーマット記述は,定数文字列を渡すことを想定しており,この
1306マクロ処理を終えた後も変化してはならない.
1307
1308・format中に使えるフォーマット指定は次の通り.
1309
1310 %d 引数をint_t型とみなし,10進数で表示
1311 %u 引数をuint_t型とみなし,10進数で表示
1312 %x 引数をuint_t型とみなし,16進数(英文字は小文字)で表示
1313 %X 引数をuint_t型とみなし,16進数(英文字は大文字)で表示
1314 %p 引数をポインタとみなし,16進数(英文字は小文字)で表示
1315 %c 引数を文字コードとみなし,文字を表示
1316 %s 引数を文字列を示すポインタとみなし,文字列を表示
1317 %% '%'を表示(引数は取らない)
1318
1319%d, %u, %x, %Xにおいては,'%'の直後に表示桁数を指定する10進数値を記述す
1320ることができる.その場合,表示すべき文字列が指定した桁数に満たない場合
1321には,指定した桁数内
1322に右詰めで表示する.10進数値が'0'で始まる場合には,
1323その間に'0'を埋める.
1324
1325また,intptr_t型のサイズがlong型のサイズ以上である環境においては,次の
1326フォーマット指定も使用することができる.この他のフォーマット指定に'l'
1327を付加した場合には無視する(%lcと%lsには対応していない).
1328
1329 %ld 引数をlong_t型とみなし,10進数で表示
1330 %lu 引数をulong_t型とみなし,10進数で表示
1331 %lx 引数をulong_t型とみなし,16進数(英文字は小文字)で表示
1332 %lX 引数をulong_t型とみなし,16進数(英文字は大文字)で表示
1333
1334・arg1~argnにポインタを渡す場合(%sに対応する引数の場合)に,ポインタ
1335の指すデータは,このマクロ処理を終えた後も変化してはならない.定数文字
1336列を渡すことを想定している.
1337
1338(3) void syslog(uint_t prio, const char *format, ...)
1339
1340format文字列およびそれに続く引数から作成されるメッセージを,ログ種別が
1341LOG_TYPE_COMMENTのログ情
1342報として,重要度prioで出力するための関数で,引
1343数の数を可変にしたもの.formatに続く引数は最大5個まで.formatおよびそれ
1344に続く引数には,syslog_nと同様の制限がある.
1345
1346このライブラリ関数は,可変数引数を処理するために内
1347部で文字列をスキャン
1348する.そのため,実行時間が長くなる可能性があり,割込み禁止状æ…
1349‹ã§å‘¼ã³å‡º
1350すべきではない.主にアプリケーションプログラムが用いることを想定してい
1351る.
1352
1353(4) UINT LOG_MASK(UINT prio)
1354
1355重要度prioのみセットされたビットマップを作るマクロ.syslog_msk_logに渡
1356す引数を作るために用いる.
1357
1358(5) UINT LOG_UPTO(UINT prio)
1359
1360重要度prio以上の重要度がすべてセットされたビットマップを作るマクロ.
1361syslog_msk_logに渡す引数を作るために用いる.
1362
13638.1.8 システムログ機能のその他のサービス
1364
1365システムログ機能は,前記のサービスコール等に加えて,初期化処理のための
1366関数を持つ.
1367
1368(1) void syslog_initialize(intptr_t exinf)
1369
1370システムログ機能を初期化する.ログバッファにログ情
1371報が記録されている場
1372合には,消去される.syslog.cfgによって,カーネルに初期化ルーチンとして
1373登録される.exinfは無視される.
1374
13758.2 シリアルインタフェースドライバ
1376
1377シリアルインタフェースドライバは,シリアルポートを扱うためのドライバで
1378ある.
1379
1380シリアルインタフェースドライバは,システムコンフィギュレーションファイ
1381ルでserial.cfgをインクルードすることで,システムに組み込むことができる.
1382シリアルインタフェースドライバを呼び出すソースファイルでは,serial.hを
1383インクルードする.
1384
1385シリアルインタフェースドライバは,ポート毎にセマフォを2個ずつ使用する.
1386セマフォを生成する静的APIは,serial.cfgに含まれている.
1387
13888.2.1 シリアルインタフェースドライバのサービスコール
1389
1390シリアルインタフェースドライバを呼び出すサービスコールの仕様は次の通り
1391である.この中で,シリアルポートのID番号(portid)の解釈はターゲット依
1392存となる.
1393
1394これらのサービスコールは,非タスクコンテキストから呼び出すことはできな
1395い.また,serial_rea_datとserial_wri_datは,ディスパッチ保留状æ…
1396‹ã§å‘¼ã³
1397出すことはできない.いずれも,呼び出した場合にはE_CTXエラーとなる.
1398
1399(1) ER serial_opn_por(ID portid)
1400
1401portidで指定されたシリアルポートをオープンし,受信/送信が可能な状æ…
1402‹ã«
1403する.
1404
1405(2) ER serial_cls_por(ID portid)
1406
1407portidで指定されたシリアルポートをクローズする.
1408
1409(3) ER_UINT serial_rea_dat(ID portid, char *buf, uint_t len)
1410
1411portidで指定されたシリアルポートから,lenバイトの文字列を受信し,bufか
1412らの領域にå…
1413¥ã‚Œã‚‹ï¼Žlenバイト受信するまで,待
1414ち状æ…
1415‹ã¨ãªã‚‹ï¼Žå—信した文字数
1416またはエラーコードを返す.
1417
1418(4) ER_UINT serial_wri_dat(ID portid, const char *buf, uint_t len)
1419
1420portidで指定されたシリアルポートに,bufからのlenバイトの文字列を送信す
1421る.lenバイト送信バッファにå…
1422¥ã‚Œã‚‹ã¾ã§ï¼Œå¾…
1423ち状æ…
1424‹ã¨ãªã‚‹ï¼Žé€ä¿¡ã—た文字数ま
1425たはエラーコードを返す.
1426
1427(5) ER serial_ctl_por(ID portid, uint_t ioctl)
1428
1429portidで指定されたシリアルポートの制御情
1430報を,ioctlで示される値に設定す
1431る.
1432
1433ioctlには,以下の制御情
1434報を表す定数を,ビット毎に論理和をとったものを
1435指定する.
1436
1437 IOCTL_ECHO(エコーバックモード)
1438 このビットを設定すると,シリアルインタフェースドライバがエコー
1439 バックを行う.å…
1440·ä½“的には,バッファから文字を取り出す度に,その
1441 文字を書き出す.
1442
1443 IOCTL_CRLF(改行モード)
1444 LF(line feed)を書き出すと,CR(carriage return)+LFに変換し
1445 て書き出す.
1446
1447 IOCTL_FCSND(送信フロー制御)
1448 文字を送信する処理に対して,XON/XOFFによるフロー制御を行う.
1449 すなわち,STOP(コントロール-S)を受信すると送信を停止し,
1450 START(コントロール-Q)を受信すると送信を再開する.
1451
1452 IOCTL_FCANY(送信フロー制御で任意の文字で送信再開)
1453 IOCTL_FCSNDを指定している時に,送信停止中に受信した任意の文字
1454 で送信を再開する.
1455
1456 IOCTL_FCRCV(受信フロー制御)
1457 文字を受信する処理に対して,XON/XOFFによるフロー制御を行う.
1458 すなわち,受信バッファの残り領域が少なくなるとSTOP(コントロー
1459 ル-S)を送出し,残り領域が増えればSTART(コントロール-Q)を送
1460 出する.
1461
1462なお,オープン直後のデフォルトの設定値は(IOCTL_ECHO | IOCTL_CRLF |
1463IOCTL_FCSND | IOCTL_FCRCV)である.
1464
1465(6) ER serial_ref_por(ID portid, T_SERIAL_RPOR *pk_rpor)
1466
1467portidで指定されたシリアルポートの状æ…
1468‹ã‚’参ç…
1469§ã—,pk_rporで指定されるパケッ
1470トに返す.パケット中のreacntには受信バッファ中の文字数を,wricntには送
1471信バッファ中の文字数を返す.
1472
14738.2.2 シリアルインタフェースドライバのその他のサービス
1474
1475シリアルインタフェースドライバは,前記のサービスコールに加えて,初期化
1476処理と未送信文字の取出し処理を持つ.初期化処理は,カーネルに初期化ルー
1477チンとして登録する.また,ターゲット依存で,初期化処理,終了処理,割込
1478みサービスルーチンを持つ.これらの登録処理はserial.cfgに含まれる.
1479
1480(1) void serial_initialize(intptr_t exinf)
1481
1482シリアルインタフェースドライバを初期化する.カーネルに初期化ルーチンと
1483して登録する.exinfは無視する.
1484
1485(2) bool_t serial_get_chr(ID portid, char *p_c)
1486
1487portidで指定されたシリアルポートの送信バッファ中の文字を,p_cの指す番地
1488に取り出し,trueを返す関数.文字がなかった時には,falseを返す.終了処理
1489ルーチン中で呼び出すことを想定している.
1490
14918.3 システムログタスク
1492
1493システムログタスクは,システムログ機能からログ情
1494報を取り出し,それをシ
1495ステムの外部に出力するためのサービスである.
1496
1497ASPカーネルのリリースパッケージに含まれるシステムログタスクは,シリアル
1498ポートにログ情
1499報を文字列の形で出力するもので,システムログタスクの一例
1500という位置付けで提供している.
1501
1502このシステムログタスクは,システムコンフィギュレーションファイルで
1503logtask.cfgをインクルードすることで,システムに組み込むことができる.シ
1504ステムログタスクのサービスを呼び出すソースファイルでは,logtask.hをイン
1505クルードする.
1506
1507システムログタスクが実行開始されると,重要度がLOG_EMERGのログ情
1508報を低レ
1509ベル出力機能を用いて出力し,重要度がLOG_NOTICEかそれより高いログ情
1510報を
1511ログバッファに記録するように,システムログ機能の設定が変更される.
1512
15138.3.1 システムログタスクのサービスコール
1514
1515システムログタスクのサービスを呼び出すサービスコールの仕様は次の通りで
1516ある.
1517
1518(1) ER logtask_flush(uint_t count)
1519
1520システムログ機能のログバッファ中のログ情
1521報の数がcount以下になるまで待
1522つ.
1523countが0の場合には,シリアルインタフェースドライバの送信バッファが空に
1524なるのも待
1525つ.
1526
15278.3.2 システムログタスクのその他のサービス
1528
1529システムログタスクは,前記のサービスコールに加えて,メイン処理と終了処
1530理を持つ.メイン処理はタスクとして,終了処理は終了処理ルーチンとして登
1531録する.これらの登録処理はlogtask.cfgに含まれる.
1532
1533(1) void logtask_main(intptr_t exinf)
1534
1535システムログタスクのメイン処理.exinfには,ログ情
1536報を出力するシリアルポー
1537トのID番号を渡す.
1538
1539(2) void logtask_terminate(intptr_t exinf)
1540
1541システムログタスクの終了処理.シリアルインタフェースドライバの送信バッ
1542ファに蓄積されたデータと,ログバッファに記録されたログ情
1543報を,低レベル
1544出力機能を用いて出力する.出力すべきログ情
1545報がある場合には,それを出力
1546する前に,"-- buffered messages --"という文字列を出力する.exinfは無視
1547する.
1548
1549この関数を終了処理ルーチンとして登録することで,カーネル終了時点で未出
1550力のログ情
1551報のほとんどを出力することができる.ただし,未出力のログ情
1552å ±
1553の内
1554,システムログタスクのメイン処理が,ログバッファから取り出したが,
1555まだシリアルインタフェースドライバに送信していない情
1556報は,この関数では
1557出力できない.
1558
15598.4 カーネル起動メッセージの出力
1560
1561カーネル起動メッセージの出力は,カーネルの起動時に,カーネルの名称やバー
1562ジョン番号,著作権表示などを出力するための機能である.
1563
1564カーネル起動メッセージの出力は,システムコンフィギュレーションファイル
1565でbanner.cfgをインクルードすることで,システムに組み込むことができる.
1566
1567カーネル起動メッセージの出力は,次の関数で構成される.
1568
1569(1) void print_banner(intptr_t exinf)
1570
1571システムログ機能を用いて,カーネル起動メッセージを出力する.banner.cfg
1572によって,カーネルに初期化ルーチンとして登録される.exinfは無視される.
1573
1574
15759.サポートライブラリ
1576
1577サポートライブラリは,アプリケーションやシステムサービスを作成するため
1578に利用できるライブラリ関数群である.
1579
15809.1 基本的なライブラリ関数
1581
1582基本的なライブラリ関数を用いる場合には,t_stdlib.hをインクルードし,必
1583
1584要に応じてstrerror.cとt_perror.cをコンパイル・リンクする.
1585
1586(1) const char *itron_strerror(ER ercd)
1587
1588ercdで示されるエラーコードに対応するメインエラーコードの文字列を返す.
1589
1590(2) void t_perror(uint_t prio, const char *file, int_t line,
1591 const char *expr, ER ercd);
1592
1593サービスコールがエラーを返した場合に用いることを想定した関数で,ファイ
1594ル名,行番号,メインエラーコード等を,重要度prioで,システムログ機能を
1595用いて出力する.
1596
15979.2 キュー操作ライブラリ関数
1598
1599キュー操作ライブラリは,キューヘッダを含むリング構造のダブルリンクキュー
1600を扱うライブラリである.キューヘッダの次エントリはキューのå…
1601ˆé ­ã®ã‚¨ãƒ³ãƒˆ
1602リ,前エントリはキューの末尾のエントリとする.また,キューのå…
1603ˆé ­ã®ã‚¨ãƒ³
1604トリの前エントリと,キューの末尾のエントリの次エントリは,キューヘッダ
1605とする.空のキューは,次エントリ,前エントリとも自分自身を指すキューヘッ
1606ダであらわす.
1607
1608キュー操作ライブラリ関数を用いる場合には,queue.hをインクルードする.
1609
1610キューヘッダとエントリのためのデータ構造として,QUEUE構造体を用いる.
1611QUEUE構造体の定義は次の通り.
1612
1613 typedef struct queue {
1614 struct queue *p_next; /* 次エントリへのポインタ */
1615 struct queue *p_prev; /* 前エントリへのポインタ */
1616 } QUEUE;
1617
1618キュー操作のために用意している関数は次の通り.
1619
1620(1) void queue_initialize(QUEUE *p_queue);
1621
1622キューを初期化する.p_queueにはキューヘッダを指定する.
1623
1624(2) void queue_insert_prev(QUEUE *p_queue, QUEUE *p_entry);
1625
1626p_queueで指定するエントリの前に,p_entryで指定するエントリを挿å…
1627¥ã™ã‚‹ï¼Ž
1628p_queueにキューヘッダを指定した場合には,キューの末尾にp_entryで指定す
1629るエントリを挿å…
1630¥ã™ã‚‹ã“とになる.
1631
1632(3) void queue_insert_next(QUEUE *p_queue, QUEUE *p_entry);
1633
1634p_queueで指定するエントリの次に,p_entryで指定するエントリを挿å…
1635¥ã™ã‚‹ï¼Ž
1636p_queueにキューヘッダを指定した場合には,キューのå…
1637ˆé ­ã«p_entryで指定す
1638るエントリを挿å…
1639¥ã™ã‚‹ã“とになる.
1640
1641(4) void queue_delete(QUEUE *p_entry);
1642
1643p_entryで指定するエントリを,キューから削除する.
1644
1645(5) QUEUE *queue_delete_next(QUEUE *p_queue);
1646
1647p_queueで指定するエントリの次のエントリをキューから削除し,削除したエン
1648トリを返す.p_queueにキューヘッダを指定した場合には,キューのå…
1649ˆé ­ã®ã‚¨ãƒ³
1650トリを取り出すことになる.p_queueに空のキューを指定して呼び出してはなら
1651ない.
1652
1653(6) bool_t queue_empty(QUEUE *p_queue);
1654
1655キューが空の場合にはtrue,そうでない場合にはfalseを返す.p_queueには
1656キューヘッダを指定する.
1657
16589.3 システムログ出力用ライブラリ関数
1659
1660システムログ出力用ライブラリ関数は,ログ情
1661報をフォーマット出力するため
1662に,システムログタスクおよびシステムログ機能で用いるための関数群である.
1663
1664システムログ出力用ライブラリ関数を用いる場合には,log_output.hをインク
1665ルードし,log_output.cをコンパイル・リンクする.
1666
1667(1) void syslog_printf(const char *format, const intptr_t *p_args,
1668 void (*putc)(char))
1669
1670formatで指定されるフォーマット記述とp_argsで指定される引数列から作成し
1671たメッセージを,1文字出力関数putcを用いて出力する.
1672
1673(2) void syslog_print(const SYSLOG *p_syslog, void (*putc)(char))
1674
1675p_syslogで指定されるログ情
1676報を文字列に直し,1文字出力関数putcを用いて出
1677力する.
1678
1679(3) void syslog_lostmsg(uint_t lost, void (*putc)(char))
1680
1681lost個のログ情
1682報が失われた旨のメッセージを,1文字出力関数putcを用いて出
1683力する.
1684
16859.4 実行時間分布集計モジュール
1686
1687実行時間分布集計モジュールは,システムのリアルタイム性能を評価するため
1688に,プログラム区間の実行時間を計測し,その分布を集計・表示するためのラ
1689イブラリ関数群である.
1690
1691実行時間分布集計モジュールを用いる場合には,histogram.hをインクルードし,
1692histogram.cをコンパイル・リンクする.
1693
1694実行時間分布集計モジュールは,複数のプログラム区間の実行時間を計測・集
1695計・表示することができる.プログラム区間毎に,実行時間分布を記録するた
1696めのデータ構造を持つ.どのデータ構造を用いるかを,ID番号(histid)で指
1697定する.使用できるデータ構造の数は,TNUM_HISTで定義される.すなわち,
1698ID番号として,1~TNUM_HISTを指定することができる.TNUM_HISTは,デフォル
1699ト値がhistgram.cの中で定義されており,コンパイルオプションやターゲット
1700依存部(target_test.hまたはそこからインクルードされるファイル)により変
1701更することができる.
1702
1703ターゲット依存部で設定を変更していない場合,実行時間分布集計モジュール
1704は,カーネルの性能評価用システム時刻を参ç…
1705§ã™ã‚‹æ©Ÿèƒ½ï¼ˆget_utm)を用いて実
1706行時間を計測する.そのため,実行時間はマイクロ秒単位で記録される(精度
1707はターゲット依存).また,記録される時間には,計測のためのオーバヘッド
1708(get_utmの実行時間+α)が含まれる.
1709
1710ターゲット依存部で設定を変更している場合の仕様については,ターゲット依
1711存部のユーザーズマニュアルを参ç…
1712§ã™ã‚‹ã“と.
1713
1714(1) void init_hist(ID histid, uint_t maxval, uint_t histarea[])
1715
1716histidで指定されたデータ構造を初期化する.maxvalには記録する最大時間を,
1717histareaには記録領域のå…
1718ˆé ­ç•ªåœ°ã‚’指定する.histareaで始まる記憶領域は,
1719要素数がmaxvalに指定した値+1のuint_t型のé…
1720åˆ—として確保する.例えば,
1721maxvalに1000を指定する場合には,histareaには要素数が1001のuint_t型のé…
1722
1723列のå…
1724ˆé ­ç•ªåœ°ã‚’渡す.
1725
1726(2) void begin_measure(ID histid)
1727
1728実行時間を計測するプログラム区間の直前に呼び出す関数.histidで指定され
1729たデータ構造に,現在のシステム時刻を記録する.
1730
1731(3) void end_measure(ID histid)
1732
1733実行時間を計測するプログラム区間の直後に呼び出す関数.現在のシステム時
1734刻と,histidで指定されたデータ構造に記録された開始時刻から,プログラム
1735区間の実行時間を求め,その結果を記録する.
1736
1737(4) void print_hist(ID histid)
1738
1739システムログ機能を用いて,実行時間分布の計測結果を出力する.
1740
1741
174210.テストプログラム
1743
1744テストプログラムは,カーネルの機能テストおよび性能評価を行うためのプロ
1745グラム群である.
1746
174710.1 テストプログラム用ライブラリ
1748
1749テストプログラム用ライブラリは,プログラム中のチェックポイントが正しい
1750順序で実行されたことなど,プログラムが正しく動作していることをチェック
1751するための関数群である.プログラムが正しく動作していないことを検出した
1752場合には,プログラムを終了させる.
1753
1754テストプログラム用ライブラリ関数を用いる場合には,test_lib.hをインクルー
1755ドし,test_lib.cをコンパイル・リンクする.
1756
1757(1) void check_point(uint_t count)
1758
1759チェックポイントを通過する際に呼び出す関数.countには,何番目のチェック
1760ポイントであるかを指定する(最初のチェックポイントでは1を指定する).
1761countの値が,最初のチェックポイントにおいては1でない場合に,それ以降の
1762チェックポイントにおいては,前のチェックポイント通過時にcountに指定した
1763値に1を加えた値でない場合に,プログラムが正しく動作していないと見なし,
1764プログラムを終了させる.
1765
1766(2) void check_finish(uint_t count)
1767
1768最後のチェックポイントに到達した際に呼び出す関数.countには,何番目の
1769チェックポイントであるかを指定する(最初のチェックポイントでは1を指定す
1770る).countの値が,前のチェックポイント通過時にcountに指定した値に1を加
1771えた値でない場合に,プログラムが正しく動作していないと見なす.この関数
1772は,プログラムが正しく動作している/いないに関わらず,プログラムを終了
1773させる.
1774
1775(3) void check_assert(bool_t exp)
1776
1777expが真であることをチェックしたい場合に呼び出す関数.expが偽である場合
1778に,プログラムが正しく動作していないと見なし,プログラムを終了させる.
1779
1780(4) void check_ercd(ER ercd, ER expected_ercd)
1781
1782ercdがexpected_ercdに一致していることをチェックしたい場合に呼び出す関数.
1783ercdがexpected_ercdに一致していない場合に,プログラムが正しく動作してい
1784ないと見なし,プログラムを終了させる.
1785
1786(5) void check_state(bool_t ctx, bool_t loc, PRI ipm,
1787 bool_t dsp, bool_t dpn, bool_t tex)
1788
1789タスクコンテキストにおいて,システム状æ…
1790‹ãŒæœŸå¾…
1791したものになっているか
1792チェックしたい時に呼び出す関数.ctx,loc,dsp,dpn,texにはそれぞれ
1793sns_ctx(),sns_loc(),sns_dsp(),sns_dpn(),sns_tex()の返値として期待
1794さ
1795れる値を,ipmにはget_ipm()で参ç…
1796§ã§ãã‚‹å‰²è¾¼ã¿å„ªå…
1797ˆåº¦ãƒžã‚¹ã‚¯ã¨ã—て期待
1798され
1799る値を指定する.この内
1800のいずれかが期待
1801される値と一致していない場合に,
1802プログラムが正しく動作していないと見なし,プログラムを終了させる.
1803
1804(6) void check_state_i(bool_t ctx, bool_t loc,
1805 bool_t dsp, bool_t dpn, bool_t tex)
1806
1807非タスクコンテキストにおいて,システム状æ…
1808‹ãŒæœŸå¾…
1809したものになっているか
1810チェックしたい時に呼び出す関数.ctx,loc,dsp,dpn,texにはそれぞれ
1811sns_ctx(),sns_loc(),sns_dsp(),sns_dpn(),sns_tex()の返値として期待
1812さ
1813れる値を指定する.この内
1814のいずれかが期待
1815される値と一致していない場合に,
1816プログラムが正しく動作していないと見なし,プログラムを終了させる.
1817
1818(7) void set_bit_func(BIT_FUNC bit_func)
1819
1820チェックポイントにおいて呼び出す自己診断関数を設定するための関数.
1821
1822(8) void test_start(char *progname)
1823
1824テスト開始時に,テストプログラム名を出力するための関数.
1825
1826(9) void syslog_flush(void)
1827
1828システムログ機能に記録されたログ情
1829報を,低レベル出力機能に用いる文字出
1830力関数により出力する.
1831
1832(10) void test_finish(void)
1833
1834プログラムを終了させる関数.チェックポイントを使用しない場合に,この関
1835数を用いる.
1836
183710.2 カーネルの整合性検査
1838
1839チェックポイントにおいて呼び出す自己診断に使うためのプログラムとして,
1840カーネルの整合性検査を用意している.カーネルの整合性検査は,カーネル内
1841
1842の各データ構造の一貫性を検査する(現時点では未完成).
1843
1844カーネルの整合性検査を用いる場合には,bit_kernel.cをコンパイル・リンク
1845する.
1846
1847(1) ER bit_kernel(void)
1848
1849カーネル内
1850の各データ構造の一貫性を検査し,一貫性が確認できた場合にE_OK,
1851できなかった場合にE_SYSエラーを返す関数.E_SYSエラーを返す際のサブエラー
1852コードとして,一貫性が確認できなかった項
1853目を示すコードを返す.
1854
185510.3 機能テストプログラム
1856
1857testディレクトリに置かれた"test"で始まるプログラムは,カーネルの機能テ
1858ストを行うためのプログラムである.
1859
1860機能テストプログラムはテストプログラム用ライブラリを使用しているため,
1861構築する場合には,MakefileのAPPL_COBJSに,test_lib.oを追加する必
1862要があ
1863る.コンフィギュレーションスクリプトを使用する場合には,-Uオプションで
1864test_lib.oを指定する.å…
1865·ä½“的には,次のコマンドを実行すればよい(構築用
1866のディレクトリが,ASPカーネルのソースファイルを展開したディレクトリの直
1867下にあると仮定している).
1868
1869 % perl ../configure -T <ターゲット略称> -A <機能テストプログラム名> \
1870 -a ../test -U test_lib.o
1871
1872ただし,CPU例外処理のテスト(1)~(13)は,同一のシステムコンフィギュレー
1873ションをå…
1874±ç”¨ã—ているため,test_cpuexc.cfgを次のようにコピーしておく必
1875要
1876がある.
1877
1878 % cp ../test/test_cpuexc.cfg test_cpuexc<テスト番号>.cfg
1879
1880現バージョンで用意している機能テストプログラムは次の通り.
1881
1882(1) test_cpuexc1 CPU例外処理のテスト(1)
1883(2) test_cpuexc2 CPU例外処理のテスト(2)
1884(3) test_cpuexc3 CPU例外処理のテスト(3)
1885(4) test_cpuexc4 CPU例外処理のテスト(4)
1886(5) test_cpuexc5 CPU例外処理のテスト(5)
1887(6) test_cpuexc6 CPU例外処理のテスト(6)
1888(7) test_cpuexc7 CPU例外処理のテスト(7)
1889(8) test_cpuexc8 CPU例外処理のテスト(8)
1890(9) test_cpuexc9 CPU例外処理のテスト(9)
1891(10) test_cpuexc10 CPU例外処理のテスト(10)
1892(11) test_cpuexc11 CPU例外処理のテスト(11)
1893(12) test_cpuexc12 CPU例外処理のテスト(12)
1894(13) test_cpuexc13 CPU例外処理のテスト(13)
1895(14) test_dlynse sil_dly_nseに関するテスト
1896(15) test_sem1 セマフォ機能のテスト(1)
1897(16) test_sem2 セマフォ機能のテスト(2)
1898(17) test_sysstat1 システム状æ…
1899‹ã«é–¢ã™ã‚‹ãƒ†ã‚¹ãƒˆ(1)
1900(18) test_task1 タスク管理モジュールのテスト(1)
1901(19) test_tex1 タスク例外処理に関するテスト(1)
1902(20) test_tex2 タスク例外処理に関するテスト(2)
1903(21) test_utm1 get_utmに関するテスト(1)
1904
1905CPU例外処理のテストプログラムの一部は,CPU例外ハンドラからリターンした
1906場合に,CPU例外を発生させた命令の次から実行が継続されることを前提に作成
1907されている.この前提が成り立たない場合には,テストプログラムのターゲッ
1908ト依存定義において,CANNOT_RETURN_CPUEXCをマクロ定義することが必
1909要であ
1910る.詳しくは,「ターゲット依存部 ポーティングガイド」を参ç…
1911§ã™ã‚‹ã“と.
1912
191310.4 性能評価プログラム
1914
1915testディレクトリに置かれた"perf"で始まるプログラムは,カーネルの性能評
1916価を行うためのプログラムである.
1917
1918性能評価プログラムは,計測対象となる処理を繰り返し実行し,その実行時間
1919を計測して,実行時間分布を表示する.
1920
1921計測した実行時間には,時間計測のオーバヘッド(時間計測処理の実行にかか
1922る時間)が含まれる.計測対象の処理の正味の実行時間を求めるためには,計
1923測された時間から,時間計測のオーバヘッドを計測するためのプログラム
1924(perf0)で計測された時間を減算する必
1925要がある.
1926
1927また,実行時間の計測は,別に記述がない限り割込みを許可したまま行うため,
1928割込みハンドラ(少なくとも,タイマ割込みハンドラ)の処理時間が含まれた
1929実行結果が計測される.
1930
1931カーネルの性能評価にあたっては,ハードウェア(特にキャッシュ)の設定に
1932留意する必
1933要がある.
1934
1935性能評価プログラムはテストプログラム用ライブラリと実行時間分布集計モ
1936ジュールを使用しているため,構築する場合には,MakefileのAPPL_COBJSに,
1937test_lib.oとhistogram.oを追加する必
1938要がある.コンフィギュレーションスク
1939リプトを使用する場合には,-Uオプションでtest_lib.oとhistgram.oを指定す
1940る.å…
1941·ä½“的には,次のコマンドを実行すればよい(構築用のディレクトリが,
1942ASPカーネルのソースファイルを展開したディレクトリの直下にあると仮定して
1943いる).
1944
1945 % perl ../configure -T <ターゲット略称> -A <性能評価プログラム名> \
1946 -a ../test -U "test_lib.o histogram.o"
1947
1948現バージョンで用意している性能評価プログラムは次の通り.
1949
1950(1) perf0 時間計測のオーバヘッドの評価
1951
1952時間計測のオーバヘッドを計測するためのプログラム.å…
1953·ä½“的には,空のプロ
1954グラム(begin_mearsureとend_measureを続けて呼び出すプログラム)の実行時
1955間を計測する.
1956
1957他の性能評価プログラムで計測された時間から,このプログラムで計測された
1958時間を減算した時間が,計測対象の処理の正味の実行時間である.
1959
1960(2) perf1 slp_tsk,wup_tskによるタスク切換え時間の評価
1961
1962slp_tsk,wup_tskによるタスク切換え時間を計測するためのプログラム.å…
1963·ä½“
1964的には,高い優å…
1965ˆåº¦ã®ã‚¿ã‚¹ã‚¯ãŒèµ·åºŠå¾…
1966ち状æ…
1967‹ã§ã‚る時に,低い優å…
1968ˆåº¦ã®ã‚¿ã‚¹ã‚¯
1969がwup_tskにより高い優å…
1970ˆåº¦ã®ã‚¿ã‚¹ã‚¯ã‚’起床し,高い優å…
1971ˆåº¦ã®ã‚¿ã‚¹ã‚¯ã«åˆ‡ã‚Šæ›ã‚
1972るまでの時間と,高い優å…
1973ˆåº¦ã®ã‚¿ã‚¹ã‚¯ãŒslp_tskにより起床待
1974ち状æ…
1975‹ã¨ãªã‚Šï¼Œä½Ž
1976い優å…
1977ˆåº¦ã®ã‚¿ã‚¹ã‚¯ã«åˆ‡ã‚Šæ›ã‚ã‚‹ã¾ã§ã®æ™‚間を計測する.
1978
1979(3) perf2 snd_pdqの処理時間の評価
1980
1981優å…
1982ˆåº¦ãƒ‡ãƒ¼ã‚¿ã‚­ãƒ¥ãƒ¼ã«è“„積されているデータの数により,snd_pdqの処理時間が
1983どのように変化するかを計測するためのプログラム.å…
1984·ä½“的には,優å…
1985ˆåº¦ãƒ‡ãƒ¼
1986タキュー中に高い優å…
1987ˆåº¦ã®ãƒ‡ãƒ¼ã‚¿ãŒn個蓄積されている時に,snd_dtqにより低
1988い優å…
1989ˆåº¦ã®ãƒ‡ãƒ¼ã‚¿ã‚’å…
1990¥ã‚Œã‚‹ã®ã«ã‹ã‹ã‚‹æ™‚間を計測する.nを0,10,20,30,40,
199150,100,200,300と変化させて計測する.
1992
1993(4) perf3 set_flgの処理時間の評価
1994
1995待
1996ち解除するタスクの数により,set_flgの処理時間がどのように変化するかを
1997計測するためのプログラム.å…
1998·ä½“的には,TA_WMUL属性のイベントフラグに対し
1999て,n個のタスクが待
2000っている時に,set_flgによりそのすべてを待
2001ち解除する
2002のにかかる時間を計測する.nを0,1,2,3,4,5,10,20と変化させて計測す
2003る.
2004
2005(5) perf4 act_tsk,iact_tskの処理時間とタスク切換え時間の評価
2006
2007act_tsk,iact_tskの処理時間とタスク切換え時間を計測するためのプログラム.
2008å…
2009·ä½“的には,(1) タスク切換えを起こさないact_tskの処理時間,(2) タスク切
2010換えを起こすact_tskの処理時間(タスク切換え時間を含む),(3) タスク切換
2011えを起こすiact_tskの処理時間(タスク切換え時間とタイマ割込み中で実行さ
2012れるシステム時刻の更新処理時間を含む)の3つの時間を計測する.
2013
201411.使用上の注意とヒント
2015
201611.1 タイマドライバの組込み
2017
2018タイマドライバをシステムに組み込むために,システムコンフィギュレーショ
2019ンファイルのå…
2020ˆé ­ã§target_timer.cfgをインクルードする必
2021要がある.
2022
202311.2 assertマクロの処理
2024
2025ASPカーネルのコード中には,assertマクロが使われている.assertマクロの定
2026義はt_stddef.hに含まれ,assertが失敗した場合の最後の処理(通常は,プロ
2027グラムを停止させる処理)は,ターゲット依存部のTOPPERS_assert_abortで決
2028定される.
2029
2030assertが失敗した場合,システム開発中はデバッガに落とすのが望ましいが,
2031システム稼働時の対処法は,システムに対する要件に依存する.そこで,ター
2032ゲット依存部のTOPPERS_assert_abortを,システム要件に合致した適切な処理
2033に置き換える必
2034要がある.システム要件によっては,NDEBUGを定義してassert
2035マクロの処理をオブジェクトコード中から消す(「6.2 コンパイルオプション」
2036の節を参ç…
2037§ï¼‰æ–¹æ³•ã‚‚考えられる.
2038
203911.3 システムログ機能の扱い
2040
2041TOPPERS/ASPカーネルでは,システム開発時の利便性を考æ…
2042®ã—,システムログ機
2043能を組み込む設定をデフォルトとしている.
2044
2045それに対して,TOPPERS/ASPカーネルを用いたシステムを機器に組み込む場合は,
2046システムログ機能が意味がない場合も多い.機器への組込みに際してのシステ
2047ムログ機能の設定方法には,以下の方法が考えられる.
2048
2049(1) システムログ機能を用いない
2050
2051システムログ機能を一切使用しない場合には,システムログ機能をシステムに
2052組み込まず(システムコンフィギュレーションファイルでsyslog.cfgをインク
2053ルードしない),システムログ機能のサービスコールを呼び出すソースファイ
2054ルをTOPPERS_OMIT_SYSLOGを定義してコンパイルすればよい.
2055
2056(2) ログ情
2057報の蓄積のみを行う
2058
2059機器に組み込んだ状æ…
2060‹ã§ï¼Œã‚·ãƒªã‚¢ãƒ«ãƒãƒ¼ãƒˆç­‰ã‚’介してシステムを外部と接続す
2061ることができる場合には,システム稼働時にはログ情
2062報の蓄積のみを行い,シ
2063ステムに障害が起きた時などにログ情
2064報を取り出すことで,障害の原因分析の
2065助けとすることができる.
2066
2067å…
2068·ä½“的な設定方法として,次の2つの方法が考えられる.
2069
2070(2-1) 低レベル出力をメモリに蓄積する
2071
2072必
2073要なログ情
2074報を低レベル出力機能を用いて出力するように設定し,低レベル
2075の文字出力関数(target_fput_log)に送られた文字をメモリ(å…
2076¸åž‹çš„にはリン
2077グバッファ)に蓄積するようにする.システムの障害時には,そのメモリ領域
2078を読み出す.
2079
2080(2-2) システムログ機能のログバッファに蓄積する
2081
2082必
2083要なログ情
2084報をシステムログ機能のログバッファに記録するように設定する.
2085システムログタスクを動作させないと,ログ情
2086報はログバッファに蓄積されて
2087いく.システムの障害時には,ログバッファの領域を読み出すか,システムロ
2088グタスクを動作させてログ情
2089報を出力させる.
2090
2091(3) 開発時の設定のままとする
2092
2093システムログ機能の設定を,システム開発時のまま変更せず,シリアルポート
2094等にログ情
2095報を垂れ流す方法も考えられる.
2096
209711.4 オブジェクトIDの管理
2098
2099TOPPERS/ASPカーネルでは,オブジェクトのID番号を,コンフィギュレータが割
2100り付ける方法が基本となっている.
2101
2102アプリケーションプログラム中でオブジェクトのID番号を参ç…
2103§ã™ã‚‹å ´åˆã«ã¯ï¼Œ
2104次の2つの方法が考えられる.
2105
2106(1) オブジェクト識別名を用いる
2107
2108オブジェクト生成のための静的API(CRE_YYY)の第1パラメータに記述したオブ
2109ジェクト識別名を,アプリケーションプログラム中でも用いる方法.
2110
2111コンフィギュレータは,オブジェクト識別名を,割り付けたID番号にマクロ定
2112義するC言語プリプロセッサのディレクティブ(#define)をkernel_cfg.hに生
2113成するため,アプリケーションプログラムからkernel_cfg.hをインクルードす
2114る必
2115要がある.
2116
2117この方法は,オブジェクトコード中にID番号が直接埋め込まれるために実行効
2118率が良い一方で,コンフィギュレータが実行されてkernel_cfg.hが書き換わる
2119度に,アプリケーションプログラムの再コンパイルが必
2120要になるという欠点が
2121ある.そのため,アプリケーションプログラムを構成するファイルの中で,一
2122部のファイルのみでオブジェクト識別名を参ç…
2123§ã™ã‚‹æ§‹æˆã«ã™ã‚‹ã¨ã„った工夫を
2124することが望ましい.
2125
2126(2) オブジェクトのID番号を保持する変数を用いる
2127
2128オブジェクトのID番号を保持するconst属性を付加した変数を用意し,アプリケー
2129ションプログラム中では,その変数を用いる方法.
2130
2131例えば,TASK1というオブジェクト識別名のタスクに対して,次のような変数を
2132用意する.
2133
2134const ID TASK1_id = TASK1;
2135
2136アプリケーションプログラム中では,この変数(TASK1_id)を用いることで,
2137コンフィギュレータが実行されてkernel_cfg.hが書き換わる度に,上記の変数
2138定義を含んだファイルのみを再コンパイルすればよいことになる.
2139
2140この方法は,アプリケーションプログラムの再コンパイルを最小限にできる利
2141点がある一方で,変数のためのメモリ領域が必
2142要になることに加えて,(プロ
2143セッサによっては)変数アクセスのためのオーバヘッドが生じるという欠点が
2144ある.また,定数ではなく変数であることから,他の変数の初期化には使えな
2145いという制限がある.
2146
2147なお,TOPPERS/ASPカーネルのコンフィギュレータは,--external-idオプショ
2148ンを付加することにより,上記の変数定義をkernel_cfg.c中に生成する機能を
2149持っているので,すべてのオブジェクトIDをこの方法で参ç…
2150§ã™ã‚‹å ´åˆã«ã¯ï¼Œã“
2151の機能を用いることを推奨する.
2152
2153コンフィギュレータによるID番号割付けのもう1つの課題として,コンフィギュ
2154レーションファイルの修正により,オブジェクトIDの割付けが変わってしまう
2155ことが挙げられる.これは,アプリケーションソフトウェアの設計仕様書にID
2156番号が記載されている場合や,デバッグ作業においてID番号を直接扱っている
2157場合に,作業効率を低下させる可能性が考えられる.
2158
2159この問題に対応するために,TOPPERS/ASPカーネルのコンフィギュレータに,
2160ID番号の割付け結果をファイルに書き出す機能(--id-output-fileオプション)
2161と,ID番号の割付けをファイルから取り込む機能(--id-input-fileオプション)
2162を用意している.これらの機能を用いて,コンフィギュレータを実行する度に,
2163前回に実行した時にファイルに書き出したID番号の割付けを取り込むことで,
2164前回実行時と同じ割付けを行うことができる.ただし,TOPPERS/ASPカーネルで
2165は,ID番号に抜けがあるのは許されないため,オブジェクトの数が減った場合
2166には(ID番号が大きい方のオブジェクトが減った場合を除いて)エラーとなる.
2167この場合には,ダミーのオブジェクトを生成する方法で回避するしかない.
2168
216911.5 カーネルの内
2170部シンボルのリネーム
2171
2172ASPカーネルでは,モジュール内
2173部の名称が他のモジュール内
2174部の名称と衝突す
2175ることを避けるために,カーネルの内
2176部シンボルは,C言語レベルで,å…
2177ˆé ­ãŒ
2178"_kernel_"または"_KERNEL_"である名称としている.
2179
2180これをソースコードの可読性と両立させるために,ASPカーネルでは,ソースコー
2181ドは自然な名前を用いて記述し,C言語プリプロセッサのマクロ定義(#define)
2182を用いて,それを"_kernel_"または"_KERNEL_"で始まる名前(自然な名前が
2183yyyyyの場合には,_kernel_yyyyy)にリネームする仕組みを用いている.
2184
2185å…
2186·ä½“的には,関連するディレクトリにxxx_rename.defを置き,そこからリネー
2187ムのためのヘッダファイル(xxx_rename.hおよびxxx_unrename.h)を生成する
2188ツール(utils/genrename)を用意している.
2189
2190この仕組みは,ソースコードの可読性向上に役立つ一方で,弊害もある.例え
2191ば,多くのデバッガで,ソースコード中の名称とオブジェクトコード中の名称
2192が異なるために,ソースコード中の変数名を指定して値を読んだり,関数名を
2193指定してブレークポイントを置くといったことができない.
2194
2195この状況に対応するために,ASPカーネルでは,ソースコード中の該当する名称
2196をリネームするためのユーティリティ(utils/applyrename)を用意している.
2197applyrenameユーティリティに,リネーム定義ファイル(xxx_rename.def)のプ
2198リフィックス(xxxの部分)と,リネームしたいファイルリストを与えると,リ
2199ネーム処理を行なう.例えば,kernelディレクトリのすべてのファイルに対し
2200て,カーネルの内
2201部シンボルをリネームするには,次のコマンドを実行すれば
2202よい.
2203
2204 % cd kernel
2205 % ../utils/applyrename kernel *
2206
2207また,ターゲット依存部のディレクトリのすべてのファイルに対して,カーネ
2208ルの内
2209部シンボルをリネームするには,次のようなコマンドを実行すればよい.
2210
2211 % cd target/dve68k_gcc/
2212 % ../../utils/applyrename target *
2213 % ../../utils/applyrename ../../kernel/kernel *
2214
221511.6 トレースログ記録のサンプルコードの使用方法
2216
2217トレースログ記録のサンプルコードがターゲット依存部に組み込まれている場
2218合には,コンフィギュレーションスクリプトにそれを使用することを指示する
2219オプション(-r)を付加することで,メモリ上にトレースログを記録する機能
2220が有効になる.
2221
2222トレースログ記録の使用方法の一例として,システム起動時にトレースログの
2223記録を開始し,システム終了時に記録したトレースログをダンプするためには,
2224システムコンフィギュレーションファイルに次のような記述を追加する.
2225
2226 #include "logtrace/trace_config.h"
2227 ATT_INI({ TA_NULL, TRACE_AUTOSTOP, trace_initialize });
2228 ATT_TER({ TA_NULL, target_fput_log, trace_dump });
2229
2230ここで,初期化ルーチン(trace_initialize)への引数は,初期化直後のトレー
2231スログの動作モードを指定するものである.指定できる動作モードについては,
2232arch/logtrace/trace_config.h中のコメントに説明がある.
2233
2234終了処理ルーチン(trace_dump)は,記録されたトレースログをターゲット依
2235存の低レベル出力機能(target_fput_log)を利用してダンプするためのもので
2236ある.トレースログを別の方法で取り出す場合には,終了処理ルーチンを登録
2237する必
2238要はない.
2239
2240以上の方法では,trace_initializeを初期化ルーチンで,trace_dumpを終了処
2241理ルーチンで呼び出しているため,初期化ルーチンを呼び出す前や終了処理ルー
2242チンを呼び出した後には,トレースログ記録の機能を利用できない.初期化ルー
2243チンを呼び出す前や終了処理ルーチンを呼び出した後に実行される処理(例え
2244ば,カーネルオブジェクトの初期化処理や,trace_initializeよりもå…
2245ˆã«ç™»éŒ²
2246した初期化ルーチン,trace_dumpよりもå…
2247ˆã«ç™»éŒ²ã—た終了処理ルーチン)でト
2248レースログ記録の機能を利用するためには,trace_initializeとtrace_dumpを
2249適切な場所で呼ぶように修正することが必
2250要である.
2251
225211.7 システムの起動時の初期化処理
2253
2254システムの起動時にアプリケーションで必
2255要となる初期化処理を行うための機
2256能として初期化ルーチンが用意されているが,初期化ルーチンが実行されるよ
2257りも早いタイミングで実行することが必
2258要な初期化処理がある場合がある.
2259
2260このような場合に用いるために,標準的なスタートアップモジュールから,ター
2261ゲットシステム依存の初期化フック(hardware_init_hook)を呼び出すことと
2262している.hardware_init_hookは,カーネルのターゲット依存部で用意されて
2263いるのが標準であるが,これをアプリケーションで用意したものに置き換え,
2264その中でアプリケーションで必
2265要となる初期化処理を行うことができる.
2266
2267ただし,hardware_init_hookの作成する場合には,bssセクションとdataセクショ
2268ンが初期化されていないことや,ライブラリが初期化されていないこと,C言語
2269で記述できるとは限らないことなどに注意が必
2270要である.作成にあたっては,
2271「ターゲット依存部 ポーティングガイド」を参ç…
2272§ã™ã‚‹ã“と.
2273
2274カーネルのスタートアップモジュールがhardware_init_hookを呼び出すように
2275実装
2276されていない場合には,スタートアップモジュールをアプリケーションで
2277用意したものに置き換える方法を推奨する.
2278
227911.8 rodataセクションをRAMに置く場合
2280
2281何らかの理由でrodataセクションをRAMに置く場合,dataセクションと同様に,
2282その初期値はROMに置き,スタートアップモジュールでRAMにコピーするのが素
2283直である.これを実現するには,dataセクションの取扱いを参考に,リンカス
2284クリプトとスタートアップモジュールを修正する必
2285要があるが,それに加えて,
2286以下の措置が必
2287要である.
2288
2289コンフィギュレータは,パス1とパス3において,ロードモジュールのシンボル
2290ファイルを用いて,ロードモジュール内
2291のrodataセクションを読み込むことで,
2292各種の定数値を取得する.そのため,rodataセクションをdataセクションと同
2293様に扱うと,そのアクセスアドレス(RAM内
2294のアドレス,VMAと呼ぶ)とé…
2295ç½®ã‚¢
2296ドレス(ROM内
2297のアドレス,LMAと呼ぶ)が一致しなくなるために,定数値を取
2298得することができず,エラーとなる.
2299
2300パス1でのエラーを回避するためには,パス1のリンク時(cfg1_outをリンクす
2301る時)には,rodataセクションのアクセスアドレスとé…
2302ç½®ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’一致させ
2303るリンカスクリプト(標準のリンカスクリプトはこのようになっている)を用
2304いる.サンプルのMakefileでは,LDSCRIPTによりリンカスクリプトを指定する
2305のではなく,LDFLAGSとCFG1_OUT_LDFLAGSに異なるリンカスクリプトを用いるオ
2306プションを設定すればよい.
2307
2308パス3でのエラーを回避するためには,コンフィギュレータのパス3のテンプレー
2309トファイルにおいて,rodataセクションの内
2310容を,é…
2311ç½®ã‚¢ãƒ‰ãƒ¬ã‚¹ã‹ã‚‰ã‚¢ã‚¯ã‚»ã‚¹
2312アドレスにコピーする.そのためには,パス3のテンプレートファイルのターゲッ
2313ト依存部で,LMA.ORDER_LIST等のテンプレートファイル変数を設定すればよい.
2314å…
2315·ä½“的な方法は,「ターゲット依存部 ポーティングガイド」を参ç…
2316§ã™ã‚‹ã“と.
2317
2318
231912.参考情
2320å ±
2321
232212.1 利用条件と利用報告
2323
2324ASPカーネルの利用条件は,各ファイルのå…
2325ˆé ­ã«è¡¨ç¤ºã•ã‚Œã¦ã„る.著作権は,各
2326ファイルのå…
2327ˆé ­ã«è¡¨ç¤ºã•ã‚Œã¦ã„る著作権者
2328が保有している.
2329
2330利用条件の(3)の(b)において,利用の形æ…
2331‹ã‚’TOPPERSプロジェクトに報告する方
2332法としては,ASPカーネルを利用した製品の名称と応用分野,製品化した会社名
2333と業種等の情
2334報を,以下のURLのページから報告するものとする.
2335
2336 http://www.toppers.jp/report.html
2337
2338またその際に,ASPカーネルを使用してのコメントやご意見もいただけると幸い
2339である.
2340
234112.2 保証・適用性・サポート
2342
2343ASPカーネルは無保証で提供されているものである.開発者
2344およびTOPPERSプロ
2345ジェクトは,ASPカーネルに関して,特定の使用目的に対する適合性も含めて,
2346いかなる保証も行わない.また,ASPカーネルの利用により直接的または間接的
2347に生じたいかなる損害に関しても,その責任を負わない.
2348
2349開発者
2350およびTOPPERSプロジェクトは,ASPカーネルに関するサポートの約束は
2351していない.ASPカーネルに関して質問がある場合は,後述のTOPPERSユーザー
2352ズメーリングリストを利用していただけると幸いである.確実なサポートが必
2353
2354要な場合には,有償でサポートサービスを提供している会社に相談されたい.
2355
235612.3 バグレポート
2357
2358ASPカーネルにバグや問題点を発見された場合には,後述のTOPPERSユーザーズ
2359メーリングリストに報告して欲しい.
2360
2361メーリングリストにバグや問題点などを報告する場合には,必
2362要に応じて次の
2363情
2364報を知らせて欲しい.
2365
2366 使用しているカーネルに関する情
2367å ±
2368 ・ターゲット非依存部のバージョン
2369 ・使用しているターゲット依存部とそのバージョン
2370 ・TOPPERSプロジェクトからのリリースに対する改造箇所(あれば)
2371
2372 ターゲットシステムに関する情
2373å ±
2374 ・ターゲットプロセッサの種類
2375 ・ターゲットボード等の種類
2376
2377 ホストに関する情
2378å ±
2379 ・OSのバージョン(サービスパックの適用状況も)
2380 ・コンパイラなどの開発環境のバージョン(Cygwinのバージョンも)
2381
238212.4 ウェブサイト
2383
2384TOPPERSプロジェクトのウェブサイトは,以下のURLにある.
2385
2386 http://www.toppers.jp/
2387
2388TOPPERSプロジェクトやASPカーネルに関する最新情
2389報は,このウェブサイトか
2390ら得ることができる.また,ASPカーネルの最新版は,このウェブサイトからダ
2391ウンロードすることができる.
2392
239312.5 TOPPERSユーザーズメーリングリスト
2394
2395ASPカーネルを含むTOPPERSプロジェクトの開発成果物のユーザに対する情
2396報提
2397供およびユーザ相互間の情
2398報交換を容易にするために,TOPPERSユーザーズメー
2399リングリスト(users@toppers.jp)を用意している.
2400
2401このメーリングリストには,誰でも自由に登録し,メールを送付することがで
2402きる(登録者
2403以外はメールを送付できない).また,送付されたメールは,誰
2404でも自由にウェブサイトで読むことができる.
2405
2406メーリングリストへの登録方法については,以下のURLのページに説明がある.
2407
2408 http://www.toppers.jp/community.html
2409
241012.6 TOPPERSプロジェクトのメンバ向けのサービス
2411
2412TOPPERSプロジェクトのメンバに対しては,上記に加えて,ASPカーネルに関連
2413して次のサービスを用意している.
2414
2415(1) TOPPERS開発者
2416メーリングリスト
2417
2418TOPPERSプロジェクトのメンバは,ASPカーネルに関する質問,バグや問題点な
2419どの報告に,TOPPERS開発者
2420メーリングリスト(dev@toppers.jp)を利用するこ
2421とができる.
2422
2423(2) ASPカーネルの開発支援サイト
2424
2425ASPカーネルの開発支援のためのTRAC(バグトラッキングシステム)が,以下の
2426URLにある(TRACへのアクセスには,会員パスワードが必
2427要である).
2428
2429 http://dev.toppers.jp/trac/asp/
2430
2431TOPPERSプロジェクトのメンバは,このサイトから,ウェブインタフェースおよ
2432びsubversionサーバにより,ASPカーネルの開発中のバージョンを得ることがで
2433きる.また,バグトラッキングデータベースにアクセスすることができ,過去
2434のバグ履歴へのアクセスや,バグの登録をすることができる.
2435
243612.7 TOPPERSプロジェクトへの参加
2437
2438TOPPERSプロジェクトでは,何からの形でプロジェクトに貢献していただける方,
2439プロジェクトで開発したソフトウェアをお使いの方,プロジェクトに興味をお
2440持ちの方の参加を求めている.TOPPERSプロジェクトへの参加方法については,
2441以下のページに説明がある.
2442
2443 http://www.toppers.jp/joinus.html
2444
2445
244613.リファレンス
2447
244813.1 サービスコール一覧
2449
2450(1) タスク管理機能
2451
2452 ER ercd = act_tsk(ID tskid)
2453 ER ercd = iact_tsk(ID tskid)
2454 ER_UINT actcnt = can_act(ID tskid)
2455 ER ercd = ext_tsk(void)
2456 ER ercd = ter_tsk(ID tskid)
2457 ER ercd = chg_pri(ID tskid, PRI tskpri)
2458 ER ercd = get_pri(ID tskid, PRI *p_tskpri)
2459 ER ercd = get_inf(intptr_t *p_exinf)
2460 ER ercd = ref_tsk(ID tskid, T_RTSK *pk_rtsk)
2461
2462(2) タスク付属同期機能
2463
2464 ER ercd = slp_tsk(void)
2465 ER ercd = tslp_tsk(TMO tmout)
2466 ER ercd = wup_tsk(ID tskid)
2467 ER ercd = iwup_tsk(ID tskid)
2468 ER_UINT wupcnt = can_wup(ID tskid)
2469 ER ercd = rel_wai(ID tskid)
2470 ER ercd = irel_wai(ID tskid)
2471 ER ercd = sus_tsk(ID tskid)
2472 ER ercd = rsm_tsk(ID tskid)
2473 ER ercd = dly_tsk(RELTIM dlytim)
2474
2475(3) タスク例外処理機能
2476
2477 ER ercd = ras_tex(ID tskid, TEXPTN rasptn)
2478 ER ercd = iras_tex(ID tskid, TEXPTN rasptn)
2479 ER ercd = dis_tex(void)
2480 ER ercd = ena_tex(void)
2481 bool_t state = sns_tex(void)
2482 ER ercd = ref_tex(ID tskid, T_RTEX *pk_rtex)
2483
2484(4) 同期・通信機能
2485
2486 ER ercd = sig_sem(ID semid)
2487 ER ercd = isig_sem(ID semid)
2488 ER ercd = wai_sem(ID semid)
2489 ER ercd = pol_sem(ID semid)
2490 ER ercd = twai_sem(ID semid, TMO tmout)
2491 ER ercd = ini_sem(ID semid)
2492 ER ercd = ref_sem(ID semid, T_RSEM *pk_rsem)
2493
2494 ER ercd = set_flg(ID flgid, FLGPTN setptn)
2495 ER ercd = iset_flg(ID flgid, FLGPTN setptn)
2496 ER ercd = clr_flg(ID flgid, FLGPTN clrptn)
2497 ER ercd = wai_flg(ID flgid, FLGPTN waiptn,
2498 MODE wfmode, FLGPTN *p_flgptn)
2499 ER ercd = pol_flg(ID flgid, FLGPTN waiptn,
2500 MODE wfmode, FLGPTN *p_flgptn)
2501 ER ercd = twai_flg(ID flgid, FLGPTN waiptn,
2502 MODE wfmode, FLGPTN *p_flgptn, TMO tmout)
2503 ER ercd = ini_flg(ID flgid)
2504 ER ercd = ref_flg(ID flgid, T_RFLG *pk_rflg)
2505
2506 ER ercd = snd_dtq(ID dtqid, intptr_t data)
2507 ER ercd = psnd_dtq(ID dtqid, intptr_t data)
2508 ER ercd = ipsnd_dtq(ID dtqid, intptr_t data)
2509 ER ercd = tsnd_dtq(ID dtqid, intptr_t data, TMO tmout)
2510 ER ercd = fsnd_dtq(ID dtqid, intptr_t data)
2511 ER ercd = ifsnd_dtq(ID dtqid, intptr_t data)
2512 ER ercd = rcv_dtq(ID dtqid, intptr_t *p_data)
2513 ER ercd = prcv_dtq(ID dtqid, intptr_t *p_data)
2514 ER ercd = trcv_dtq(ID dtqid, intptr_t *p_data, TMO tmout)
2515 ER ercd = ini_dtq(ID dtqid)
2516 ER ercd = ref_dtq(ID dtqid, T_RDTQ *pk_rdtq)
2517
2518 ER ercd = snd_pdq(ID pdqid, intptr_t data, PRI datapri)
2519 ER ercd = psnd_pdq(ID pdqid, intptr_t data, PRI datapri)
2520 ER ercd = ipsnd_pdq(ID pdqid, intptr_t data, PRI datapri)
2521 ER ercd = tsnd_pdq(ID pdqid, intptr_t data, PRI datapri, TMO tmout)
2522 ER ercd = rcv_pdq(ID pdqid, intptr_t *p_data, PRI *p_datapri)
2523 ER ercd = prcv_pdq(ID pdqid, intptr_t *p_data, PRI *p_datapri)
2524 ER ercd = trcv_pdq(ID pdqid, intptr_t *p_data, PRI *p_datapri, TMO tmout)
2525 ER ercd = ini_pdq(ID pdqid)
2526 ER ercd = ref_pdq(ID pdqid, T_RPDQ *pk_rpdq)
2527
2528 ER ercd = snd_mbx(ID mbxid, T_MSG *pk_msg)
2529 ER ercd = rcv_mbx(ID mbxid, T_MSG **ppk_msg)
2530 ER ercd = prcv_mbx(ID mbxid, T_MSG **ppk_msg)
2531 ER ercd = trcv_mbx(ID mbxid, T_MSG **ppk_msg, TMO tmout)
2532 ER ercd = ini_mbx(ID mbxid)
2533 ER ercd = ref_mbx(ID mbxid, T_RMBX *pk_rmbx)
2534
2535(5) メモリプール管理機能
2536
2537 ER ercd = get_mpf(ID mpfid, void **p_blk)
2538 ER ercd = pget_mpf(ID mpfid, void **p_blk)
2539 ER ercd = tget_mpf(ID mpfid, void **p_blk, TMO tmout)
2540 ER ercd = rel_mpf(ID mpfid, void *blk)
2541 ER ercd = ini_mpf(ID mpfid)
2542 ER ercd = ref_mpf(ID mpfid, T_RMPF *pk_rmpf)
2543
2544(6) 時間管理機能
2545
2546 ER ercd = get_tim(SYSTIM *p_systim)
2547 ER ercd = get_utm(SYSUTM *p_sysutm)
2548
2549 ER ercd = sta_cyc(ID cycid)
2550 ER ercd = stp_cyc(ID cycid)
2551 ER ercd = ref_cyc(ID cycid, T_RCYC *pk_rcyc)
2552
2553 ER ercd = sta_alm(ID almid, RELTIM almtim)
2554 ER ercd = ista_alm(ID almid, RELTIM almtim)
2555 ER ercd = stp_alm(ID almid)
2556 ER ercd = istp_alm(ID almid)
2557 ER ercd = ref_alm(ID almid, T_RALM *pk_ralm)
2558
2559(7) システム状æ…
2560‹ç®¡ç†æ©Ÿèƒ½
2561
2562 ER ercd = rot_rdq(PRI tskpri)
2563 ER ercd = irot_rdq(PRI tskpri)
2564 ER ercd = get_tid(ID *p_tskid)
2565 ER ercd = iget_tid(ID *p_tskid)
2566 ER ercd = loc_cpu(void)
2567 ER ercd = iloc_cpu(void)
2568 ER ercd = unl_cpu(void)
2569 ER ercd = iunl_cpu(void)
2570 ER ercd = dis_dsp(void)
2571 ER ercd = ena_dsp(void)
2572 bool_t state = sns_ctx(void)
2573 bool_t state = sns_loc(void)
2574 bool_t state = sns_dsp(void)
2575 bool_t state = sns_dpn(void)
2576 bool_t state = sns_ker(void)
2577 ER ercd = ext_ker(void)
2578
2579(8) 割込み管理機能
2580
2581 ER ercd = dis_int(INTNO intno)
2582 ER ercd = ena_int(INTNO intno)
2583 ER ercd = chg_ipm(PRI intpri)
2584 ER ercd = get_ipm(PRI *p_intpri)
2585
2586(9) CPU例外管理機能
2587
2588 bool_t stat = xsns_dpn(void *p_excinf)
2589 bool_t stat = xsns_xpn(void *p_excinf)
2590
259113.2 静的API一覧
2592
2593(1) タスク管理機能
2594
2595 CRE_TSK(ID tskid, { ATR tskatr, intptr_t exinf, TASK task,
2596 PRI itskpri, SIZE stksz, STK_T *stk })
2597
2598(3) タスク例外処理機能
2599
2600 DEF_TEX(ID tskid, { ATR texatr, TEXRTN texrtn })
2601
2602(4) 同期・通信機能
2603
2604 CRE_SEM(ID semid, { ATR sematr, uint_t isemcnt, uint_t maxsem })
2605 CRE_FLG(ID flgid, { ATR flgatr, FLGPTN iflgptn })
2606 CRE_DTQ(ID dtqid, { ATR dtqatr, uint_t dtqcnt, void *dtqmb })
2607 CRE_PDQ(ID pdqid, { ATR pdqatr, uint_t pdqcnt, PRI maxdpri, void *pdqmb })
2608 CRE_MBX(ID mbxid, { ATR mbxatr, PRI maxmpri, void *mprihd })
2609
2610(5) メモリプール管理機能
2611
2612 CRE_MPF(ID mpfid, { ATR mpfatr, uint_t blkcnt, uint_t blksz,
2613 MPF_T *mpf, void *mpfmb })
2614
2615(6) 時間管理機能
2616
2617 CRE_CYC(ID cycid, { ATR cycatr, intptr_t exinf, CYCHDR cychdr,
2618 RELTIM cyctim, RELTIM cycphs })
2619 CRE_ALM(ID almid, { ATR almatr, intptr_t exinf, ALMHDR almhdr })
2620
2621(8) 割込み管理機能
2622
2623 CFG_INT(INTNO intno, { ATR intatr, PRI intpri })
2624 ATT_ISR({ ATR isratr, intptr_t exinf, INTNO intno, ISR isr, PRI isrpri })
2625 DEF_INH(INHNO inhno, { ATR inhatr, INTHDR inthdr })
2626
2627(9) CPU例外管理機能
2628
2629 DEF_EXC(EXCNO excno, { ATR excatr, EXCHDR exchdr })
2630
2631(10) システム構成管理機能
2632
2633 DEF_ICS({ SIZE istksz, STK_T *istk })
2634 ATT_INI({ ATR iniatr, intptr_t exinf, INIRTN inirtn })
2635 ATT_TER({ ATR teratr, intptr_t exinf, TERRTN terrtn })
2636
263713.3 バージョン履歴
2638
2639 2006年10月29日 Release 1.A.0 最初のリリース
2640 2007年2月20日 Release 1.A.1
2641 2007年2月20日 Release 1.A.2
2642 2007年7月12日 Release 1.B.0 コンフィギュレータを新バージョンに
2643 2007å¹´7月12日 Release 1.B.1 ライセンス条件のå…
2644¥ã‚Œæ›ãˆ
2645 2007年7月16日 Release 1.B.2
2646 2007年7月21日 Release 1.B.3 ディレクトリ構成の変更
2647 2007年8月20日 Release 1.B.4 拡張パッケージの追加
2648 2007年10月16日 Release 1.B.5
2649 2007年11月15日 Release 1.0.0 正式版のリリース
2650 2007年12月23日 Release 1.1.0
2651 2008年3月19日 Release 1.2.0
2652 2008年3月21日 Release 1.2.1
2653 2008å¹´4月12日 Release 1.3.0 一般å…
2654¬é–‹ã«å‘けての最終修正
2655 2008å¹´5月13日 Release 1.3.1 最初の一般å…
2656¬é–‹ç‰ˆ
2657 2008年8月21日 Release 1.3.2
2658 2009年5月11日 Release 1.4.0
2659 2010å¹´6月28日 Release 1.5.0 拡張パッケージを一般å…
2660¬é–‹
2661 2010年8月1日 Release 1.6.0 cfg-1.6に対応
2662 2011年5月8日 Release 1.7.0 動的生成機能拡張パッケージ等の追加
2663 2012年12月26日 Release 1.8.0
2664 2014年1月6日 Release 1.9.0 メッセージバッファ機能拡張の追加
2665 2014年11月17日 Release 1.9.1
2666 2015年 月 日 Release 1.9.2
2667
2668以上
Note: See TracBrowser for help on using the repository browser.