
		TOPPERS/ASP3カーネル
		非TECS版システムサービス ユーザーズマニュアル

		対応バージョン: Release 3.7.1
		最終更新: 2023年8月15日

このドキュメントは，TOPPERS/ASP3カーネルの非TECS版システムサービスを使
用するために必要な事項を説明するものである．

非TECS版システムサービスは，ASP3カーネル標準のTECS版システムサービスと，
できる限り同一の機能としている．ASP3カーネルのユーザーズマニュアルと重
複する事項についてはこのマニュアルに記述していないため，このマニュアル
を読む際には，ASP3カーネルのマニュアルもあわせて読むこと．


○目次

１．非TECS版システムサービスの概要
	1.1 非TECS版システムサービスの展開
	1.2 コンパイルオプション
	1.3 コンフィギュレーションスクリプトとMakefile
	1.4 未サポート機能
２．システムサービスの使い方
	2.1 システムログ機能
		2.1.1 システムログ機能のその他のサービス
	2.2 シリアルインタフェースドライバ
		2.2.1 シリアルインタフェースドライバのコンフィギュレーション
		2.2.2 シリアルインタフェースドライバのその他のサービス
	2.3 システムログタスク
		2.3.1 システムログタスクのサービスコール
		2.3.2 システムログタスクのその他のサービス
	2.4 テストプログラム用サービス
	2.5 実行時間分布集計サービス
	2.6 カーネル起動メッセージの出力
	2.7 テストプログラムの実行方法
３．システムサービスのポーティング方法
	3.1 システムログ機能のターゲット依存定義
	3.2 シリアルインタフェースドライバのターゲット依存部
		3.2.1 変数，データ型，管理関数
		3.2.2 デバイスサービスルーチン
		3.2.3 コールバックルーチン
	3.3 システムログタスクのターゲット依存定義
	3.4 低レベル出力
	3.5 テストプログラム用サービスのターゲット依存定義
	3.6 実行時間分布集計サービスのターゲット依存定義
	3.7 カーネル起動メッセージの出力のターゲット依存定義


１．非TECS版システムサービスの概要

非TECS版システムサービスは，TECSを用いずにASP3カーネルを利用したいユー
ザのために，TECSを用いて実装してある標準のシステムサービスと同等の機能
を，TECSを用いずに実装したものである．

1.1 非TECS版システムサービスの展開

