source: asp3_wo_tecs/trunk/doc/user.txt@ 302

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

TECSレスのASP3の開発のため以下のtrunkからコピー
http://dev.toppers.jp/svn/asp3/branches/WO_TECS-3.C.0

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