TOPPERS/ASPカーネルの仕様概要 対応バージョン: Release 1.9 最終更新: 2013年12月31日 このドキュメントは,TOPPERS/ASPカーネルの仕様概要について説明したもので ある.μITRON4.0仕様のスタンダードプロファイルに対する拡張および変更箇 所を中心に説明する. ---------------------------------------------------------------------- TOPPERS/ASP Kernel Toyohashi Open Platform for Embedded Real-Time Systems/ Advanced Standard Profile Kernel Copyright (C) 2005-2013 by Embedded and Real-Time Systems Laboratory Graduate School of Information Science, Nagoya Univ., JAPAN 上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改 変・再配布(以下,利用と呼ぶ)することを無償で許諾する. (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 権表示,この利用条件および下記の無保証規定が,そのままの形でソー スコード中に含まれていること. (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 の無保証規定を掲載すること. (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 用できない形で再配布する場合には,次のいずれかの条件を満たすこ と. (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 作権表示,この利用条件および下記の無保証規定を掲載すること. (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに 報告すること. (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを 免責すること. 本ソフトウェアは,無保証で提供されているものである.上記著作権者お よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ アの利用により直接的または間接的に生じたいかなる損害に関しても,そ の責任を負わない. $Id: asp_spec.txt 2585 2013-12-31 06:17:36Z ertl-hiro $ ---------------------------------------------------------------------- ○前提となる文書 [1] トロン協会: μITRON4.0仕様, Ver.4.02.00, 2004年. [2] トロン協会: μITRON4.0仕様 保護機能拡張(μITRON4.0/PX仕様), Ver.1.00.00, 2002年. [3] TOPPERSプロジェクト: TOPPERS/JSPカーネル ユーザズマニュアル Release 1.4.3対応, 最終更新: 2007年4月23日. ○仕様の概略 TOPPERS/ASPカーネルの仕様は,μITRON4.0仕様のスタンダードプロファイルを ベースに,次のような拡張・改良を加えたものである. ・割込み処理機能については,TOPPERS標準割込み処理モデルに準拠させる. ・μITRON4.0仕様のスタンダードプロファイル外の機能の一部を導入する. ・一部の仕様について,μITRON4.0仕様に対して変更を加える. ・JSPカーネルにおける独自の拡張機能を一部変更して実装する. ・ASPカーネルにおける独自の拡張機能を新たに実装する. ・システムコンフィギュレーション処理を全面的に見直す. ・拡張機能を実装するための拡張パッケージをサポートする. ・TOPPERS組込みコンポーネントシステム(TECS)を導入する. そのためASPカーネルは,μITRON4.0仕様に完全に準拠しているわけではなく, JSPカーネルの上位互換にもなっていない. μITRON4.0仕様では,実装独自に用意する静的APIおよびサービスコールの名称 には,先頭にそれぞれ"V"および"v"の文字を付加するものとしているが,ASPカー ネルではこの規定は採用しない. 以下では,μITRON4.0仕様のスタンダードプロファイルに対する拡張および変 更箇所について説明する. ○スタンダードプロファイル外の機能の一部導入 μITRON4.0仕様には規定されているが,スタンダードプロファイルに含まれな い(または,含まれるとは限らない)機能として,次の機能を実装する. (1) イベントフラグの複数タスク待ち イベントフラグに対する複数タスク待ちの機能(TA_WMUL属性のイベントフラグ) を実装する. これにより,イベントフラグのセット(set_flg,iset_flg)で複数のタスクが 起床される可能性が生じる.多くのタスクを同時に待ち解除した場合,カーネ ル内での割込み禁止時間が長くなるため,使用にあたっては注意が必要である. (2) アラームハンドラ アラームハンドラの機能を実装する.アラームハンドラ機能のために実装する 静的APIおよびサービスコールは次の通りである. CRE_ALM アラームハンドラの生成(静的API) sta_alm アラームハンドラの動作開始 ista_alm アラームハンドラの動作開始(非タスクコンテキスト用) stp_alm アラームハンドラの動作停止 istp_alm アラームハンドラの動作停止(非タスクコンテキスト用) (3) 割込みサービスルーチン スタンダードプロファイルでは,割込みハンドラと割込みサービスルーチンの いずれかをサポートすればよいことになっている.JSPカーネルでは割込みハン ドラのみを実装しているが,ASPカーネルではその両者を実装する. 割込みサービスルーチンの仕様については,TOPPERS標準割込み処理モデルの規 定に準拠する.割込みサービスルーチンを追加するサービスコールとして,次 の静的APIを実装する.この静的APIの仕様については,TOPPERS標準割込み処理 モデルにおいて,μITRON4.0仕様に対して拡張を加えている. ATT_ISR 割込みサービスルーチンの追加(静的API) (4) 割込み管理機能 スタンダードプロファイルに含まれない割込み管理機能として,次のサービス コールを実装する.JSPカーネルでは,これらのサービスコールを実装するかど うかはターゲット依存となっているが,ASPカーネルでは,TOPPERS標準割込み 処理モデルの規定に準拠して,ターゲット非依存に実装する. dis_int 割込みの禁止 ena_int 割込みの許可 chg_ipm 割込み優先度マスクの変更 get_ipm 割込み優先度マスクの参照 (5) オブジェクトの状態参照機能 主にデバッグ時向けの機能として,オブジェクトの状態参照機能を実装する. 具体的には,次のサービスコールを実装する. ref_tsk タスクの状態参照 ref_tex タスク例外処理の状態参照 ref_sem セマフォの状態参照 ref_flg イベントフラグの状態参照 ref_dtq データキューの状態参照 ref_mbx メールボックスの状態参照 ref_mpf 固定長メモリプールの状態参照 ref_cyc 周期ハンドラの状態参照 ref_alm アラームハンドラの状態参照 ○μITRON4.0仕様に対する変更 (1) ITRON標準データ型の見直し サイズの決まった整数型(B,H, Wなど)などについて,C99に準拠した型の名 称(int8_t,int16_t,int32_tなど)やそれと相性が良い名称に変更する. ITRON標準データ型(B,H, Wなど)を必要とするアプリケーションのために, itron.hを用意する. (2) 非タスクコンテキストからのext_tsk 非タスクコンテキストからext_tskが呼ばれた場合,E_CTXエラーを返すものと する.これにともなって,ext_tskをリターンする可能性があるものとし,返り 値の型をERとする. (3) CPU例外ハンドラで行える操作 CPU例外ハンドラで行える操作については,TOPPERS標準割込み処理モデルに準 拠することとし,JSPカーネルの仕様を踏襲せず,μITRON4.0仕様にも従わない. そのためのサービスコールとして,次のサービスコールを実装する. xsns_dpn CPU例外発生時のディスパッチ保留状態の参照 xsns_xpn CPU例外発生時のタスク例外処理保留状態の参照 (4) カーネルの用いる管理領域の分離 μITRON4.0/PX仕様において導入されたμITRON4.0仕様に対する変更として,カー ネルの用いる管理領域の分離に関する仕様を一部採用する. まず,固定長メモリプールの実装において,カーネルの用いる管理領域を分離 することに伴い,固定長メモリプールを生成する静的API(CRE_MPF)のパラメー タに,固定長メモリプール管理領域の先頭番地(mpfmb)を追加する. また,これにあわせて,データキューを生成する静的API(CRE_DTQ)の最後の パラメータの名称を,データキュー管理領域の先頭番地(dtqmb)に変更する. なお,メールボックスは,μITRON4.0仕様との互換性のために残している機能 と位置付け,カーネルの用いる管理領域の分離は行わない.そのため,メール ボックスを生成する静的API(CRE_MBX)に対する変更はない. (5) 処理単位とメモリ領域のデータ型の見直し 処理単位のエントリ番地のデータ型を,パラメータが反映されないFP型ではな く,処理単位毎の専用のデータ型とする.例えば,タスクのエントリ番地のデー タ型をTASK型,タスク例外処理ルーチンのデータ型をTEXRTN型とする. また,スタック領域と固定長メモリプール領域のデータ型を,それぞれSTK_T型 とMPF_T型とする. (6) 値が0の定数(オブジェクト属性等)の見直し コーディングミスを防ぐために,値が0の定数の扱いを見直す.オブジェクト属 性(TA_TFIFO等)については,値が0のものはデフォルト扱いして廃止し,定義 をitron.hに移す.値が0のサービスコールの動作モード(TWF_ANDW)やオブジェ クトの状態(TTEX_ENA等)については,値を変更する. (7) 強制待ち要求ネストの廃止 強制待ち要求をネストする機能を廃止する.言い換えると,強制待ち要求ネス ト数の最大値を1に固定する.これに伴い,frsm_tskは廃止し,itron.hにおい てfrsm_tskをrsm_tskにマクロ定義する.また,TMAX_SUSCNTの定義をitron.hに 移す. (8) システム時刻の設定機能の廃止 set_tim(システム時刻の設定)を廃止する. (9) 周期ハンドラの仕様変更 sta_cycを呼び出した後,最初に周期ハンドラが起動される時刻を変更する. μITRON4.0仕様では,sta_cycを呼び出してから周期ハンドラの起動周期で指定 した相対時間後としているが,ASPカーネルでは,起動位相で指定した相対時間 後とする. (10) タスク例外処理ルーチンの実行開始条件の変更 割込み優先度マスク全解除状態でない場合には,タスク例外処理ルーチンの実 行が開始されないという仕様に変更した. ○JSPカーネルにおける独自の拡張機能 JSPカーネルにおける独自の拡張機能の中で,以下の機能を実装する. (1) 性能評価用システム時刻参照機能 性能評価用システム時刻参照機能とは,ASPカーネル上で動作するタスクやASP カーネル自身の性能を計測するための,システム時刻をμ秒単位で読み出す機 能である.この機能のためのサービスコールは次の通りである(JSPカーネルと は名称を変更した). get_utm 性能評価用システム時刻の参照 JSPカーネルからの仕様変更として,get_utmは任意のコンテキストから呼び出 すことができるものする.また,性能評価用システム時刻の型(SYSUTM)を, ターゲット非依存部でulong_tに定義する. (2) 終了処理ルーチン機能 ASPカーネルでは,システムの終了時に呼び出される終了処理ルーチンを登録す るための機能をサポートする.この機能のための静的APIは次の通りである. ATT_TER 終了処理ルーチンの追加(静的API) (3) カーネル動作状態の参照 カーネル上で動作するタスクから呼び出される関数が,カーネルの初期化完了 前や終了処理開始後にも呼び出される可能性がある場合には,その中でカーネ ルのサービスコールを呼び出せるかを判別することが必要となる.この機能の ためのサービスコールは次の通りである(JSPカーネルとは名称を変更した). sns_ker カーネル非動作状態の参照 ○ASPカーネルにおける独自の拡張機能 (1) 割込み要求ラインの属性の設定 割込み要求ラインの属性を設定する機能として,TOPPERS標準割込み処理モデル で規定された次の静的APIを実装する. CFG_INT 割込み要求ラインの属性の設定(静的API) (2) 同期・通信オブジェクトの再初期化機能 同期・通信オブジェクトを初期状態に戻すための機能として,次のサービスコー ルを実装する. ini_sem セマフォの再初期化 ini_flg イベントフラグの再初期化 ini_dtq データキューの再初期化 ini_mbx メールボックスの再初期化 ini_mpf 固定長メモリプールの再初期化 同期・通信オブジェクトの再初期化の際に,その同期・通信オブジェクトに対 して待ち状態となっていたタスクはすべて待ち解除される.待ち解除されたタ スクに対しては,E_DLTを返す.E_DLTは,スタンダードプロファイルでは使用 していないエラーコードである. そのため,これらのサービスコールにより,複数のタスクが起床される可能性 が生じる.多くのタスクを同時に待ち解除した場合,カーネル内での割込み禁 止時間が長くなるため,使用にあたっては注意が必要である. 同期・通信オブジェクトを再初期化する際に,アプリケーション側との整合性 を保つのはアプリケーションの責任である.具体的には,固定長メモリプール を再初期化する際には,そこから獲得済みのメモリブロックをそれ以降使わな いようにしなければならない.また,メールボックスを再初期化する際には, メールボックスに送信されたメッセージ領域を回収しなければならない. (3) 優先度データキューの新設 優先度付きのデータキューの機能を新設する.優先度付きデータキュー機能の ために実装する静的APIおよびサービスコールは次の通りである. CRE_PDQ 優先度データキューの生成 snd_pdq 優先度データキューへの送信 psnd_pdq 優先度データキューへの送信(ポーリング) ipsnd_pdq 優先度データキューへの送信(ポーリング,非タスクコンテキスト) tsnd_pdq 優先度データキューへの送信(タイムアウトあり) rcv_pdq 優先度データキューからの受信 prcv_pdq 優先度データキューからの受信(ポーリング) trcv_pdq 優先度データキューからの受信(タイムアウトあり) ini_pdq 優先度データキューの再初期化 ref_pdq 優先度データキューの状態参照 ここで,優先度データキューに蓄積されたデータの数が多い場合,優先度デー タキューへのデータの送信を行うサービスコール(snd_pdq,psnd_pdq, ipsnd_pdq,tsnd_pdq)の処理時間が長くなり,カーネル内での割込み禁止時間 が長くなるため,使用にあたっては注意が必要である. (4) 自タスクの拡張情報の参照 自タスクの拡張情報を参照するためのサービスコールを新設する.ライブラリ 等の中で用いることを想定している. get_inf 自タスクの拡張情報の参照 (5) カーネルの終了 致命的なエラーが起こった場合などにカーネルを終了させるためのサービスコー ルを新設する.この機能は,μITRON4.0仕様の機能分類では,システム構成管 理機能に分類する(JSPカーネルでは,kernel_exitという名称で,実質的にこ の機能を用意していた). ext_ker カーネルの終了 ASPカーネルでは,このサービスコールからリターンすることはないが,保護機 能を持ったカーネルではエラーリターンする可能性があるため,返り値の型を ERとする. これに伴って,JSPカーネルのkernel_startを,sta_kerに名称変更する.ただ し,sta_kerはサービスコールとは見なさないことにする. (6) 非タスクコンテキスト用のスタック領域の設定 非タスクコンテキスト用のスタック領域の先頭番地とサイズを指定するための 静的APIを新設する.また,この静的APIにより,非タスクコンテキスト用のス タック領域のサイズのみを指定することもできる. DEF_ICS 非タスクコンテキスト用のスタック領域の定義 ○JSPカーネルにおける実装定義/実装依存規定からの変更 μITRON4.0仕様で実装定義または実装依存とされている仕様の中で,以下のも のについてJSPカーネルから変更する. (1) アプリケーション向けのインクルードファイルの構成の整理 カーネルを呼び出すアプリケーションからはkernel.hを,SILを呼び出すアプリ ケーションからはsil.hをインクルードすればよいものとし,t_services.hと s_services.hは廃止する. また,kernel.hとsil.hの共通部分としてt_stddef.hを用意し,カーネルとSIL のいずれも呼び出さないアプリケーションからは,t_stddef.hをインクルード すればよいものとする.itron.hは,μITRON4.0仕様との互換性が必要な場合に インクルードするものとする. (2) 割込み処理/例外処理関連の型の定義の変更 割込みハンドラ番号の型(INHNO),割込み番号の型(INTNO),CPU例外ハンド ラ番号の型(EXCNO)を,ターゲット非依存部で,いずれもuint_t型に定義する. (3) 処理単位の実行開始/リターン時のシステム状態の規定 処理単位の実行開始/リターン時のシステム状態について,μITRON4.0仕様に おいて実装依存であった点を厳密に規定し,ターゲットによる違いが生じない ようにする. (4) isig_timの扱いの変更 システム時刻を更新する機構をカーネル内部に持つ扱いとし,サービスコール としてのisig_timは廃止する. (5) カーネルの用いる領域の指定方法 JSPカーネルでは,カーネルの用いる領域はすべて自動割付けであったが,ASP カーネルでは,タスクのスタック領域と固定長メモリプールの固定長メモリプー ル領域については,静的APIで先頭番地を指定することもできるものとする(自 動割付けもサポートする). (6) カーネル管理外の割込みの扱いの規定 JSPカーネルではターゲット毎に定めていたカーネル管理外の割込みの扱いを, ASPカーネルでは,TOPPERS標準割込み処理モデルの規定に準拠して,可能な範 囲で標準化する.ただし,NMI以外にカーネル管理外の割込みを設けるかや,ど の割込み優先度より高いものをカーネル管理外とするかは,ターゲット毎に定 める. ○システムコンフィギュレーション処理の見直し システムコンフィギュレーション処理を全面的に見直し,システムコンフィギュ レーションファイル中におけるC言語のプリプロセッサディレクティブの扱いと 静的APIのパラメータの分類を変更した. ○拡張パッケージのサポート ASPカーネルでは,いくつかの拡張機能を実装するために,次の拡張パッケージ をサポートしている. ・ミューテックス機能拡張パッケージ(優先度継承ミューテックスを除く) ・オーバランハンドラ機能拡張パッケージ ・タスク優先度拡張パッケージ ・制約タスク拡張パッケージ ・動的生成機能拡張パッケージ ○TOPPERS組込みコンポーネントシステム(TECS)の導入 デバイスドライバやシステムログ機能との接続にTOPPERS組込みコンポーネント システム(TECS)を導入する.また,カーネルオブジェクトをTECSのコンポー ネントとして扱えるようにする. なお,TECSに対応するための修正は,TECSの配布パッケージに含まれており, ASPカーネルの配布パッケージには含まれていない. 以上