OSDN Git Service

マルチプロジェクト型にレポジトリを変更するために移動した
[toppersasp4lpc/asp.git] / asp / doc / asp_spec.txt
1
2                 TOPPERS/ASPカーネルの仕様概要
3
4                 対応バージョン: Release 1.6
5                 最終更新: 2010年7月25日
6
7 このドキュメントは,TOPPERS/ASPカーネルの仕様概要について説明したもので
8 ある.μITRON4.0仕様のスタンダードプロファイルに対する拡張および変更箇
9 所を中心に説明する.
10
11 ----------------------------------------------------------------------
12  TOPPERS/ASP Kernel
13      Toyohashi Open Platform for Embedded Real-Time Systems/
14      Advanced Standard Profile Kernel
15
16  Copyright (C) 2005-2010 by Embedded and Real-Time Systems Laboratory
17              Graduate School of Information Science, Nagoya Univ., 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  $Id: asp_spec.txt 1862 2010-07-25 11:49:51Z ertl-hiro $
49 ----------------------------------------------------------------------
50
51 ○前提となる文書
52
53 [1] トロン協会: μITRON4.0仕様, Ver.4.02.00, 2004年.
54
55 [2] トロン協会: μITRON4.0仕様 保護機能拡張(μITRON4.0/PX仕様),
56         Ver.1.00.00, 2002年.
57
58 [3] TOPPERSプロジェクト: TOPPERS/JSPカーネル ユーザズマニュアル
59         Release 1.4.3対応, 最終更新: 2007年4月23日.
60
61 [4] TOPPERSプロジェクト: TOPPERS標準割込み処理モデル, 最終更新: 2008年
62         4月11日.
63
64 ○仕様の概略
65
66 TOPPERS/ASPカーネルの仕様は,μITRON4.0仕様のスタンダードプロファイルを
67 ベースに,次のような拡張・改良を加えたものである.
68
69 ・割込み処理機能については,TOPPERS標準割込み処理モデルに準拠させる.
70 ・μITRON4.0仕様のスタンダードプロファイル外の機能の一部を導入する.
71 ・一部の仕様について,μITRON4.0仕様に対して変更を加える.
72 ・JSPカーネルにおける独自の拡張機能を一部変更して実装する.
73 ・ASPカーネルにおける独自の拡張機能を新たに実装する.
74 ・システムコンフィギュレーション処理を全面的に見直す.
75 ・拡張機能を実装するための拡張パッケージをサポートする.
76 ・TOPPERS組込みコンポーネントシステム(TECS)を導入する.
77
78 そのためASPカーネルは,μITRON4.0仕様に完全に準拠しているわけではなく,
79 JSPカーネルの上位互換にもなっていない.
80
81 μITRON4.0仕様では,実装独自に用意する静的APIおよびサービスコールの名称
82 には,先頭にそれぞれ"V"および"v"の文字を付加するものとしているが,ASPカー
83 ネルではこの規定は採用しない.
84
85 以下では,μITRON4.0仕様のスタンダードプロファイルに対する拡張および変
86 更箇所について説明する.
87
88 ○スタンダードプロファイル外の機能の一部導入
89
90 μITRON4.0仕様には規定されているが,スタンダードプロファイルに含まれな
91 い(または,含まれるとは限らない)機能として,次の機能を実装する.
92
93 (1) イベントフラグの複数タスク待ち
94
95 イベントフラグに対する複数タスク待ちの機能(TA_WMUL属性のイベントフラグ)
96 を実装する.
97
98 これにより,イベントフラグのセット(set_flg,iset_flg)で複数のタスクが
99 起床される可能性が生じる.多くのタスクを同時に待ち解除した場合,カーネ
100 ル内での割込み禁止時間が長くなるため,使用にあたっては注意が必要である.
101
102 (2) アラームハンドラ
103
104 アラームハンドラの機能を実装する.アラームハンドラ機能のために実装する
105 静的APIおよびサービスコールは次の通りである.
106
107         CRE_ALM         アラームハンドラの生成(静的API)
108         sta_alm         アラームハンドラの動作開始
109         ista_alm        アラームハンドラの動作開始(非タスクコンテキスト用)
110         stp_alm         アラームハンドラの動作停止
111         istp_alm        アラームハンドラの動作停止(非タスクコンテキスト用)
112
113 (3) 割込みサービスルーチン
114
115 スタンダードプロファイルでは,割込みハンドラと割込みサービスルーチンの
116 いずれかをサポートすればよいことになっている.JSPカーネルでは割込みハン
117 ドラのみを実装しているが,ASPカーネルではその両者を実装する.
118
119 割込みサービスルーチンの仕様については,TOPPERS標準割込み処理モデルの規
120 定に準拠する.割込みサービスルーチンを追加するサービスコールとして,次
121 の静的APIを実装する.この静的APIの仕様については,TOPPERS標準割込み処理
122 モデルにおいて,μITRON4.0仕様に対して拡張を加えている.
123
124         ATT_ISR         割込みサービスルーチンの追加(静的API)
125
126 (4) 割込み管理機能
127
128 スタンダードプロファイルに含まれない割込み管理機能として,次のサービス
129 コールを実装する.JSPカーネルでは,これらのサービスコールを実装するかど
130 うかはターゲット依存となっているが,ASPカーネルでは,TOPPERS標準割込み
131 処理モデルの規定に準拠して,ターゲット非依存に実装する.
132
133         dis_int         割込みの禁止
134         ena_int         割込みの許可
135         chg_ipm         割込み優先度マスクの変更
136         get_ipm         割込み優先度マスクの参照
137
138 (5) オブジェクトの状態参照機能
139
140 主にデバッグ時向けの機能として,オブジェクトの状態参照機能を実装する.
141 具体的には,次のサービスコールを実装する.
142
143         ref_tsk         タスクの状態参照
144         ref_tex         タスク例外処理の状態参照
145         ref_sem         セマフォの状態参照
146         ref_flg         イベントフラグの状態参照
147         ref_dtq         データキューの状態参照
148         ref_mbx         メールボックスの状態参照
149         ref_mpf         固定長メモリプールの状態参照
150         ref_cyc         周期ハンドラの状態参照
151         ref_alm         アラームハンドラの状態参照
152
153 ○μITRON4.0仕様に対する変更
154
155 (1) ITRON標準データ型の見直し
156
157 サイズの決まった整数型(B,H, Wなど)などについて,C99に準拠した型の名
158 称(int8_t,int16_t,int32_tなど)やそれと相性が良い名称に変更する.
159 ITRON標準データ型(B,H, Wなど)を必要とするアプリケーションのために,
160 itron.hを用意する.
161
162 (2) 非タスクコンテキストからのext_tsk
163
164 非タスクコンテキストからext_tskが呼ばれた場合,E_CTXエラーを返すものと
165 する.これにともなって,ext_tskをリターンする可能性があるものとし,返り
166 値の型をERとする.
167
168 (3) CPU例外ハンドラで行える操作
169
170 CPU例外ハンドラで行える操作については,TOPPERS標準割込み処理モデルに準
171 拠することとし,JSPカーネルの仕様を踏襲せず,μITRON4.0仕様にも従わない.
172 そのためのサービスコールとして,次のサービスコールを実装する.
173
174         xsns_dpn        CPU例外発生時のディスパッチ保留状態の参照
175         xsns_xpn        CPU例外発生時のタスク例外処理保留状態の参照
176
177 (4) カーネルの用いる管理領域の分離
178
179 μITRON4.0/PX仕様において導入されたμITRON4.0仕様に対する変更として,カー
180 ネルの用いる管理領域の分離に関する仕様を一部採用する.
181
182 まず,固定長メモリプールの実装において,カーネルの用いる管理領域を分離
183 することに伴い,固定長メモリプールを生成する静的API(CRE_MPF)のパラメー
184 タに,固定長メモリプール管理領域の先頭番地(mpfmb)を追加する.
185
186 また,これにあわせて,データキューを生成する静的API(CRE_DTQ)の最後の
187 パラメータの名称を,データキュー管理領域の先頭番地(dtqmb)に変更する.
188
189 なお,メールボックスは,μITRON4.0仕様との互換性のために残している機能
190 と位置付け,カーネルの用いる管理領域の分離は行わない.そのため,メール
191 ボックスを生成する静的API(CRE_MBX)に対する変更はない.
192
193 (5) 処理単位とメモリ領域のデータ型の見直し
194
195 処理単位のエントリ番地のデータ型を,パラメータが反映されないFP型ではな
196 く,処理単位毎の専用のデータ型とする.例えば,タスクのエントリ番地のデー
197 タ型をTASK型,タスク例外処理ルーチンのデータ型をTEXRTN型とする.
198
199 また,スタック領域と固定長メモリプール領域のデータ型を,それぞれSTK_T型
200 とMPF_T型とする.
201
202 (6) 値が0の定数(オブジェクト属性等)の見直し
203
204 コーディングミスを防ぐために,値が0の定数の扱いを見直す.オブジェクト属
205 性(TA_TFIFO等)については,値が0のものはデフォルト扱いして廃止し,定義
206 をitron.hに移す.値が0のサービスコールの動作モード(TWF_ANDW)やオブジェ
207 クトの状態(TTEX_ENA等)については,値を変更する.
208
209 (7) 強制待ち要求ネストの廃止
210
211 強制待ち要求をネストする機能を廃止する.言い換えると,強制待ち要求ネス
212 ト数の最大値を1に固定する.これに伴い,frsm_tskは廃止し,itron.hにおい
213 てfrsm_tskをrsm_tskにマクロ定義する.また,TMAX_SUSCNTの定義をitron.hに
214 移す.
215
216 (8) システム時刻の設定機能の廃止
217
218 set_tim(システム時刻の設定)を廃止する.
219
220 (9) 周期ハンドラの仕様変更
221
222 sta_cycを呼び出した後,最初に周期ハンドラが起動される時刻を変更する.
223 μITRON4.0仕様では,sta_cycを呼び出してから周期ハンドラの起動周期で指定
224 した相対時間後としているが,ASPカーネルでは,起動位相で指定した相対時間
225 後とする.
226
227 ○JSPカーネルにおける独自の拡張機能
228
229 JSPカーネルにおける独自の拡張機能の中で,以下の機能を実装する.
230
231 (1) 性能評価用システム時刻参照機能
232
233 性能評価用システム時刻参照機能とは,ASPカーネル上で動作するタスクやASP
234 カーネル自身の性能を計測するための,システム時刻をμ秒単位で読み出す機
235 能である.この機能のためのサービスコールは次の通りである(JSPカーネルと
236 は名称を変更した).
237
238         get_utm         性能評価用システム時刻の参照
239
240 JSPカーネルからの仕様変更として,get_utmは任意のコンテキストから呼び出
241 すことができるものする.また,性能評価用システム時刻の型(SYSUTM)を,
242 ターゲット非依存部でulong_tに定義する.
243
244 (2) 終了処理ルーチン機能
245
246 ASPカーネルでは,システムの終了時に呼び出される終了処理ルーチンを登録す
247 るための機能をサポートする.この機能のための静的APIは次の通りである.
248
249         ATT_TER         終了処理ルーチンの追加(静的API)
250
251 (3) カーネル動作状態の参照
252
253 カーネル上で動作するタスクから呼び出される関数が,カーネルの初期化完了
254 前や終了処理開始後にも呼び出される可能性がある場合には,その中でカーネ
255 ルのサービスコールを呼び出せるかを判別することが必要となる.この機能の
256 ためのサービスコールは次の通りである(JSPカーネルとは名称を変更した).
257
258         sns_ker         カーネル非動作状態の参照
259
260 ○ASPカーネルにおける独自の拡張機能
261
262 (1) 割込み要求ラインの属性の設定
263
264 割込み要求ラインの属性を設定する機能として,TOPPERS標準割込み処理モデル
265 で規定された次の静的APIを実装する.
266
267         CFG_INT         割込み要求ラインの属性の設定(静的API)
268
269 (2) 同期・通信オブジェクトの再初期化機能
270
271 同期・通信オブジェクトを初期状態に戻すための機能として,次のサービスコー
272 ルを実装する.
273
274         ini_sem         セマフォの再初期化
275         ini_flg         イベントフラグの再初期化
276         ini_dtq         データキューの再初期化
277         ini_mbx         メールボックスの再初期化
278         ini_mpf         固定長メモリプールの再初期化
279
280 同期・通信オブジェクトの再初期化の際に,その同期・通信オブジェクトに対
281 して待ち状態となっていたタスクはすべて待ち解除される.待ち解除されたタ
282 スクに対しては,E_DLTを返す.E_DLTは,スタンダードプロファイルでは使用
283 していないエラーコードである.
284
285 そのため,これらのサービスコールにより,複数のタスクが起床される可能性
286 が生じる.多くのタスクを同時に待ち解除した場合,カーネル内での割込み禁
287 止時間が長くなるため,使用にあたっては注意が必要である.
288
289 同期・通信オブジェクトを再初期化する際に,アプリケーション側との整合性
290 を保つのはアプリケーションの責任である.具体的には,固定長メモリプール
291 を再初期化する際には,そこから獲得済みのメモリブロックをそれ以降使わな
292 いようにしなければならない.また,メールボックスを再初期化する際には,
293 メールボックスに送信されたメッセージ領域を回収しなければならない.
294
295 (3) 優先度データキューの新設
296
297 優先度付きのデータキューの機能を新設する.優先度付きデータキュー機能の
298 ために実装する静的APIおよびサービスコールは次の通りである.
299
300         CRE_PDQ         優先度データキューの生成
301         snd_pdq         優先度データキューへの送信
302         psnd_pdq        優先度データキューへの送信(ポーリング)
303         ipsnd_pdq       優先度データキューへの送信(ポーリング,非タスクコンテキスト)
304         tsnd_pdq        優先度データキューへの送信(タイムアウトあり)
305         rcv_pdq         優先度データキューからの受信
306         prcv_pdq        優先度データキューからの受信(ポーリング)
307         trcv_pdq        優先度データキューからの受信(タイムアウトあり)
308         ini_pdq         優先度データキューの再初期化
309         ref_pdq         優先度データキューの状態参照
310
311 ここで,優先度データキューに蓄積されたデータの数が多い場合,優先度デー
312 タキューへのデータの送信を行うサービスコール(snd_pdq,psnd_pdq,
313 ipsnd_pdq,tsnd_pdq)の処理時間が長くなり,カーネル内での割込み禁止時間
314 が長くなるため,使用にあたっては注意が必要である.
315
316 (4) 自タスクの拡張情報の参照
317
318 自タスクの拡張情報を参照するためのサービスコールを新設する.ライブラリ
319 等の中で用いることを想定している.
320
321         get_inf         自タスクの拡張情報の参照
322
323 (5) カーネルの終了
324
325 致命的なエラーが起こった場合などにカーネルを終了させるためのサービスコー
326 ルを新設する.この機能は,μITRON4.0仕様の機能分類では,システム構成管
327 理機能に分類する(JSPカーネルでは,kernel_exitという名称で,実質的にこ
328 の機能を用意していた).
329
330         ext_ker         カーネルの終了
331
332 ASPカーネルでは,このサービスコールからリターンすることはないが,保護機
333 能を持ったカーネルではエラーリターンする可能性があるため,返り値の型を
334 ERとする.
335
336 これに伴って,JSPカーネルのkernel_startを,sta_kerに名称変更する.ただ
337 し,sta_kerはサービスコールとは見なさないことにする.
338
339 (6) 非タスクコンテキスト用のスタック領域の設定
340
341 非タスクコンテキスト用のスタック領域の先頭番地とサイズを指定するための
342 静的APIを新設する.また,この静的APIにより,非タスクコンテキスト用のス
343 タック領域のサイズのみを指定することもできる.
344
345         DEF_ICS         非タスクコンテキスト用のスタック領域の定義
346
347 ○JSPカーネルにおける実装定義/実装依存規定からの変更
348
349 μITRON4.0仕様で実装定義または実装依存とされている仕様の中で,以下のも
350 のについてJSPカーネルから変更する.
351
352 (1) アプリケーション向けのインクルードファイルの構成の整理
353
354 カーネルを呼び出すアプリケーションからはkernel.hを,SILを呼び出すアプリ
355 ケーションからはsil.hをインクルードすればよいものとし,t_services.hと
356 s_services.hは廃止する.
357
358 また,kernel.hとsil.hの共通部分としてt_stddef.hを用意し,カーネルとSIL
359 のいずれも呼び出さないアプリケーションからは,t_stddef.hをインクルード
360 すればよいものとする.itron.hは,μITRON4.0仕様との互換性が必要な場合に
361 インクルードするものとする.
362
363 (2) 割込み処理/例外処理関連の型の定義の変更
364
365 割込みハンドラ番号の型(INHNO),割込み番号の型(INTNO),CPU例外ハンド
366 ラ番号の型(EXCNO)を,ターゲット非依存部で,いずれもuint_t型に定義する.
367
368 (3) 処理単位の実行開始/リターン時のシステム状態の規定
369
370 処理単位の実行開始/リターン時のシステム状態について,μITRON4.0仕様に
371 おいて実装依存であった点を厳密に規定し,ターゲットによる違いが生じない
372 ようにする.
373
374 (4) isig_timの扱いの変更
375
376 システム時刻を更新する機構をカーネル内部に持つ扱いとし,サービスコール
377 としてのisig_timは廃止する.
378
379 (5) カーネルの用いる領域の指定方法
380
381 JSPカーネルでは,カーネルの用いる領域はすべて自動割付けであったが,ASP
382 カーネルでは,タスクのスタック領域と固定長メモリプールの固定長メモリプー
383 ル領域については,静的APIで先頭番地を指定することもできるものとする(自
384 動割付けもサポートする).
385
386 (6) カーネル管理外の割込みの扱いの規定
387
388 JSPカーネルではターゲット毎に定めていたカーネル管理外の割込みの扱いを,
389 ASPカーネルでは,TOPPERS標準割込み処理モデルの規定に準拠して,可能な範
390 囲で標準化する.ただし,NMI以外にカーネル管理外の割込みを設けるかや,ど
391 の割込み優先度より高いものをカーネル管理外とするかは,ターゲット毎に定
392 める.
393
394 ○システムコンフィギュレーション処理の見直し
395
396 システムコンフィギュレーション処理を全面的に見直し,システムコンフィギュ
397 レーションファイル中におけるC言語のプリプロセッサディレクティブの扱いと
398 静的APIのパラメータの分類を変更した.
399
400 ○拡張パッケージのサポート
401
402 ASPカーネルでは,いくつかの拡張機能を実装するために,次の拡張パッケージ
403 をサポートしている.
404
405 ・ミューテックス機能拡張パッケージ(優先度継承ミューテックスを除く)
406 ・オーバランハンドラ機能拡張パッケージ
407 ・タスク優先度拡張パッケージ
408
409 ○TOPPERS組込みコンポーネントシステム(TECS)の導入
410
411 デバイスドライバやシステムログ機能との接続にTOPPERS組込みコンポーネント
412 システム(TECS)を導入する.また,カーネルオブジェクトをTECSのコンポー
413 ネントとして扱えるようにする.
414
415 なお,Release 1.6の時点では,TECSに対応するための修正は,TECSの配布パッ
416 ケージに含まれており,ASPカーネルの配布パッケージには含まれていない.
417
418 以上