TOPPERS新世代カーネルへのマイグレーションガイド 最終更新: 2008年8月8日(作成中) このドキュメントは,従来のTOPPERSカーネルを含むμITRON4.0仕様準拠のカー ネルから,TOPPERS新世代カーネルに移行するための方法(またはヒント)を説 明するものである. ---------------------------------------------------------------------- TOPPERS/ASP Kernel Toyohashi Open Platform for Embedded Real-Time Systems/ Advanced Standard Profile Kernel Copyright (C) 2005-2008 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$ ---------------------------------------------------------------------- ○目次 ・データ型の変更 ・オブジェクトIDの自動割付けへの対応 ・sta_tskの置き換え ・set_timの置き換え ○データ型の変更 TOPPERS新世代カーネル仕様では,ITRON仕様の次のデータ型を廃止している. 対応する新しいデータ型を用意しているので,単純に置き換えればよい. 廃止したデータ型 置き換えるデータ型 ------------------------------------------ B int8_t UB uint8_t VB uint8_t H int16_t UH uint16_t VH uint16_t W int32_t UW uint32_t VW uint32_t D int64_t UD uint64_t VD uint64_t VP void * INT int_t UINT uint_t BOOL boot_t VP_INT intptr_t また,定数についても,次の通り置き換える必要がある. 廃止した定数 置き換える定数 ------------------------------------------ TRUE true FALSE false なお,ITRON仕様のデータ型を使いたいアプリケーションのために,ITRON仕様 との互換性を保つためのitron.hを用意しているが,使用することは推奨しない. ○オブジェクトIDの自動割付けへの対応 TOPPERS新世代カーネルでは,オブジェクトのID番号を自動割付けすることが基 本となっている.TOPPERS新世代カーネルを用いる際のID番号の管理方法につい ては,「TOPPERS/ASPカーネル ユーザーズマニュアル」の「11.3 オブジェクト IDの管理」の節に説明があるので,まずはこれを参照すること. 従来,ID番号を手動で割り付けており,手動で割り付けていたID番号を変更し たくない場合には,コンフィギュレータの持つID番号の割付けをファイルから 取り込む機能(--id-input-fileオプション)を用いることで,手動で割り付け たID番号を用いることができる.この場合に,手動で割り付けたID番号は,コ ンフィギュレータが--id-input-fileオプションで取り込むファイル中にのみ記 述し,アプリケーションのソースプログラムからは,kernel_cfg.hを用いるこ とが望ましい. ○sta_tskの置き換え TOPPERS新世代カーネルでは,タスクを起動するサービスコールとしてact_tsk をサポートしており,sta_tskをサポートしていない.act_tskとsta_tskの機能 を比較した場合,前者はタスク起動のキューイング機能を持つのに対して,後 者はタスクに起動コードを渡す機能を持つ.そのため,sta_tskをact_tskに置 き換える場合に,起動コードを渡す機能をどのように実現するかが問題となる. 起動コードを渡す機能を最も簡単に代用する方法は,起動コードを渡すための データキューを用意する方法である.タスクを起動する処理単位は,データ キューに起動コードを送信した後,act_tskによりタスクを起動する.起動され たタスクは,データキューから起動コードを受信する. タスク起動のキューイングが起こらないことが保証できる,言い換えると,タ スクを起動する時には,対象タスクは休止状態にあることが保証できる場合に は,起動コードをグローバル変数に置いて渡す方法もある.タスクを起動する 処理単位がそのグローバル変数に書くのは,タスクが休止状態の間に限られ, 起動されたタスクがそのグローバル変数を読むのは,タスクが実行できる状態 の間に限られるため,グローバル変数に対する排他制御は必要ない. ○set_timの置き換え TOPPERS新世代カーネルでは,システム時刻を設定するサービスコールである set_timが使用されることは稀であると考え,サポートしないこととした. ITRON仕様と互換のset_timとget_timが必要な場合には,下に示すコードの itron_set_timとitron_get_tim で代用することができる(下のコードでは,エ ラー処理は省略している). ---------------------------------------- SYSTIM systim_offset = 0U; void itron_set_tim(const SYSTIM *p_systim) { SYSTIM current_time; get_tim(¤t_time); systim_offset = *p_systim - current_time; } void itron_get_tim(SYSTIM *p_systim) { SYSTIM current_time; get_tim(¤t_time); *p_systim = systim_offset + current_time; } ---------------------------------------- 以上