													TOPPERS Confidential
		TOPPERSプロジェクト ディスカッションメモ
		TOPPERS新世代カーネルへのマイグレーションガイド

		作成者: 高田広章（名古屋大学）
		最終更新: 2008年4月12日（作成中）

○メモの位置付け

このメモは，従来のTOPPERSカーネルを含むμITRON4.0仕様準拠のカーネルから，
TOPPERS新世代カーネルに移行するための方法（またはヒント）を説明するもの
である．

○データ型の変更

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を用意しているが，使用することは推奨しない．

○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(&current_time);
	systim_offset = *p_systim - current_time;
}

void
itron_get_tim(SYSTIM *p_systim)
{
	SYSTIM	current_time;

	get_tim(&current_time);
	*p_systim = systim_offset + current_time;
}
----------------------------------------

以上
