source: ssp_qb_r5f100le_cs/trunk/doc/user.txt@ 95

Last change on this file since 95 was 95, checked in by nmir-saito, 9 years ago

ファイルの mime-type 変更

  • Property svn:mime-type set to text/plain; charset=shift_jis
File size: 48.9 KB
Line 
1
2 TOPPERS/SSPカーネル
3 ユーザーズマニュアル
4
5 対応バージョン: Release 1.3.0
6 最終更新: 2015年5月19日
7
8このドキュメントは,TOPPERS/SSPカーネルを使用するために必要な事項を説明
9するものである.
10
11----------------------------------------------------------------------
12 TOPPERS/SSP Kernel
13 Smallest Set Profile Kernel
14
15 Copyright (C) 2011-2013 by Meika Sugimoto
16 Copyright (C) 2014,2015 by Naoki Saito
17 Nagoya Municipal Industrial Research Institute, JAPAN
18
19 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
20 ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
21 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
22 (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
23 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
24 スコード中に含まれていること.
25 (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
26 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
27 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
28 の無保証規定を掲載すること.
29 (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
30 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
31 と.
32 (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
33 作権表示,この利用条件および下記の無保証規定を掲載すること.
34 (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
35 報告すること.
36 (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
37 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
38 また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
39 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
40 免責すること.
41
42 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
43 よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
44 に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
45 アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
46 の責任を負わない.
47
48----------------------------------------------------------------------
49
50○目次
51
521.TOPPERS/SSPカーネルの概要
53 1.1 TOPPERS/SSPカーネルの位置付け
54 1.2 TOPPERS/SSPカーネルの仕様
55 1.3 既知の問題
562.ターゲット依存部
57 2.1 ターゲット依存部の概要
58 2.2 簡易パッケージ
59 2.3 個別パッケージ
603.クイックスタートガイド
61 3.1 開発環境の準備
62 3.2 コンフィギュレータの構築
63 3.3 サンプルプログラムの構築と実行
64 3.4 カーネルを関数単位でライブラリ化する方法
65 3.5 アプリケーションとカーネルを別々に構築する方法
664.ディレクトリ構成・ファイル構成
67 4.1 配布パッケージのディレクトリ構成
68 4.2 ターゲット非依存部のファイル構成
695.コンフィギュレーションスクリプトの使い方
706.Makefileの修正方法
71 6.1 Makefileの変数定義
72 6.2 コンパイルオプション
737.コンフィギュレータの使い方
748.システムサービス
75 8.1 シリアルインタフェースドライバ
76 8.1.1 シリアルインタフェースドライバのサービスコール
77 8.1.2 シリアルインタフェースドライバのその他のサービス
78 8.2 カーネル起動メッセージの出力
799.サポートライブラリ
80 9.1 キュー操作ライブラリ関数
8110.使用上の注意とヒント
82 10.1 タイマドライバの組込み
83 10.2 assertマクロの処理
84 10.3 オブジェクトIDの管理
85 10.4 カーネルの内部シンボルのリネーム
86 10.5 システムの起動時の初期化処理
8711.参考情報
88 11.1 利用条件と利用報告
89 11.2 保証・適用性・サポート
90 11.3 バグレポート
91 11.4 ウェブサイト
92 11.5 TOPPERSユーザーズメーリングリスト
93 11.6 TOPPERSプロジェクトのメンバ向けのサービス
94 11.7 TOPPERSプロジェクトへの参加
9512.
96 12.1 サービスコール一覧
97 12.2 静的API一覧
98 12.3 バージョン履歴
99
100
1011.TOPPERS/SSPカーネルの概要
102
1031.1. TOPPERS/SSPカーネルの位置付け
104
105TOPPERS/SSPカーネルは,TOPPERS/ASPカーネルの仕様に対して,
106小規模アプリケーション向けに仕様を絞ったものである.最小セットに
107おける"最小"とは,カーネルが使用するROM/RAM使用量を小さくするために
108仕様を最適化することを意味する.
109
110提供する機能はμITRON4.0仕様準拠の最低機能をベースとして,一部
111自動車制御用プロファイルの機能を取り込む.
112
113このため,SSPカーネルはASPカーネルの下位互換でも上位互換でもない.
114ただし,制約タスク拡張パッケージを適用した場合,SSPカーネルは
115SSPカーネルの上位互換となる.
116
1171.2. TOPPERS/SSPカーネルの仕様
118
119SSPカーネルの仕様の概要については,「TOPPERS新世代カーネル統合仕様書」を
120参照のこと.
121
1221.3. 既知の問題
123
124kernel_cfg.c(およびcfg1_out.c)は,カーネル,システムサービス,アプリ
125ケーションのいずれのインクルードファイルもインクルードし,いずれのシン
126ボルも参照する可能性がある.そのため,カーネル,システムサービス,アプ
127リケーションでシンボル等が衝突している場合や,コンパイルオプションが食
128い違っている場合に,kernel_cfg.c(およびcfg1_out.c)が正しくコンパイル
129できなくなる場合が考えられる.カーネルのシンボルをリネームするなどの方
130法で軽減されてはいるが,問題がなくなっているわけではない.
131
132システムコンフィギュレーションファイルから,コンフィギュレータに対する
133INCLUDEディレクティブにより他のコンフィギュレーションファイルをインクルー
134ドしている場合に,その中に含まれるC言語プリプロセッサのインクルードディ
135レクティブ(#include)で,コンフィギュレーションファイルの置かれている
136ディレクトリが,ファイルを検索するパスにはいらないという問題がある.例
137えば,syssvc/syslog.cfgに「#include "syslog.h"」と記述できないのは,こ
138の問題があるためである.
139
140現時点では,アドレスが64ビットの環境には対応していない.64ビットアドレ
141ス環境をサポートするための最大の課題は,モトローラSレコードフォーマット
142が64ビットアドレスに対応していないことである.
143
1442.ターゲット依存部
145
1462.1. ターゲット依存部の概要
147
148SSPカーネルのターゲット非依存部と,各種のターゲットシステムに対応するた
149めのターゲット依存部は,別々に開発されている.そのため,SSPカーネルが対
150応しているすべてのターゲット依存部を,バージョンを整合させてパッケージ
151化することは困難である.そこで,主に初級のユーザを対象にした簡易パッケー
152ジと,上級のユーザやカーネル開発者を対象にした個別パッケージを用意して
153いる.
154
155SSPカーネルを未サポートのターゲットシステムへポーティングするために必要
156な作業は,開発環境の構築と標準の開発環境との差異の吸収,カーネル自身の
157ポーティング,システムサービスのポーティングなどからなる.詳しくは,
158「ターゲット依存部 ポーティングガイド」を参照すること.
159
160※ ターゲット依存部 ポーティングガイドは現在は未完である
161
1622.2. 簡易パッケージ
163
164簡易パッケージは,SSPカーネルが対応しているターゲットシステム毎に用意さ
165れ,そのターゲットシステム上でSSPカーネルを動作させるために必要なファイ
166ル一式をパッケージ化したものである.簡易パッケージに含まれるファイルは,
167バージョンが整合していることが確認されている.
168
169簡易パッケージのバージョン番号は,パッケージ化した日付とすることを原則
170とするが,ターゲットシステム毎の事情によりこの原則に従わない場合がある.
171
172簡易パッケージは,基本的には,次に説明する個別パッケージを複数まとめた
173ものである.そのため,対象ターゲットシステムに必要のないファイルも含ま
174れている.また,簡易パッケージに含まれている個別パッケージのバージョン
175は,個別パッケージのMANIFESTファイルを参照することで知ることができる.
176
1772.3. 個別パッケージ
178
179個別パッケージは,SSPカーネルの開発単位毎に,その開発単位で開発を担当し
180ているファイル一式をパッケージ化したものである.SSPカーネルのターゲット
181非依存部も,一つの個別パッケージとして配布される.ある個別パッケージを
182使用するためには,一般には,他の個別パッケージが必要となる.ターゲット
183依存部の個別パッケージを使用するために必要となる個別パッケージとそのバー
184ジョンについては,ターゲット依存部のユーザーズマニュアルを参照すること.
185使用する個別パッケージのバージョンを整合させることは,ユーザの責任であ
186る.
187
188個別パッケージのバージョン番号は,X.Y.Zの形で表現される.ターゲット非依
189存部のバージョン番号を,SSPカーネル全体のリリース番号とする.ターゲット
190依存部のバージョン番号は,XとYが,それが依存するターゲット非依存部と一
191致している.それに対して,Zは一致しているとは限らない.例えば,ターゲッ
192ト非依存部のバージョン1.1.0に対応するターゲット依存部は,バージョン
1931.1.Zの形となる.ターゲット依存部のみがバージョンアップした場合には,Z
194が変更される.
195
196使用する個別パッケージは,次の例のように,ターゲット非依存部の個別パッ
197ケージを展開したのと同じディレクトリで展開する.
198
199 % tar xvfz ssp-1.3.0.tar.gz
200 % tar xvfz ssp_arch_rx_rxc-1.3.0.tar.gz
201
202ターゲット非依存部の個別パッケージには,以下のターゲット依存部が含まれ
203ている.
204
205 target/cq_frk_fm3_gcc Interface誌付属Cortex-M3基板
206 (GNU開発環境)用ターゲット依存部
207 arch/arm_m_gcc Cortex-M3(GNU開発環境)用プロセッサ依存部
208
209
2103.クイックスタートガイド
211
212ここでは,ターゲット依存部が用意されているターゲットシステム上で,SSPカー
213ネル上で動作するサンプルプログラムを構築・動作させるまでの手順を示す.
214
2153.1. 開発環境の準備
216
217SSPカーネルを用いたシステム構築には,以下のツールが必要である.
218
219 ホストシステム用のツール
220 perl 動作確認:5.16.2
221 GNU Make 動作確認:3.81
222
223 TOPPERS新世代カーネル用コンフィギュレータ
224 cfg 動作確認:1.8.0
225 ※ 1.6.0以前のバージョンでは動作しない.
226
227 ターゲットシステム用のツール(クロス開発環境)
228 標準規格に準拠したCコンパイラ
229 アセンブラ,リンカ,ライブラリアン
230 シンボルファイル出力ツール,ヘキサファイル出力ツール
231 標準Cライブラリ(必須ではない)
232
233ターゲットシステム用のツールにGNU開発環境を用いる場合には,以下のツール
234が必要である.
235
236 ターゲットシステム用のGNU開発環境ツール
237 BINUTILS(as,ld,ar,nm,ranlib,objcopy,objdump)
238 GCCまたはGCC-CORE(gccおよびそこから呼び出されるツール)
239 NEWLIB(標準Cライブラリ,必須ではない)
240
241動作確認されているターゲットシステム用のツールについては,ターゲット依
242存部のユーザーズマニュアルを参照すること.
243
244ターゲットシステム用の標準Cライブラリは,アプリケーションが標準Cライブ
245ラリを使用しない場合には,必要ない.ただし,コンパイラが標準Cライブラリ
246関数(memcpy,memsetなど)を呼び出すコードを生成する場合があり,その場
247合には標準Cライブラリが必要である.標準Cライブラリを用意する代わりに,
248生成したコードが呼び出す関数のみを自分で用意してもよい.
249
250なお,perlスクリプトはマルチバイト文字を扱う文字コードがEUC,改行コードが
251LFであることを仮定している.それ以外の文字コード,改行コードで動作させる
252ためにはperlスクリプトの修正が必要となることがある.
253
254以下では,これらのツールが用意できていることを前提に,UNIXマシン上での
255構築手順を説明する.また以下の説明では,makeコマンドがGNU Makeであるも
256のとする(SSPカーネルのサンプルのMakefileは,GNU Makeの拡張機能を用いて
257いる).
258
2593.2. コンフィギュレータの構築
260
261カーネルを構築する前に,まず,TOPPERS新世代カーネル用コンフィギュレータ
262を構築する必要がある.簡易パッケージに含まれていた場合など,コンフィギュ
263レータを実行ファイル形式で入手した場合には,このステップは必要ない.
264
265コンフィギュレータの構築には,以下のツールが必要である.
266
267 ホストシステム用のツール(セルフ開発環境)
268 C++コンパイラ,C++ライブラリ
269 動作確認(Mac OS X環境):Apple LLVM version 5.0 (clang-500.2.79)
270 Boost 動作確認:1.55.0
271 Visual Studio (Windowsの場合)
272
273最初に,パッケージにコンフィギュレータのソースファイルが含まれていない
274場合には,コンフィギュレータのパッケージを,SSPカーネルのソースファイル
275を展開したディレクトリの下に展開する.
276
277 % cd ssp
278 % tar xvfz cfg-1.8.0.tar.gz
279
280または,コンフィギュレータのパッケージを他のディレクトリに展開し,SSPカー
281ネルのソースファイルを展開したディレクトリからシンボリックリンクをはっ
282てもよい.
283
284ソースファイルが展開できると,cfgディレクトリに移動し,コンフィギュレー
285ションスクリプト(configure)でMakefileの環境依存部(Makefile.config)
286を生成した後,makeコマンドによりコンフィギュレータ(cfgプログラム)が構
287築できる.
288
289 % cd cfg
290 % ./configure
291 % make
292
293ただし,Boostをインストールしたディレクトリおよび名称が標準で想定してい
294るものとは違う場合には,configureの--with-headersおよび--with-libraries
295オプションにより,ヘッダファイルおよびライブラリの置かれたディレクトリ
296を指定する必要がある.
297
298また,ホストシステムによっては,最適化レベルを上げると正しくコンパイル
299できないことが知られている.そのような場合には,最適化レベルを下げるか,
300最適化を抑止するように,Makefileを修正する必要がある.
301
302なお,コンフィギュレータの使用方法については,「7.コンフィギュレータ
303の使い方」の章で説明する.
304
3053.3. サンプルプログラムの構築と実行
306
307次に,SSPカーネル上で動作するサンプルプログラムを構築する方法を説明する.
308
309まず,サンプルプログラムのオブジェクトファイルを置くディレクトリを作成
310し,コンフィギュレーションスクリプトを実行する.例えば,オブジェクトファ
311イルを置くディレクトリを,SSPカーネルのソースファイルを展開したディレ
312クトリの下のOBJという名称のディレクトリにする場合には,次のコマンドを
313実行する(ディレクトリの場所と名称は任意に決めてよい).
314
315 % cd ssp
316 % mkdir OBJ
317 % cd OBJ
318 % perl ../configure -T <ターゲット略称>
319
320ここで,<ターゲット略称>は,targetディレクトリの下に置かれているターゲッ
321ト依存部ディレクトリの名称である.コンフィギュレーションスクリプトのオ
322プションについては,「5.コンフィギュレーションスクリプトの使い方」の
323章で説明する.
324
325コンフィギュレーションスクリプトの実行により,カレントディレクトリには,
326サンプルプログラムを構築するためのMakefile,サンプルプログラム用のコン
327フィギュレーションファイル(sample1.cfg),サンプルプログラム本体
328(sample1.hおよびsample1.c)が生成される.
329
330コンフィギュレーションスクリプトの実行後,必要であればMakefileを修正す
331る.Makefileの修正方法については,「6.Makefileの修正方法」の章で説明
332する.
333
334その後,make dependで依存関係ファイル(Makefile.depend)を生成した後,
335makeコマンドによりサンプルプログラムのロードモジュール(SSPまたは
336SSP.exe)が生成できる.依存関係ファイルの生成には若干時間がかかる.
337
338 % make depend
339 % make
340
341ここで構築したサンプルプログラム(sample1.h,sample1.c,sample1.cfg)
342は,SSPカーネルの基本的な動作を確認するためのものである.このプログラ
343ムの概要説明は,sample1.cの先頭のコメントにある.
344
3453.4. カーネルを関数単位でライブラリ化する方法
346
347前節の手順では,カーネルをファイル単位でコンパイルし,ライブラリ化して
348いたが,カーネルのコードサイズを縮小するためには,使用しないサービスコー
349ルはリンクしない方が望ましい.そこでSSPカーネルでは,カーネルを関数単位
350でコンパイルし,ライブラリ化する方法を用意している.
351
352この方法でサンプルプログラムを構築するには,コンフィギュレーションスク
353リプトに,それを指示するオプション(-f)を付加するだけでよい.
354
355 % mkdir OBJ_LIB
356 % cd OBJ_LIB
357 % perl ../configure -T <ターゲット略称> -f
358
359ここで,OBJ_LIBというディレクトリの場所と名称は,任意に決めてよい.これ
360以降の手順は,前節と同じである.
361
3623.5. アプリケーションとカーネルを別々に構築する方法
363
364前節で説明した方法では,アプリケーションとカーネルを同時に生成するため,
365オブジェクトファイルを置くディレクトリに非常に多くのファイルが作成され
366て,扱いにくくなる.そこで,カーネルを修正する頻度が低い場合には,カー
367ネルは事前に構築しておき,後でアプリケーションだけを構築する方法を用意
368している.以下では,サンプルプログラムを構築を例に,その手順について説
369明する.
370
371まず,カーネルを構築するディレクトリを作成し,コンフィギュレーションス
372クリプトを実行する.例えば,カーネルを構築するディレクトリを,SSPカー
373ネルのソースファイルを展開したディレクトリの下のKERNEL_LIBという名称の
374ディレクトリにする場合には,次のコマンドを実行する(ディレクトリの場所
375と名称は任意に決めてよい).
376
377 % mkdir KERNEL_LIB
378 % cd KERNEL_LIB
379 % perl ../configure -T <ターゲット略称> -f
380
381これにより,カーネルを構築するディレクトリに,Makefile,sample1.cfg,
382sample1.h,sample1.cが生成されるが,Makefile以外は実質的には使用しない.
383
384make dependで依存関係ファイル(Makefile.depend)を生成した後,make
385libkernel.aによりカーネルライブラリ(libkernel.a)が生成できる.
386
387 % make depend
388 % make libkernel.a
389
390次に,アプリケーションを構築するディレクトリを作成し,コンフィギュレー
391ションスクリプトを実行する.例えば,アプリケーションを構築するディレク
392トリを,SSPカーネルのソースファイルを展開したディレクトリの下のAPLとい
393う名称のディレクトリにする場合には,次のコマンドを実行する(ディレクト
394リの場所と名称は任意に決めてよい).
395
396 % cd ..
397 % mkdir APL
398 % cd APL
399 % perl ../configure -T <ターゲット略称> -L ../KERNEL_LIB
400
401ここで-Lオプションには,カーネルを構築したディレクトリのパスを指定する.
402
403最後に,make dependで依存関係ファイル(Makefile.depend)を生成した後,
404makeコマンドによりサンプルプログラムのロードモジュール(SSPまたは
405SSP.exe)が生成できる.
406
407 % make depend
408 % make
409
410この手順では,アプリケーション構築時にはカーネルの再構築が必要かチェッ
411クしないため,カーネルのソースコードを修正した場合には,カーネルを構築
412したディレクトリでmake libkernel.aを再実行する必要がある.
413
414以上では,カーネルとアプリケーションを別々のディレクトリで構築したが,
415-Lオプションにカレントディレクトリ(ただし,"."という記述では不可)を指
416定することで,カーネルとアプリケーションを同じディレクトリで別々に構築
417することもできる.具体的には,次の手順となる.
418
419 % mkdir OBJ
420 % cd OBJ
421 % perl ../configure -T <ターゲット略称> -L ../OBJ
422 % make depend
423 % make libkernel.a
424 % make cleankernel
425 % make
426
427ここで,make cleankernelは,カーネルライブラリを生成するための中間ファ
428イルを削除するものである.この手順では,make dependによりカーネルライ
429ブラリに関する依存関係を生成しないため,カーネルのソースコードを修正し
430た場合には,必ずmake cleankernel(または,make clean)してから,make
431libkernel.aする必要があるので注意すること.
432
433なお,make realcleanすると,make dependとmakeにより生成したファイルをす
434べて削除する.それに対して,make cleanでは,make dependにより生成した依
435存関係ファイルは削除しない.
436
437
4384.ディレクトリ構成・ファイル構成
439
4404.1. 配布パッケージのディレクトリ構成
441
442 include/ アプリケーション向けヘッダファイル
443 kernel/ カーネルソースファイル
444 syssvc/ システムサービスヘッダファイル,ソースファイル
445 target/ ターゲット依存部
446 arch/ ターゲット依存部の共通部分
447 gcc/ GCC開発環境依存部
448 pdic/ PDIC(デバイスドライバのOS非依存部分)
449 utils/ ユーティリティプログラム
450 sample/ サンプルプログラムとMakefile
451 doc/ ドキュメント
452 extension/ 拡張パッケージ
453
4544.2. ターゲット非依存部のファイル構成
455
456ターゲット非依存部(テストプログラムと拡張パッケージは除く)の各ファイ
457ルの概要は次の通り.
458
459 README.txt TOPPERS/SSPカーネルの簡単な紹介
460 configure コンフィギュレーションスクリプト(GNU開発環境用)
461 MANIFEST 個別パッケージのファイルリスト
462
463 include/
464 kernel.h SSPカーネルを使用するための定義
465 sil.h システムインタフェースレイヤを使用するための定義
466 t_stddef.h TOPPERS共通ヘッダファイル
467 itron.h ITRON仕様共通規定のデータ型・定数・マクロ
468
469 kernel/
470 Makefile.kernel カーネルのファイル構成の定義
471 kernel_impl.h カーネル実装用標準ヘッダファイル
472 kernel_int.h kernel_cfg.c用のヘッダファイル
473 kernel_rename.def カーネルの内部識別名のリネーム定義
474 kernel_rename.h カーネルの内部識別名のリネーム
475 kernel_unrename.h カーネルの内部識別名のリネーム解除
476 kernel_api.csv コンフィギュレータの静的APIテーブル
477 kernel_def.csv コンフィギュレータの値取得シンボルテーブル
478 kernel.tf コンフィギュレータのパス2のテンプレートファイル
479 kernel_check.tf コンフィギュレータのパス3のテンプレートファイル
480 allfunc.h すべての関数をコンパイルするための定義
481 check.h エラーチェック用マクロ
482 startup.c カーネルの初期化と終了処理
483 task.h タスク操作ルーチン関連の定義
484 task.c タスク操作ルーチン
485 task_manage.c タスク管理機能
486 sys_manage.c システム状態管理機能
487 interrupt.h 割込み管理機能関連の定義
488 interrupt.c 割込み管理機能
489 exception.h CPU例外管理機能関連の定義
490 exception.c CPU例外管理機能
491 queue.h キュー操作ライブラリを使用するための定義
492
493 syssvc/
494 banner.h カーネル起動メッセージの出力のための定義
495 banner.c カーネル起動メッセージの出力
496 banner.cfg カーネル起動メッセージの出力のコンフィギュレー
497 ションファイル
498 serial.h シリアルインタフェースドライバを使用するための定義
499 serial.c シリアルインタフェースドライバ
500 serial.cfg シリアルドライバのコンフィギュレーションファイル
501 syssvc_def.csv システムサービスのコンフィギュレーションの際に必要な
502 コンフィギュレータの値取得シンボルテーブル
503
504 arch/gcc/
505 MANIFEST 個別パッケージのファイルリスト
506 tool_stddef.h t_stddef.hの開発環境依存部(GCC用)
507
508 utils/
509 applyrename ファイルにリネームを適用
510 genrename リネームヘッダファイルの生成
511 makedep 依存関係リストの生成(GNU開発環境用)
512 makerelease リリースパッケージの生成
513
514 sample/
515 Makefile サンプルのMakefile(GNU開発環境用)
516 sample1.h サンプルプログラム(1)に関する定義
517 sample1.c サンプルプログラム(1)
518 sample1.cfg サンプルプログラム(1)のコンフィギュレーションファイル
519
520 extension/
521 alarm.h アラームハンドラ機能関連の定義
522 alarm.c アラームハンドラ機能
523 cyclic.h 周期ハンドラ機能関連の定義
524 cyclic.c 周期ハンドラ機能
525 dataqueue.h データキュー機能関連の定義
526 dataqueue.c データキュー機能
527 time_event.h タイムイベント管理関連の定義
528 eventflag.h イベントフラグ関連の定義
529 eventflag.c イベントフラグ機能
530 time_event.c タイムイベント管理
531 time_manage.c システム時刻管理機能
532 MANIFEST 拡張パッケージのファイルリスト
533
534 doc/
535 user.txt ユーザーズマニュアル
536 ssp_spec.txt TOPPERS/SSPカーネルの仕様概要
537 extension.txt 機能拡張・チューニングガイド
538 porting.txt ターゲット依存部 ポーティングガイド
539 configurator.txt コンフィギュレータ仕様
540 version.txt 変更履歴
541
542
5435.コンフィギュレーションスクリプトの使い方
544
545コンフィギュレーションスクリプト(configure)は,SSPカーネルおよびアプ
546リケーションプログラムを構築するために必要な基本的なコンフィギュレーショ
547ンを行うためのプログラムである.
548
549SSPカーネルを用いてアプリケーションを作成する場合には,まずオブジェクト
550ファイルを置くディレクトリを作成し,そのディレクトリでコンフィギュレー
551ションスクリプトを実行する.オブジェクトファイルを置くディレクトリの場
552所と名称は,任意に決めてよい.
553
554コンフィギュレーションスクリプトに対するオプションは次の通り.
555
556 -T <ターゲット略称>
557 ターゲットシステムの名称を,targetディレクトリの下に置かれてい
558 るターゲット依存部ディレクトリの名称で指定する(必須).
559
560 -A <アプリケーションプログラム名>
561 アプリケーションプログラムの名称を指定する.省略した場合には,
562 サンプルプログラム(sample1)となる.
563
564 -a <アプリケーションのディレクトリ名>
565 アプリケーションプログラムのソースファイル(システムコンフィギュ
566 レーションファイルを除く)を置いたディレクトリ名を指定する.省
567 略した場合には,オブジェクトファイルを置くディレクトリに置かれ
568 ていることを仮定する.システムコンフィギュレーションファイルは,
569 オブジェクトファイルを置くディレクトリに置くこと.
570
571 -U <オブジェクトファイル名>
572 アプリケーションプログラムのメインのオブジェクトファイル(-A
573 で指定したアプリケーションプログラム名に".o"を付加したもの)以
574 外に,リンクすべきオブジェクトファイルの名称を,".o"を付加した
575 形で指定する.""で囲むことによって,複数のファイルを指定するこ
576 とも可能である(-Uオプションを複数使ってはならない).
577
578 -L <カーネルライブラリのディレクトリ名>
579 事前に構築したカーネルライブラリ(libkernel.a)を用いて,アプリ
580 ケーションのみを構築する場合には,このオプションにカーネルライ
581 ブラリの置かれたディレクトリ名を指定する.このオプションの使用
582 例については,「3.5 アプリケーションとカーネルを別々に構築する
583 方法」の節を参照すること.
584
585 -f
586 カーネルを関数単位でコンパイルしライブラリ化する場合に,このオ
587 プションを指定する.このオプションの使用例については,「3.4 カー
588 ネルを関数単位でライブラリ化する方法」の節を参照すること.
589
590 -D <SSPカーネルのソースディレクトリ名>
591 SSPカーネルのソースファイルを置いたディレクトリ名を指定する.省
592 略した場合には,configureの置かれているディレクトリとなる.
593
594 -l <プログラミング言語>
595 アプリケーションプログラムのプログラミング言語を指定する.現時
596 点では,cとc++のみをサポートしている.
597
598 -t <テンプレートディレクトリ名>
599 Makefileやサンプルプログラムのテンプレートの置かれたディレクト
600 リ名を指定する.省略した場合には,SSPカーネルのソースファイルを
601 置いたディレクトリの下のsampleディレクトリとなる.
602
603 -m <テンプレートMakefile名>
604 Makefileのテンプレートとするファイル名を指定する.省略した場合
605 には,Makefileとなる.
606
607 -d <実行環境名>
608 ターゲットシステム上でのプログラムの実行環境(ないしは,デバッ
609 グ環境)の名称を指定する.このオプションを指定すると,実行環境
610 を指定するシンボル(TOPPERS_<デバッグ環境名>)がマクロ定義され
611 る.省略した場合には,実行環境を指定するシンボルはマクロ定義さ
612 れない.
613
614 -r
615 トレースログ記録のサンプルコードを有効にする場合に,このオプショ
616 ンを指定する.このオプションの使用例については,「11.5 トレース
617 ログ記録のサンプルコードの使用方法」の節を参照すること.
618
619 -p <perlのパス名>
620 perlのパス名を指定する.省略した場合には,/usr/local/binと
621 /usr/binを探索し,perlのパス名を決定する.
622
623 -g <コンフィギュレータのパス名>
624 コンフィギュレータ(cfg)のパス名を指定する.省略した場合には,
625 デフォルトのパス名(SSPカーネルのソースディレクトリの下の
626 cfg/cfg/cfg)となる.
627
628コンフィギュレーションスクリプトが行う処理は次の通りである.
629
630(1) Makefileの生成
631
632テンプレートディレクトリ(デフォルトでは,sample)から適切なMakefileを
633選択し,必要な箇所を書き換えて,Makefileを生成する.
634
635(2) サンプルプログラムの生成
636
637指定したアプリケーションプログラムがテンプレートディレクトリにある場合,
638適切なアプリケーションプログラムのソースファイルを選択し,必要な箇所を
639書き換えて,アプリケーションプログラムのソースファイル(例えば,
640sample1.h,sample1.c,sample1.cfg)を生成する.
641
642(3) コンフィギュレータが用意できているかのチェック
643
644コンフィギュレータ(cfg)の実行ファイルがあるかチェックし,ファイルがな
645い場合には,その旨を出力する.
646
647
6486.Makefileの修正方法
649
650前の章で説明したように,コンフィギュレーションスクリプトに与えるオプショ
651ン等からMakefileが生成されるが,コンフィギュレーションスクリプトで対応
652できない場合には,Makefileを直接修正する必要がある.ここでは,Makefile
653の中で,修正が必要となる可能性の高い箇所について説明する.
654
655なお,Makefileを修正した後にコンフィギュレーションスクリプトを再実行す
656ると,修正したMakefileが上書きされてしまうので注意すること(古いものが
657Makefile.bakに保存される).
658
6596.1. Makefileの変数定義
660
661(A) ターゲット略称
662
663TARGETには,ターゲットシステムの名称を,targetディレクトリの下に置かれ
664ているターゲット依存部ディレクトリの名称で指定する.この定義は,通常は,
665コンフィギュレーションスクリプトに対する-Tオプションにより行う.
666
667(B) オブジェクトファイルの拡張子
668
669Cygwin環境でコンパイルする時には,OBJEXTを"exe"に定義する必要がある.こ
670れは,Cygwin環境では,ロードモジュールのファイル名に拡張子".exe"が付加
671されるのに対応するためのものである.Cygwin環境であることを判定できれば,
672コンフィギュレーションスクリプトがこの定義を行う.
673
674(C) 実行環境(ターゲット依存)
675
676ターゲットによっては,実行環境に対応してターゲット依存部のコードを差し
677換える場合がある.これを可能にするために,実行環境の名称をDBGENVに定義
678している.この定義は,通常は,コンフィギュレーションスクリプトに対す
679る-Dオプションにより行う.どのターゲットがどの実行環境に対応しているか
680は,ターゲット依存部のユーザーズマニュアルを参照すること.
681
682(D) カーネルライブラリのディレクトリ名
683
684KERNEL_LIBには,カーネルライブラリの置かれたディレクトリ名を定義する.
685この定義は,通常は,コンフィギュレーションスクリプトに対する-Lオプショ
686ンにより行う.
687
688(E) カーネルを関数単位でコンパイルするかどうか
689
690KERNEL_FUNCOBJSは,カーネルを関数単位でコンパイルする場合にはtrueに定義
691し,ファイル単位でコンパイルする場合には未定義とする.この定義は,通常
692は,コンフィギュレーションスクリプトに対する-fオプションにより行う.
693
694(F) 共通コンパイルオプション
695
696すべてのプログラムに共通するコンパイルオプションの追加が必要な場合には,
697下の変数の定義を変更する.そのコンパイルオプションが,特定のターゲット
698で常に必要な場合には,ターゲット依存の定義を入れたMakefile.target等を修
699正すべきである.
700
701 CDEFS コンパイラに対する-Dオプションを記述する.
702 INCLUDES コンパイラに対する-Iオプションを記述する.
703 COPTS コンパイラに対するその他のオプションを記述する.
704 LDFLAGS リンカに対するオプションを記述する.
705 LIBS ライブラリリンクのためのオプションを記述する.
706
707追加の可能性のあるコンパイルオプションについては,「6.2 コンパイルオプ
708ション」の節を参照のこと.
709
710(G) アプリケーションプログラム名
711
712APPLNAMEには,アプリケーションプログラム名を定義する.システムコンフィ
713ギュレーションファイル名は,APPLNAMEに定義した名前に拡張子".cfg"を付加
714した名前とする.また,アプリケーションのメインファイルは,APPLNAMEに定
715義した名前に拡張子".c"を付加した名前とする.この定義は,通常は,コンフィ
716ギュレーションスクリプトに対する-Aオプションにより行う.
717
718(H) アプリケーションのディレクトリ名
719
720アプリケーションのソースファイルを,オブジェクトファイルを置くのとは別
721のディレクトリに置く場合には,APPLDIRにそのディレクトリ名を定義する.こ
722の定義は,通常は,コンフィギュレーションスクリプトに対する-aオプション
723により行う.アプリケーションのソースファイルを置くディレクトリが複数あ
724る場合には,APPL_DIRの定義を変更することで対応する.
725
726(I) アプリケーションのプログラムファイル名
727
728アプリケーションが複数のソースファイルで構成される場合には,そのオブジェ
729クトファイル名を,APPL_ASMOBJS,APPL_COBJS,APPL_CXXOBJSに列挙する.
730
731(J) アプリケーションのコンパイルオプション
732
733アプリケーションのコンパイルに必要なコンパイルオプションや,アプリケー
734ションがライブラリを必要とする場合には,APPL_CFLAGSおよびAPPL_LIBSに定
735義する.
736
737(K) ロードモジュールのファイル名
738
739標準のロードモジュールのファイル名をOBJNAMEに定義する.デフォルトはSSP
740である.
741
742(L) ターゲットファイルの定義
743
744ターゲット"all"の依存ファイルとして,ロードモジュールの形式を指定する.
745具体的には,ELF形式の時は$(OBJFILE),バイナリ形式の時は$(OBJNAME).bin,
746モトローラ S形式の時は$(OBJNAME).srecを指定する.$(OBJFILE)は,Cygwin
747環境でOBJEXTを"exe"に定義した時には$(OBJNAME).exe,そうでない場合には
748$(OBJNAME)となる.
749
750(M) makedepのオプションの定義
751
752Cygwin環境でルートディレクトリが"cygdrive"でない場合には,makedepの-Rオ
753プションでルートディレクトリ名を与える必要がある.makedepのオプションは,
754次の例のように,MAKEDEP_OPTSに定義する.
755
756MAKEDEP_OPTS = -R cygdrive
757
7586.2. コンパイルオプション
759
760SSPカーネルのコード中には,assertマクロが使われている.assertマクロは,
761NDEBUGを定義することで,オブジェクトコード中から消すことができる.カー
762ネルのデバッグが終了すれば,-DNDEBUGを指定してコンパイルした方が効率が
763よくなる.
764
765ターゲット依存部において,コンパイルオプションに-Werror(警告をエラー扱
766いする)を指定している場合がある.そのようなターゲットにおいて,アプリ
767ケーションで警告が避けられない場合には,ターゲット依存部を修正してコン
768パイルオプションを削除する必要がある.
769
770
7717.コンフィギュレータの使い方
772
773コンフィギュレータ(cfg)は,TOPPERS新世代カーネル統合仕様書の2.12.5節
774の記述の通り,3つのパスで構成される.
775
776コンフィギュレータは,システムコンフィギュレーションファイル名をパラメー
777タに取り,以下のオプションを持つ(重要なもののみ).
778
779 --help
780 オプションのリストと説明を表示する.
781
782 -v[--version]
783 コンフィギュレータのバージョンを表示する.
784
785 -k[--kernel]<カーネル名>
786 カーネルの名称を指定する.デフォルトはSSP.
787
788 -p[--pass]<パス番号>
789 パス番号を指定する.1〜3のいずれか.
790
791 -I[--include-path]<インクルードパス名>
792 INCLUDEディレクティブにおいて,インクルードするコンフィギュレー
793 ションファイルを探すパス名を指定する.
794
795 -T[--template-file]<テンプレートファイル名>
796 テンプレートファイルの名称を指定する.パス2とパス3で有効.
797
798 --api-table <静的APIテーブルファイル名>
799 静的APIテーブルのファイル名を指定する.
800
801 --cfg1-def-table <値取得シンボルテーブルファイル名>
802 値取得シンボルテーブルのファイル名を指定する.
803
804 -r[--rom-image]<ロードモジュール名>
805 ロードモジュールをSレコードフォーマットの形に変換したファイルの
806 名称を指定する.パス3でのみ有効.
807
808 -s [--symbol-table] <シンボルファイル名>
809 ロードモジュール中の各シンボルとアドレスの対応表を含むシンボル
810 ファイルの名称を指定する.パス3でのみ有効.
811
812 --id-output-file <ID番号出力ファイル名>
813 SSPカーネルでは使用してはならない。詳細はconfigurator.txtの
814 「○カーネル構成・初期化ファイル(kernel_cfg.c)」の(5)を参照のこと。
815
816 --id-input-file <ID番号入力ファイル名>
817 SSPカーネルでは使用してはならない。詳細はconfigurator.txtの
818 「○カーネル構成・初期化ファイル(kernel_cfg.c)」の(5)を参照のこと。
819
820 --external-id
821 オブジェクトのID番号を保持する変数の定義を生成する.パス2でのみ
822 有効.
823
824 -M[--print-dependencies]<ターゲットシンボル>
825 システムコンフィギュレーションファイルの依存関係を出力する.
826 Makefile中の依存関係を生成する際に用いる.
827
828コンフィギュレータの詳細仕様については,別途PDFファイルの形で配布してい
829る「TOPPERS新世代カーネル用コンフィギュレータ仕様」を参照すること.
830
831
8328.システムサービス
833
834
8358.1. シリアルインタフェースドライバ
836
837シリアルインタフェースドライバは,シリアルポートを扱うためのドライバで
838ある.
839
840シリアルインタフェースドライバは,システムコンフィギュレーションファイ
841ルでserial.cfgをインクルードすることで,システムに組み込むことができる.
842シリアルインタフェースドライバを呼び出すソースファイルでは,serial.hを
843インクルードする.
844
8458.1.1. シリアルインタフェースドライバのサービスコール
846
847シリアルインタフェースドライバを呼び出すサービスコールの仕様は次の通り
848である.この中で,シリアルポートのID番号(portid)の解釈はターゲット依
849存となる.
850
851これらのサービスコールは,非タスクコンテキストから呼び出すことはできな
852い.また,serial_rea_datとserial_wri_datは,ディスパッチ保留状態で呼び
853出すことはできない.いずれも,呼び出した場合にはE_CTXエラーとなる.
854
855(1) ER serial_opn_por(ID portid)
856
857portidで指定されたシリアルポートをオープンし,受信/送信が可能な状態に
858する.
859
860(2) ER serial_cls_por(ID portid)
861
862portidで指定されたシリアルポートをクローズする.
863
864(3) ER_UINT serial_rea_dat(ID portid, char *buf, uint_t len)
865
866portidで指定されたシリアルポートから,lenバイトの文字列を受信し,bufか
867らの領域に入れる.シリアルポートの受信バッファに格納されているバイト数が
868len バイトより少ない場合,取得可能なデータをbufに格納したら即座にリターン
869する.受信した文字数またはエラーコードを返す.
870
871(4) ER_UINT serial_wri_dat(ID portid, const char *buf, uint_t len)
872
873portidで指定されたシリアルポートに,bufからのlenバイトの文字列を送信す
874る.送信中にシリアルポートの送信バッファがフルになった場合,その時点で
875即座にリターンする.送信した文字数またはエラーコードを返す.
876
877(5) ER serial_ctl_por(ID portid, uint_t ioctl)
878
879portidで指定されたシリアルポートの制御情報を,ioctlで示される値に設定す
880る.
881
882ioctlには,以下の制御情報を表す定数を,ビット毎に論理和をとったものを
883指定する.
884
885 IOCTL_ECHO(エコーバックモード)
886 このビットを設定すると,シリアルインタフェースドライバがエコー
887 バックを行う.具体的には,バッファから文字を取り出す度に,その
888 文字を書き出す.
889
890 IOCTL_CRLF(改行モード)
891 LF(line feed)を書き出すと,CR(carriage return)+LFに変換し
892 て書き出す.
893
894
895なお,オープン直後のデフォルトの設定値は(IOCTL_ECHO | IOCTL_CRLF)である.
896
897
8988.1.2. シリアルインタフェースドライバのその他のサービス
899
900シリアルインタフェースドライバは,前記のサービスコールに加えて,初期化
901処理と未送信文字の取出し処理を持つ.初期化処理は,カーネルに初期化ルー
902チンとして登録する.また,ターゲット依存で,初期化処理,終了処理,割込
903みサービスルーチンを持つ.これらの登録処理はserial.cfgに含まれる.
904
905(1) void serial_initialize(intptr_t exinf)
906
907シリアルインタフェースドライバを初期化する.カーネルに初期化ルーチンと
908して登録する.exinfは無視する.
909
910(2) bool_t serial_get_chr(ID portid, char *p_c)
911
912portidで指定されたシリアルポートの送信バッファ中の文字を,p_cの指す番地
913に取り出し,trueを返す関数.文字がなかった時には,falseを返す.終了処理
914ルーチン中で呼び出すことを想定している.
915
916
9178.2. カーネル起動メッセージの出力
918
919カーネル起動メッセージの出力は,カーネルの起動時に,カーネルの名称やバー
920ジョン番号,著作権表示などを出力するための機能である.
921
922カーネル起動メッセージの出力は,システムコンフィギュレーションファイル
923でbanner.cfgをインクルードすることで,システムに組み込むことができる.
924
925カーネル起動メッセージの出力は,次の関数で構成される.
926
927(1) void print_banner(intptr_t exinf)
928
929システムログ機能を用いて,カーネル起動メッセージを出力する.banner.cfg
930によって,カーネルに初期化ルーチンとして登録される.exinfは無視される.
931
932
9339.サポートライブラリ
934
935サポートライブラリは,アプリケーションやシステムサービスを作成するため
936に利用できるライブラリ関数群である.
937
938
9399.1. キュー操作ライブラリ関数
940
941キュー操作ライブラリは,キューヘッダを含むリング構造のダブルリンクキュー
942を扱うライブラリである.キューヘッダの次エントリはキューの先頭のエント
943リ,前エントリはキューの末尾のエントリとする.また,キューの先頭のエン
944トリの前エントリと,キューの末尾のエントリの次エントリは,キューヘッダ
945とする.空のキューは,次エントリ,前エントリとも自分自身を指すキューヘッ
946ダであらわす.
947
948キュー操作ライブラリ関数を用いる場合には,queue.hをインクルードする.
949
950キューヘッダとエントリのためのデータ構造として,QUEUE構造体を用いる.
951QUEUE構造体の定義は次の通り.QUEUE型の変数は配列として定義することを前提と
952している.
953
954 typedef struct
955 {
956 QUEIDX next;
957 QUEIDX prev;
958 } QUEUE;
959
960QUEIDXはQUEUE型の配列のインデックス値を表すデータ型である.
961
962typedef uint8_t QUEIDX;
963
964
965キュー操作のために用意している関数は次の通り.
966
967(1) queue_initialize(QUEUE *queue , QUEIDX queue_null)
968
969キューを初期化する.queueにはキューヘッダを,queue_nullには
970無効なキューヘッダを示すインデックス値を指定する.
971
972(2) queue_insert_prev(QUEUE *top , QUEIDX queue , QUEIDX entry)
973
974queueで指定するエントリの前に,entryで指定するエントリを挿入する.
975topはqueue,entryを含むQUEUE型配列の先頭アドレスである.
976queueにキューヘッダを指定した場合には,キューの末尾にp_entryで指定す
977るエントリを挿入することになる.
978
979(3) queue_delete_next(QUEUE *top , QUEIDX queue)
980
981queueで指定するエントリの次のエントリを削除し,削除したエントリの
982キュー配列中のインデックスを返す.
983topはqueue,entryを含むQUEUE型配列の先頭アドレスである.
984
985(6) queue_empty(QUEUE *queue , QUEIDX queue_null)
986
987キューが空の場合にはtrue,そうでない場合にはfalseを返す.queueには
988キューヘッダを,queue_nullには無効なキューヘッダを示すインデックス値を
989指定する.
990
991
99210.使用上の注意とヒント
993
99410.1. タイマドライバの組込み
995
996タイマドライバをシステムに組み込むために,システムコンフィギュレーショ
997ンファイルの先頭でtarget_timer.cfgをインクルードする必要がある.
998
99910.2. assertマクロの処理
1000
1001SSPカーネルのコード中には,assertマクロが使われている.assertマクロの定
1002義はt_stddef.hに含まれ,assertが失敗した場合の最後の処理(通常は,プロ
1003グラムを停止させる処理)は,ターゲット依存部のTOPPERS_assert_abortで決
1004定される.
1005
1006assertが失敗した場合,システム開発中はデバッガに落とすのが望ましいが,
1007システム稼働時の対処法は,システムに対する要件に依存する.そこで,ター
1008ゲット依存部のTOPPERS_assert_abortを,システム要件に合致した適切な処理
1009に置き換える必要がある.システム要件によっては,NDEBUGを定義してassert
1010マクロの処理をオブジェクトコード中から消す(「6.2 コンパイルオプション」
1011の節を参照)方法も考えられる.
1012
1013
101410.3. オブジェクトIDの管理
1015
1016TOPPERS/SSPカーネルでは,オブジェクトのID番号を,コンフィギュレータが割
1017り付ける方法が基本となっている.
1018
1019アプリケーションプログラム中でオブジェクトのID番号を参照する場合には,
1020次の2つの方法が考えられる.
1021
1022(1) オブジェクト識別名を用いる
1023
1024オブジェクト生成のための静的API(CRE_YYY)の第1パラメータに記述したオブ
1025ジェクト識別名を,アプリケーションプログラム中でも用いる方法.
1026
1027コンフィギュレータは,オブジェクト識別名を,割り付けたID番号にマクロ定
1028義するC言語プリプロセッサのディレクティブ(#define)をkernel_cfg.hに生
1029成するため,アプリケーションプログラムからkernel_cfg.hをインクルードす
1030る必要がある.
1031
1032この方法は,オブジェクトコード中にID番号が直接埋め込まれるために実行効
1033率が良い一方で,コンフィギュレータが実行されてkernel_cfg.hが書き換わる
1034度に,アプリケーションプログラムの再コンパイルが必要になるという欠点が
1035ある.そのため,アプリケーションプログラムを構成するファイルの中で,一
1036部のファイルのみでオブジェクト識別名を参照する構成にするといった工夫を
1037することが望ましい.
1038
1039(2) オブジェクトのID番号を保持する変数を用いる
1040
1041オブジェクトのID番号を保持するconst属性を付加した変数を用意し,アプリケー
1042ションプログラム中では,その変数を用いる方法.
1043
1044例えば,TASK1というオブジェクト識別名のタスクに対して,次のような変数を
1045用意する.
1046
1047const ID TASK1_id = TASK1;
1048
1049アプリケーションプログラム中では,この変数(TASK1_id)を用いることで,
1050コンフィギュレータが実行されてkernel_cfg.hが書き換わる度に,上記の変数
1051定義を含んだファイルのみを再コンパイルすればよいことになる.
1052
1053この方法は,アプリケーションプログラムの再コンパイルを最小限にできる利
1054点がある一方で,変数のためのメモリ領域が必要になることに加えて,(プロ
1055セッサによっては)変数アクセスのためのオーバヘッドが生じるという欠点が
1056ある.また,定数ではなく変数であることから,他の変数の初期化には使えな
1057いという制限がある.
1058
1059なお,TOPPERS/SSPカーネルのコンフィギュレータは,--external-idオプショ
1060ンを付加することにより,上記の変数定義をkernel_cfg.c中に生成する機能を
1061持っているので,すべてのオブジェクトIDをこの方法で参照する場合には,こ
1062の機能を用いることを推奨する.
1063
1064コンフィギュレータによるID番号割付けのもう1つの課題として,コンフィギュ
1065レーションファイルの修正により,オブジェクトIDの割付けが変わってしまう
1066ことが挙げられる.これは,アプリケーションソフトウェアの設計仕様書にID
1067番号が記載されている場合や,デバッグ作業においてID番号を即値として表示
1068や確認ができない場合に,作業効率を低下させる可能性が考えられる.
1069
1070この問題に対応するために,TOPPERS新世代カーネル用コンフィギュレータには,
1071ID番号の割付け結果をファイルに書き出す機能(--id-output-fileオプション)
1072と,ID番号の割付けをファイルから取り込む機能(--id-input-fileオプション)
1073とが用意されている.ただしSSPカーネルの場合,現時点では動作上の問題があり
1074使用することができない.詳細は configurator.txt の「○カーネル構成・初期
1075化ファイル(kernel_cfg.c)」の (5) を参照のこと.
1076
107710.4. カーネルの内部シンボルのリネーム
1078
1079SSPカーネルでは,モジュール内部の名称が他のモジュール内部の名称と衝突す
1080ることを避けるために,カーネルの内部シンボルは,C言語レベルで,先頭が
1081"_kernel_"または"_KERNEL_"である名称としている.
1082
1083これをソースコードの可読性と両立させるために,SSPカーネルでは,ソースコー
1084ドは自然な名前を用いて記述し,C言語プリプロセッサのマクロ定義(#define)
1085を用いて,それを"_kernel_"または"_KERNEL_"で始まる名前(自然な名前が
1086yyyyyの場合には,_kernel_yyyyy)にリネームする仕組みを用いている.
1087
1088具体的には,関連するディレクトリにxxx_rename.defを置き,そこからリネー
1089ムのためのヘッダファイル(xxx_rename.hおよびxxx_unrename.h)を生成する
1090ツール(utils/genrename)を用意している.
1091
1092この仕組みは,ソースコードの可読性向上に役立つ一方で,弊害もある.例え
1093ば,多くのデバッガで,ソースコード中の名称とオブジェクトコード中の名称
1094が異なるために,ソースコード中の変数名を指定して値を読んだり,関数名を
1095指定してブレークポイントを置くといったことができない.
1096
1097この状況に対応するために,SSPカーネルでは,ソースコード中の該当する名称
1098をリネームするためのユーティリティ(utils/applyrename)を用意している.
1099applyrenameユーティリティに,リネーム定義ファイル(xxx_rename.def)のプ
1100リフィックス(xxxの部分)と,リネームしたいファイルリストを与えると,リ
1101ネーム処理を行なう.例えば,kernelディレクトリのすべてのファイルに対し
1102て,カーネルの内部シンボルをリネームするには,次のコマンドを実行すれば
1103よい.
1104
1105 % cd kernel
1106 % ../utils/applyrename kernel *
1107
1108また,ターゲット依存部のディレクトリのすべてのファイルに対して,カーネ
1109ルの内部シンボルをリネームするには,次のようなコマンドを実行すればよい.
1110
1111 % cd target/cq_starm_gcc/
1112 % ../../utils/applyrename target *
1113 % ../../utils/applyrename ../../kernel/kernel *
1114
111510.5. システムの起動時の初期化処理
1116
1117システムの起動時にアプリケーションで必要となる初期化処理を行うための機
1118能として初期化ルーチンが用意されているが,初期化ルーチンが実行されるよ
1119りも早いタイミングで実行することが必要な初期化処理がある場合がある.
1120
1121このような場合に用いるために,標準的なスタートアップモジュールから,ター
1122ゲットシステム依存の初期化フック(hardware_init_hook)を呼び出すことと
1123している.hardware_init_hookは,カーネルのターゲット依存部で用意されて
1124いるのが標準であるが,これをアプリケーションで用意したものに置き換え,
1125その中でアプリケーションで必要となる初期化処理を行うことができる.
1126
1127ただし,hardware_init_hookの作成する場合には,bssセクションとdataセクショ
1128ンが初期化されていないことや,ライブラリが初期化されていないこと,C言語
1129で記述できるとは限らないことなどに注意が必要である.作成にあたっては,
1130「ターゲット依存部 ポーティングガイド」を参照すること.
1131
1132カーネルのスタートアップモジュールがhardware_init_hookを呼び出すように
1133実装されていない場合には,スタートアップモジュールをアプリケーションで
1134用意したものに置き換える方法を推奨する.
1135
113611.参考情報
1137
113811.1. 利用条件と利用報告
1139
1140SSPカーネルの利用条件は,各ファイルの先頭に表示されている.著作権は,各
1141ファイルの先頭に表示されている著作権者が保有している.
1142
1143利用条件の(3)の(b)において,利用の形態をTOPPERSプロジェクトに報告する方
1144法としては,SSPカーネルを利用した製品の名称と応用分野,製品化した会社名
1145と業種等の情報を,以下のURLのページから報告するものとする.
1146
1147 http://www.toppers.jp/report.html
1148
1149またその際に,SSPカーネルを使用してのコメントやご意見もいただけると幸い
1150である.
1151
115211.2. 保証・適用性・サポート
1153
1154SSPカーネルは無保証で提供されているものである.開発者およびTOPPERSプロ
1155ジェクトは,SSPカーネルに関して,特定の使用目的に対する適合性も含めて,
1156いかなる保証も行わない.また,SSPカーネルの利用により直接的または間接的
1157に生じたいかなる損害に関しても,その責任を負わない.
1158
1159開発者およびTOPPERSプロジェクトは,SSPカーネルに関するサポートの約束は
1160していない.SSPカーネルに関して質問がある場合は,後述のTOPPERSユーザー
1161ズメーリングリストを利用していただけると幸いである.確実なサポートが必
1162要な場合には,有償でサポートサービスを提供している会社に相談されたい.
1163
116411.3. バグレポート
1165
1166SSPカーネルにバグや問題点を発見された場合には,後述のTOPPERSユーザーズ
1167メーリングリストに報告して欲しい.
1168
1169メーリングリストにバグや問題点などを報告する場合には,必要に応じて次の
1170情報を知らせて欲しい.
1171
1172 使用しているカーネルに関する情報
1173 ・ターゲット非依存部のバージョン
1174 ・使用しているターゲット依存部とそのバージョン
1175 ・TOPPERSプロジェクトからのリリースに対する改造箇所(あれば)
1176
1177 ターゲットシステムに関する情報
1178 ・ターゲットプロセッサの種類
1179 ・ターゲットボード等の種類
1180
1181 ホストに関する情報
1182 ・OSのバージョン(サービスパックの適用状況も)
1183 ・コンパイラなどの開発環境のバージョン(Cygwinのバージョンも)
1184
118511.4. ウェブサイト
1186
1187TOPPERSプロジェクトのウェブサイトは,以下のURLにある.
1188
1189 http://www.toppers.jp/
1190
1191TOPPERSプロジェクトやSSPカーネルに関する最新情報は,このウェブサイトか
1192ら得ることができる.また,SSPカーネルの最新版は,このウェブサイトからダ
1193ウンロードすることができる.
1194
119511.5. TOPPERSユーザーズメーリングリスト
1196
1197SSPカーネルを含むTOPPERSプロジェクトの開発成果物のユーザに対する情報提
1198供およびユーザ相互間の情報交換を容易にするために,TOPPERSユーザーズメー
1199リングリスト(users@toppers.jp)を用意している.
1200
1201このメーリングリストには,誰でも自由に登録し,メールを送付することがで
1202きる(登録者以外はメールを送付できない).また,送付されたメールは,誰
1203でも自由にウェブサイトで読むことができる.
1204
1205メーリングリストへの登録方法については,以下のURLのページに説明がある.
1206
1207 http://www.toppers.jp/community.html
1208
120911.6. TOPPERSプロジェクトのメンバ向けのサービス
1210
1211TOPPERSプロジェクトのメンバに対しては,上記に加えて,SSPカーネルに関連
1212して次のサービスを用意している.
1213
1214(1) TOPPERS開発者メーリングリスト
1215
1216TOPPERSプロジェクトのメンバは,SSPカーネルに関する質問,バグや問題点な
1217どの報告に,TOPPERS開発者メーリングリスト(dev@toppers.jp)を利用するこ
1218とができる.
1219
1220(2) SSPカーネルの開発支援サイト
1221
1222SSPカーネルの開発支援のためのTRAC(バグトラッキングシステム)が,以下の
1223URLにある(TRACへのアクセスには,会員パスワードが必要である).
1224
1225 http://dev.toppers.jp/trac/ssp_core
1226
1227TOPPERSプロジェクトのメンバは,このサイトから,ウェブインタフェースおよ
1228びsubversionサーバにより,SSPカーネルの開発中のバージョンを得ることがで
1229きる.また,バグトラッキングデータベースにアクセスすることができ,過去
1230のバグ履歴へのアクセスや,バグの登録をすることができる.
1231
123211.7. TOPPERSプロジェクトへの参加
1233
1234TOPPERSプロジェクトでは,何からの形でプロジェクトに貢献していただける方,
1235プロジェクトで開発したソフトウェアをお使いの方,プロジェクトに興味をお
1236持ちの方の参加を求めている.TOPPERSプロジェクトへの参加方法については,
1237以下のページに説明がある.
1238
1239 http://www.toppers.jp/joinus.html
1240
1241
124212.リファレンス
1243
124412.1. サービスコール一覧
1245
1246(1) タスク管理機能
1247
1248 ER ercd = act_tsk(ID tskid)
1249 ER ercd = iact_tsk(ID tskid)
1250
1251(2) システム状態管理機能
1252
1253 ER ercd = loc_cpu(void)
1254 ER ercd = iloc_cpu(void)
1255 ER ercd = unl_cpu(void)
1256 ER ercd = iunl_cpu(void)
1257 ER ercd = dis_dsp(void)
1258 ER ercd = ena_dsp(void)
1259 bool_t state = sns_ctx(void)
1260 bool_t state = sns_loc(void)
1261 bool_t state = sns_dsp(void)
1262 bool_t state = sns_dpn(void)
1263 bool_t state = sns_ker(void)
1264 ER ercd = ext_ker(void)
1265
1266(3) 割込み管理機能
1267
1268 ER ercd = dis_int(INTNO intno)
1269 ER ercd = ena_int(INTNO intno)
1270
127112.2. 静的API一覧
1272
1273(1) タスク管理機能
1274
1275 CRE_TSK(ID tskid, { ATR tskatr, intptr_t exinf, TASK task,
1276 PRI itskpri, SIZE stksz, STK_T *stk })
1277 DEF_EPR(ID tskid,{ PRI etskpri })
1278
1279(2) 割込み管理機能
1280
1281 ATT_ISR({ ATR isratr, intptr_t exinf, INTNO intno, ISR isr, PRI isrpri })
1282 DEF_INH(INHNO inhno, { ATR inhatr, INTHDR inthdr })
1283 CFG_INT(INTNO intno, { ATR intatr, PRI intpri })
1284
1285(3) CPU例外管理機能
1286
1287 DEF_EXC(EXCNO excno, { ATR excatr, EXCHDR exchdr })
1288
1289(4) システム構成管理機能
1290
1291 DEF_ICS({ SIZE istksz, STK_T *istk })
1292 DEF_STK({SIZE stksz, STK_T *stk})
1293 ATT_INI({ ATR iniatr, intptr_t exinf, INIRTN inirtn })
1294 ATT_TER({ ATR teratr, intptr_t exinf, TERRTN terrtn })
1295
129612.3. バージョン履歴
1297
1298 2011年 3月31日 Release 1.0.0 早期リリース
1299 2011年11月16日 Release 1.1.0 最初の一般リリース
1300 2011年 3月23日 Release 1.1.1 軽微な修正とバグフィックス
1301 2013年 4月23日 Release 1.2.0 タスクの起動要求キューイング機能の追加
1302 DEF_ICSの仕様変更
1303 DEF_STKの追加
1304 同期・通信機能拡張パッケージの追加
1305 2014年 3月 6日 Release 1.2.1 バグフィックス
1306 2015年 5月19日 Release 1.3.0
1307
1308以上
Note: See TracBrowser for help on using the repository browser.