非TECS版システムサービスは，extension/non_tecsディレクトリに置かれてい
る．非TECS版システムサービスを使用する場合には，UNIXであれば，ASP3カー
ネルのソースファイルのトップディレクトリで，

	% cp -r extension/non_tecs/* .

を実行する．この時，元のソースファイルの一部は上書きされてしまうので，
注意すること（ソースファイルの修正箇所には条件ディレクティブが入れてあ
るため，上書きされてもTECS版は動作する）．

1.2 コンパイルオプション

TECSを用いずにシステムを構築する場合に定義するマクロとして，
TOPPERS_OMIT_TECSを用意している．

ASP3カーネルの本体はTECSを用いずに実装されているが，カーネルの起動時に
TECSの初期化処理を呼び出している．TOPPERS_OMIT_TECSをマクロ定義してカー
ネルをコンパイルすることで，この呼出しを抑止する．

また，非TECS版システムサービスを使用する場合に置き換えるファイルについ
ても，TOPPERS_OMIT_TECSがマクロ定義されていた時に内容が切り換わるよう
になっている．そのため，前記の方法で非TECS版システムサービスの展開して
も，TECSを使用したシステムの構築には差し支えない．

1.3 コンフィギュレーションスクリプトとMakefile

コンフィギュレーションスクリプト（configure.rb）に-wオプションを付与す
ることで，Makefile変数OMIT_TECSにtrueが設定され，TECSジェネレータを起
動する処理がスキップされる．また，TOPPERS_OMIT_TECSをマクロ定義するコ
ンパイルオプションが設定される．

また，使用する非TECS版システムサービス（およびそのターゲット依存部）の
オブジェクトファイル名を，SYSSVC_COBJSに追加する必要がある．これは，コ
ンフィギュレーションスクリプトの-Sオプションで行うことができる．

例えば，CT11MPcore向けにサンプルプログラムを構築する場合には，コンフィ
ギュレーションスクリプトに次のようなオプションを指定する．

	% ruby ../configure.rb -T ct11mpcore_gcc -w \
		-S "syslog.o banner.o serial.o serial_cfg.o target_serial.o \
		logtask.o uart_pl011.o"

1.4 未サポート機能

非TECS版システムサービスでは，トレースログ記録のサンプルコードには対応
していない．


２．システムサービスの使い方

非TECS版システムサービスの配布パッケージには，以下のシステムサービスが
含まれている．

  ・システムログ機能
  ・シリアルインタフェースドライバ
	  - ターゲット非依存部
	  - ターゲット依存部
  ・システムログタスク
  ・低レベル出力（ターゲット依存部のみ）
  ・テストプログラム用サービス
  ・実行時間分布集計サービス
  ・カーネル起動メッセージ出力

以下では，これらのシステムサービスの使用方法について説明する．ただし，
ASP3カーネルのユーザーズマニュアルの「８．システムサービス」の章と
「10.1 テストプログラム用サービス」の節に記述されている事項については
説明しない．また，ターゲット依存の低レベル出力は，アプリケーションから
直接呼び出すことを想定していないため，この章では説明しない．

2.1 システムログ機能

システムログ機能は，システム内で発生した異常事象等を，ログ情報として記
録するための機能である．また，記録したログ情報を取り出す機能も持つ．

システムログ機能は，システムコンフィギュレーションファイルでsyslog.cfg
をインクルードすることで，システムに組み込むことができる．システムログ
出力を行うソースファイルでは，t_syslog.hをインクルードする．また，シス
テムログ機能のその他のサービスコールを呼び出すソースファイルでは，
syslog.hをインクルードする．

非TECS版のシステムログ機能の位置付けや使用方法は，TECS版とほぼ同じであ
る．ASP3カーネルのユーザーズマニュアルの「8.1.1 システムログ機能の位置
付け」の節から「8.1.7 システムログ機能のためのライブラリ関数とマクロ」
の節までの内容は，以下の点を除いてそのまま適用される．

非TECS版のシステムログ機能では，どの重要度のログ情報をログバッファに記
録するかと，どの重要度のログ情報を低レベル出力機能を用いて出力するかを，
セルの組上げ記述で設定することはできない．デフォルトでは，すべてのログ
情報を低レベル出力機能を用いて出力し，ログバッファには記録しない．デフォ
ルトの設定を変更するには，システムログ機能のサービスコール
（syslog_msk_log）を用いる必要がある．

2.1.1 システムログ機能のその他のサービス

システムログ機能は，前記のサービスコール等に加えて，初期化処理のための
関数を持つ．

(1) void syslog_initialize(EXINF exinf)

システムログ機能の初期化処理．exinfは無視する．ログバッファにログ情報
が記録されている場合には，消去される．syslog.cfgによって，カーネルに初
期化ルーチンとして登録される．

2.2 シリアルインタフェースドライバ

シリアルインタフェースドライバは，シリアルポートを扱うためのドライバで
ある．

シリアルインタフェースドライバは，システムコンフィギュレーションファイ
ルでserial.cfgをインクルードすることで，システムに組み込むことができる．
シリアルインタフェースドライバを呼び出すソースファイルでは，serial.hを
インクルードする．

シリアルインタフェースドライバは，ポート毎にセマフォを2個ずつ使用する．
セマフォを生成する静的APIは，serial.cfgに含まれている．

非TECS版のシリアルインタフェースドライバのサービスコールの仕様は，TECS
版と同じである．ASP3カーネルのユーザーズマニュアルの「8.2.1 シリアルイ
ンタフェースドライバのサービスコール」の節の内容は，そのまま適用される．

2.2.1 シリアルインタフェースドライバのコンフィギュレーション

シリアルインタフェースドライバは，ポート毎に送信バッファと受信バッファ
を持つ．各ポートの送信バッファと受信バッファのサイズを変更する場合には，
serial_cfg.c中の記述を変更する．

各ポートの通信パラメータ（ボーレートなど）は，シリアルインタフェースド
ライバのターゲット依存部で設定されている．変更する場合には，ターゲット
依存部中の記述を変更する必要がある．

2.2.2 シリアルインタフェースドライバのその他のサービス

シリアルインタフェースドライバは，前記のサービスコールに加えて，初期化
処理と未送信文字の取出し処理を持つ．初期化処理は，カーネルに初期化ルー
チンとして登録される．また，ターゲット依存で，初期化処理，終了処理，割
込みサービスルーチンを持つ．これらの登録処理はserial.cfgに含まれる．

(1) void serial_initialize(EXINF exinf)

シリアルインタフェースドライバの初期化処理．exinfは無視する．
serial.cfgによって，カーネルに初期化ルーチンとして登録される．

(2) bool_t serial_get_chr(ID portid, char *p_c)

portidで指定されたシリアルポートの送信バッファ中の文字を，p_cの指す番地
に取り出し，trueを返す関数．文字がなかった時には，falseを返す．終了処理
ルーチン中で呼び出すことを想定している．

2.3 システムログタスク

システムログタスクは，システムログ機能からログ情報を取り出し，それをシ
ステムの外部に出力するためのサービスである．

ASP3カーネルの配布パッケージに含まれるシステムログタスクは，シリアルポー
トにログ情報を文字列の形で出力するもので，システムログタスクの一例とい
う位置付けで提供している．

このシステムログタスクは，システムコンフィギュレーションファイルで
logtask.cfgをインクルードすることで，システムに組み込むことができる．シ
ステムログタスクのサービスを呼び出すソースファイルでは，logtask.hをイン
クルードする．

非TECS版のシステムログタスクの機能は，TECS版とほぼ同じである．ASP3カー
ネルのユーザーズマニュアルの「8.3.1 システムログタスクの機能」の節の内
容は，以下の点を除いてそのまま適用される．

非TECS版では，システムログタスクが実行開始されると，重要度がLOG_EMERG
のログ情報を低レベル出力機能を用いて出力し，重要度がLOG_NOTICEかそれよ
り高いログ情報をログバッファに記録するように，システムログ機能の設定が
変更される．

また，非TECS版では，システムログタスクが，ログバッファが空の場合に待つ
時間（デフォルトでは10ミリ秒）を，セルの組上げ記述で変更することはでき
ない．デフォルトを変更したい場合には，コンパイルオプションやターゲット
依存部（target_syssvc.hまたはそこからインクルードされるファイル）で，
LOGTASK_INTERVALを待ち時間（単位はマイクロ秒）にマクロ定義する．

2.3.1 システムログタスクのサービスコール

システムログタスクのサービスを呼び出すサービスコールの仕様は次の通りで
ある．

(1) ER logtask_flush(uint_t count)

システムログ機能のログバッファ中のログ情報の数がcount以下になるまで待
つ関数．countが0の場合には，シリアルインタフェースドライバの送信バッファ
が空になるのも待つ．

2.3.2 システムログタスクのその他のサービス

システムログタスクは，前記のサービスコールに加えて，メイン処理と終了処
理を持つ．メイン処理はタスクとして，終了処理は終了処理ルーチンとして登
録する．これらの登録処理はlogtask.cfgに含まれる．

(1) void logtask_main(EXINF exinf)

システムログタスクのメイン処理．exinfは無視する．

(2) void logtask_terminate(EXINF exinf)

システムログタスクの終了処理．シリアルインタフェースドライバの送信バッ
ファに蓄積されたデータと，ログバッファに記録されたログ情報を，低レベル
出力機能を用いて出力する．出力すべきログ情報がある場合には，それを出力
する前に，"-- buffered messages --"という文字列を出力する．exinfは無視
する．

この関数を終了処理ルーチンとして登録することで，カーネル終了時点で未出
力のログ情報のほとんどを出力することができる．ただし，未出力のログ情報
の内，システムログタスクのメイン処理が，ログバッファから取り出したが，
まだシリアルインタフェースドライバに送信していない情報は，この関数では
出力できない．

2.4 テストプログラム用サービス

テストプログラム用サービスは，プログラム中のチェックポイントが正しい順
序で実行されたことなど，プログラムが正しく動作していることをチェックす
るためのシステムサービスである．プログラムが正しく動作していないことを
検出した場合には，プログラムを終了させる．

テストプログラム用サービスを用いる場合には，test_svc.hをインクルードし，
test_svc.cをコンパイル・リンクする．

非TECS版のテストプログラム用サービスのサービスコールは，TECS版と同じで
ある．ASP3カーネルのユーザーズマニュアルの「10.1.1 テストプログラム用
サービスのサービスコール」の節の内容は，そのまま適用される．

チェックポイントを通過する度に，カーネル内の各データ構造の一貫性を検査
する自己診断機能を用いる場合には，コンパイルオプションやターゲット依存
部（target_syssvc.hまたはそこからインクルードされるファイル）で，
CHECK_BIT_FUNCを自己診断関数の名前にマクロ定義する．自己診断関数は，パ
ラメータを持たず，返値がER型の関数（異常が検知されなかった場合には，
E_OKまたは正の値を返す）でなければならない．

なお，非TECS版のカーネルの自己診断機能およびミューテックス機能の自己診
断機能は用意していない．

2.5 実行時間分布集計サービス

実行時間分布集計サービスは，システムのリアルタイム性能を評価するために，
プログラム区間の実行時間を計測し，その分布を集計・表示するためのシステ
ムサービスである．

実行時間分布集計サービスを用いる場合には，histogram.hをインクルードし，
histogram.cをコンパイル・リンクする．

非TECS版の実行時間分布集計サービスの概要とサービスコールは，TECS版とほ
ぼ同じである．ASP3カーネルのユーザーズマニュアルの「8.4.1 実行時間分布
集計サービスの概要」の節と「8.4.2 実行時間分布集計サービスのサービスコー
ル」の節の内容は，以下の点を除いてそのまま適用される．

非TECS版では，実行時間分布を記録するためのデータ構造の数は，
TNUM_HISTIDで定義される．すなわち，ID番号として，1〜TNUM_HISTIDを指定
することができる．TNUM_HISTIDは，デフォルト値がhistgram.cの中で定義さ
れており，コンパイルオプションやターゲット依存部（target_syssvc.hまた
はそこからインクルードされるファイル）により変更することができる．

また，非TECS版では，記録する最大時間は，HIST_MAX_TIMEで定義される．す
なわち，0〜HIST_MAX_TIMEの間の実行時間の分布を集計することができる．
HIST_MAX_TIMEは，デフォルト値がhistgram.cの中で定義されており，コンパ
イルオプションやターゲット依存部（target_syssvc.hまたはそこからインク
ルードされるファイル）により変更することができる．

2.6 カーネル起動メッセージの出力

カーネル起動メッセージの出力は，カーネルの起動時に，カーネルの名称やバー
ジョン番号，著作権表示などを出力するための機能である．

カーネル起動メッセージの出力は，システムコンフィギュレーションファイル
でbanner.cfgをインクルードすることで，システムに組み込むことができる．

カーネル起動メッセージの出力は，次の関数で構成される．

(1) void print_banner(EXINF exinf)

システムログ機能を用いて，カーネル起動メッセージを出力する関数．exinf
は無視する．banner.cfgによって，カーネルに初期化ルーチンとして登録され
る．

2.7 テストプログラムの実行方法

testディレクトリに置かれたカーネルの機能テストプログラムと性能評価プロ
グラムは，TECSを用いる前提で作成してあるが，以下の内容のtecsgen.cfgを
用意することで，修正なしに実行することができる．

----------------------------------------
INCLUDE("syssvc/syslog.cfg");
INCLUDE("syssvc/banner.cfg");
INCLUDE("syssvc/serial.cfg");
----------------------------------------

この時，SYSSVC_COBJSに，機能テストプログラムの場合はtest_svc.oを，性能
評価プログラムの場合はtest_svc.oとhistogram.oを追加する必要があるので，
注意すること．


３．システムサービスのポーティング方法

非TECS版システムサービスの配布パッケージに含まれているシステムサービス
（２章でリストアップした）の内，シリアルインタフェースドライバのターゲッ
ト依存部と低レベル出力は，ターゲット依存部で用意する必要がある．

その他のシステムサービスは，ターゲット非依存部で用意されているが，ター
ゲット依存に設定を変更することができる．具体的には，システムサービスの
設定を変更するための定義を，target_syssvc.h，target_stddef.h，またはそ
こからインクルードされるファイル（開発環境依存部／プロセッサコア依存部／
チップ依存部で用意されるヘッダファイルなど）に記述する．

3.1 システムログ機能のターゲット依存定義

システムログ機能を使用する場合で，スタートアップモジュールでbssセクショ
ンのクリアを省略している場合には，syslog_logmaskとsyslog_lowmask_notを
0に初期化するコードを追加する．これは，システムログ機能が初期化される前
に出力されたログ情報を，低レベル出力機能を用いて出力するためである．

ターゲット依存部で提供すべきシステムログ機能のための定義は次の通りであ
る．

(3-1-1) TCNT_SYSLOG_BUFFER（オプション）

システムログ機能のログバッファのサイズを定義するマクロ．定義しない場合
のデフォルト値は32．

(3-1-2) LOGTIM，SYSLOG_GET_LOGTIM（オプション）

システムログ機能において記録する時刻（ログ時刻）のデータ型をLOGTIMに，
時刻を取得するための処理をSYSLOG_GET_LOGTIMにマクロ定義する．これらを定
義しない場合，高分解能タイマのカウント値をログ時刻に用いる．

なお，LOGTIMの定義は，target_stddef.hまたはそこからインクルードされるファ
イルに含めなければならない．

(3-1-3) LOGPAR，ULOGPAR（オプション）

システムログ機能において記録するログパラメータのデータ型をLOGPARにマク
ロ定義する．LOGPARに定義したデータ型は，符号付きの整数型でなければなら
ない．また，LOGPARと同じサイズの符号無しの整数型を，ULOGPARにマクロ定
義する．これらを定義しない場合，ログパラメータのデータ型はintptr_tとす
る．

なお，LOGPARおよびULOGPARの定義は，target_stddef.hまたはそこからインク
ルードされるファイルに含めなければならない．

3.2 シリアルインタフェースドライバのターゲット依存部

ターゲット依存部で提供すべきシリアルインタフェースドライバのための定義
は次の通りである．これらの定義は，別に指定がない限り，target_serial.hま
たはそこからインクルードされるファイルに含め，必要なコンフィギュレーショ
ン情報をtarget_serial.cfgに記述する．関数の実体が必要な場合には，
target_serial.c等のファイルを用意する．

シリアルインタフェースドライバのターゲット依存部の中で，ターゲットのシ
リアルI/Oデバイス（SIO）のみに依存する部分を，SIOドライバと呼ぶ．SIOド
ライバは，おおよそ，ITRONデバイスドライバ設計ガイドラインのPDICに相当
する．

3.2.1 変数，データ型，管理関数

(3-2-1-1) TNUM_PORT

シリアルインタフェースドライバがサポートするシリアルポート数を定義する
マクロ．このマクロの定義は，target_syssvc.hまたはそこからインクルード
されるファイルに含める．

(3-2-1-2) void sio_initialize(EXINF exinf)（オプション）

SIOドライバの初期化処理．target_serial.cfgに，この関数を初期化ルーチン
として登録する静的APIを含める．ただし，低レベル出力をSIOポート経由で行
う場合には，SIOドライバの初期化を初期化ルーチンの実行前に行いたいため，
target_initializeから呼び出す必要がある．

(3-2-1-3) void sio_terminate(EXINF exinf)（オプション）

SIOドライバの終了処理．target_serial.cfgに，この関数を終了処理ルーチン
として登録する静的APIを含める．

(3-2-1-4) void sio_isr(EXINF exinf)

SIOの割込みサービスルーチン．target_serial.cfgに，この関数を割込みサー
ビスルーチンとして登録する静的APIを含める．また，その静的APIに必要な
SIOの割込み番号などは，target_serial.hでマクロ定義する．割込みサービス
ルーチンではなく，割込みハンドラとすることもできる．

(3-2-1-5) SIOPCB

SIOポート管理ブロックのデータ型（target_serial.hには，データ型の宣言だ
け含まれていればよい）．

(3-2-1-6) SIO_RDY_SND，SIO_RDY_RCV

送信可能コールバックの識別番号をSIO_RDY_SNDに，受信通知コールバックの識
別番号をSIO_RDY_RCVにマクロ定義する．コールバックの禁止／許可を行なうサー
ビスコール（sio_ena_cbrとsio_dis_cbr）で用いる．

3.2.2 デバイスサービスルーチン

以下のデバイスサービルルーチンは，（少なくとも）SIOポートからの割込み
がマスクされた状態で呼び出される．また，タスクコンテキスト，非タスクコ
ンテキストのいずれで呼び出される場合もある（いずれで呼び出されても動作
するようにしなければならない）．

(3-2-2-1) SIOPCB *sio_opn_por(ID siopid, EXINF exinf)

siopidで指定されるSIOポートをオープンする関数．exinfはSIOポートに対す
る拡張情報で，コールバックを呼ぶ時にSIOポートを区別するために渡す．

(3-2-2-2) void sio_cls_por(SIOPCB *siopcb)

siopcbで指定されるSIOポートをクローズする関数．

(3-2-2-3) bool_t sio_snd_chr(SIOPCB *siopcb, char c)

siopcbで指定されるSIOポートに，cで示される文字を送信する関数．文字を送
信レジスタに入れた場合にはtrueを，前に送信した文字の送信が終わっていな
いために，文字を送信レジスタに入れられなかった場合にはfalseを返す．

(3-2-2-4) int_t sio_rcv_chr(SIOPCB *siopcb)

siopcbで指定されるSIOポートから文字を読む関数．文字を受信していた場合，
読んだ文字のコードは正の値として返し，文字を受信していない場合には-1を
返す．

(3-2-2-5) void sio_ena_cbr(SIOPCB *siopcb, uint_t cbrtn)

siopcbで指定されるSIOポートからの，cbrtnで指定されるコールバックを許可
する．cbrtnには，SIO_RDY_SNDかSIO_RDY_RCVを指定できる．

(3-2-2-6) void sio_dis_cbr(SIOPCB *siopcb, uint_t cbrtn)

siopcbで指定されるSIOポートからの，cbrtnで指定されるコールバックを禁止
する．cbrtnには，SIO_RDY_SNDかSIO_RDY_RCVを指定できる．

3.2.3 コールバックルーチン

ターゲット依存部は，必要なタイミングで，シリアルインタフェースドライバ
のターゲット非依存部に含まれる以下のコールバックルーチンを呼び出びださ
なければならない．ただし，それぞれのコールバックが禁止されている時は，
コールバックルーチンを呼び出してはならない．

コールバックルーチンは，（少なくとも）SIOポートからの割込みが禁止され
た状態で，非タスクコンテキストで呼び出す．exinfには，SIOポートのオープ
ン時に指定された拡張情報を渡す．

(3-2-3-1) void sio_irdy_snd(EXINF exinf)

送信可能コールバックルーチン．SIOポートに対して文字が送信できる状態に
なった場合に呼び出す．シリアルインタフェースドライバは，このコールバッ
クルーチンの中で，sio_snd_chrを呼び出して次の文字を送信するか，送信す
べき文字がない場合には送信可能コールバックを禁止する．

(3-2-3-2) void sio_irdy_rcv(EXINF exinf)

受信通知コールバックルーチン．SIOポートから文字を受信した場合に呼び出
す．シリアルインタフェースドライバは，このコールバックルーチンの中で，
必ずsio_rcv_chrを呼び出して受信した文字を取り出す．

3.3 システムログタスクのターゲット依存定義

ターゲット依存部で提供すべきシステムログタスクのための定義は次の通りで
ある．これらの定義は，target_syssvc.hまたはそこからインクルードされるファ
イルに含める．

(3-3-1) LOGTASK_PRIORITY（オプション）

システムログタスクの優先度を定義するマクロ．定義しない場合のデフォルト
値は3．

(3-3-2) LOGTASK_STACK_SIZE（オプション）

システムログタスクのスタックサイズを定義するマクロ．定義しない場合のデ
フォルト値は1024．

(3-3-3) LOGTASK_PORTID（オプション）

システムログタスクの出力先のシリアルポート番号．定義しない場合のデフォ
ルト値は1．

(3-3-4) LOGTASK_INTERVAL（オプション）

システムログタスクの動作間隔（単位はマイクロ秒）．定義しない場合のデフォ
ルト値は10000．

(3-3-5) LOGTASK_FLUSH_WAIT（オプション）

ログ出力を待ち合わせる処理において，タスクを待たせる単位となる時間（単
位はマイクロ秒）．定義しない場合のデフォルト値は1000．

3.4 低レベル出力

ターゲット依存部で提供すべき低レベル出力のための関数は次の通りである．
この関数宣言は，target_syssvc.hまたはそこからインクルードされるファイ
ルに含める．また，関数の本体は，それ用のファイルを用意しても良いし，
（例外的に）target_serial.cまたはそこからインクルードされるファイルに
含めても良いこととする．

(3-4-1) void target_fput_log(char c)

低レベル出力のための文字出力関数．ターゲット依存の方法で，文字cを表示/
出力/保存する．

この関数は，リエントラントに実装しなければならない．この関数内で排他制
御が必要な場合には，SILを用いて全割込みロック状態にすること．また，全割
込みロック状態で呼ばれる場合があるため，全割込みロック状態から呼び出す
ことができない関数を呼ばないように実装しなければならない．

低レベル出力をシリアルポート経由で行う場合で，シリアルインタフェースド
ライバとポートを共用しないことが望ましいが，ポート数が足りないためにや
むをえず共用する場合には，両者が競合しないように注意が必要である．具体
的には，両者が同じ設定でSIOを使うようにし，シリアルインタフェースドラ
イバの動作中に低レベル出力が行われても差し支えないように設計する．また，
低レベル出力が動作開始後にシリアルインタフェースドライバがSIOを初期化
すると，文字化けが起こる可能性がある．これを避けるためには，共用するポー
トは低レベル出力側で初期化し，シリアルインタフェースドライバでは初期化
しないようにするとよい．

3.5 テストプログラム用サービスのターゲット依存定義

ターゲット依存部で提供すべきテストプログラム用サービスのための定義はな
い．

3.6 実行時間分布集計サービスのターゲット依存定義

実行時間分布集計サービスの設定をターゲット依存部で変更する場合に，ター
ゲット依存部で提供すべき実行時間分布集計サービスのための定義は次の通り
である．これらの定義は，target_syssvc.hまたはそこからインクルードされ
るファイルに含める．

(3-6-1) HISTTIM，HISTTIM_CYCLE（オプション）

実行時間計測用の時刻のデータ型をHISTTIMに，実行時間計測用の時刻の周期
をHISTTIM_CYCLEにマクロ定義する．HISTTIMを定義しない場合，HISTTIMと
HISTTIM_CYCLEのデフォルト値は，それぞれ，HRTCNTとTCYC_HRTCNTである．

(3-6-2) void HIST_GET_TIM(HISTTIM *p_time)（オプション）

実行時間計測用の現在時刻を*p_timeに取得する処理に定義するマクロ．定義し
ない場合のデフォルトは，fch_hrtの返値を*p_timeに取得する処理になる．

(3-6-3) uint_t HIST_CONV_TIM(HISTTIM time)（オプション）

実行時間計測用の時刻の差（時間）を，実行時間分布集計用の値に変換する処
理に定義するマクロ．時刻が過去に戻ったかオーバフローしたかの区別がつか
ない場合には，最上位ビットが1の値（INT_MAXよりも大きい値）を返す．定義
しない場合のデフォルトは，timeをuint_tにキャストする処理になる．

(3-6-4) void HIST_BM_HOOK(void)（オプション）

実行時間計測直前に行うべき処理に定義するマクロ．キャッシュのパージやフィ
ル，メモリバリア処理等を行いたい場合には，このマクロに定義する．定義し
ない場合のデフォルトは，空の処理になる．

3.7 カーネル起動メッセージの出力のターゲット依存定義

ターゲット依存部で提供すべきカーネル起動メッセージの出力のための定義は
次の通りである．これらの定義は，target_syssvc.hまたはそこからインクルー
ドされるファイルに含める．

(3-7-1) TARGET_NAME

ターゲットの名称に定義する．

(3-7-2) TARGET_COPYRIGHT（オプション）

カーネル起動メッセージに，ターゲット依存部の著作権表示を追加するための
マクロ．デフォルトでは，ターゲット依存部の著作権表示を追加しない．

以上
