第2章 システム構築
本章では,RI78V4が提供している機能を利用したシステム(ロード・モジュール)の構築手順について解説しています。
システム構築とは,RI78V4の提供媒体からユーザの開発環境(ホスト・マシン)上にインストールされたファイル群(カーネル・ライブラリなど)を用いてロード・モジュールを生成することです。
なお,RI78V4では,処理プログラムを実現すべき処理の種類/用途にあわせて以下に示した3種類に分類しています。
-
タ ス ク
他の処理プログラム(周期ハンドラ,割り込みハンドラなど)とは異なり,RI78V4が提供するサービス・コールを使用して明示的に操作しない限り実行されることのない処理プログラムです。
-
周期ハンドラ
一定の時間(起動周期)を単位として周期的に起動される周期処理専用ルーチンです。
なお,RI78V4では,周期ハンドラを“非タスク(タスクとは独立したもの)”として位置づけています。このため,起動周期に達した際には,システム内で最高優先度を持つタスクが処理を実行中であっても,その処理は中断され,周期ハンドラに制御が移ります。
-
割り込みハンドラ
割り込みが発生した際に起動される割り込み処理専用ルーチンです。
なお,RI78V4では,割り込みハンドラを“非タスク(タスクとは独立したもの)”として位置づけています。このため,割り込みが発生した際には,システム内で最高優先度を持つタスクが処理を実行中であっても,その処理は中断され,割り込みハンドラに制御が移ります。
備考2 “
タイマ・ハンドラの呼び出し”を行う割り込みハンドラについても,ユーザが記述する必要があります。
2.3 システム・コンフィギュレーション・ファイルの記述
RI78V4に提供するデータを保持した情報ファイル(システム情報テーブル・ファイル,システム情報ヘッダ・ファイル,割り込み情報定義ファイル)を生成する際に必要となる
システム・コンフィギュレーション・ファイルを記述します。
RI78V4を様々な実行環境に対応するために切り出されたユーザ・オウン・コーディング部を記述します。
なお,RI78V4では,ユーザ・オウン・コーディング部を実現すべき処理の種類/用途にあわせて以下に示した4種類に分類しています。
備考2 割り込みハンドラをC言語で記述(システム・コンフィギュレーション・ファイルの割り込みハンドラ定義(DEF_INH)にてTA_HLNG属性を指定)する場合,Cコンパイラが“割り込み要求名に対応した割り込みエントリ処理”を自動的に出力するため,ユーザが割り込みエントリ処理を記述する必要はありません。
-
ブート処理
RI78V4が処理を実行するうえで必要となる最低限のハードウエアを初期化するために
システム構成管理機能から切り出された初期化処理専用ルーチンであり,リセット割り込みが発生した際にCPUが強制的に制御を移すベクタ・テーブル・アドレスに割り付けられた
割り込みエントリ処理から呼び出されます。
-
アイドル・ルーチン
CPUが提供しているスタンバイ機能を有効活用(低消費電力システムの実現)するために
スケジューリング機能から切り出されたアイドル処理専用ルーチンであり,RI78V4のスケジューリング対象となるタスク(RUNNING状態,またはREADY状態のタスク)がシステム内に1つも存在しなくなった際にスケジューラから呼び出されます。
リンカが行うアドレス割り付けをユーザが固定化するため,セクションの開始アドレスを指定します。本指定はリンカのオプションで指定します。
なお,RI78V4では,機能単位にモジュール化された管理オブジェクトの割り付け先(セクション名)を規定しています。
以下に,RI78V4が規定しているセクション名の一覧を示します。
|
|
|
|
|
|
|
RI78V4の核となる処理部,および,RI78V4が提供するサービス・コールの本体処理部が割り付けられる領域。
先頭が偶数番地で,0x000c0〜0xeffffの領域に配置可能。
|
|
|
|
システム・タイマ割り込み処理部,および,far分岐情報が割り付けられる領域。
先頭が偶数番地で,0x000c0〜0x0ffffの領域に配置可能。
|
|
|
|
RI78V4のバージョンなどといった情報が割り付けられる領域。
フラッシュメモリ領域内で,先頭が偶数番地,かつ64K-1境界にまたがらない領域に配置可能。
|
|
|
|
動的に変化することのないOS資源に関する初期情報が,システム情報テーブルや割り込み情報定義ファイルに割り付けられる領域。
フラッシュメモリ領域内で,先頭が偶数番地,かつ64K-1境界にまたがらない領域に配置可能。
|
|
|
|
システム・スタック,および,タスク・スタックが割り付けられる領域。
先頭が偶数番地で,内蔵RAM内0xf0000〜0xfffffの領域,かつ,64KB-1境界にまたがらない領域に配置可能。
|
|
|
|
RI78V4が提供する機能を実現するうえで必要となる情報,および,動的に変化するOS資源に関する情報が管理オブジェクトとして割り付けられる領域。
先頭が偶数番地で,内蔵RAM内0xf0000〜0xfffffの領域,かつ,64KB-1境界にまたがらない領域に配置可能。
|
|
|
|
先頭が偶数番地で,内蔵RAM内0xf0000〜0xfffffの領域,かつ,64KB-1境界にまたがらない領域に配置可能。
|
|
|
|
データキュー,および固定長メモリ・プールが割り付けられる領域。
先頭が偶数番地で,内蔵RAM内0xf0000〜0xfffffの領域,かつ,64KB-1境界にまたがらない領域に配置可能。
|
|
|
|
先頭が偶数番地で,内蔵RAM内0xf0000〜0xfffffの領域,かつ,64KB-1境界にまたがらない領域に配置可能。
|
|
|
|
トレース・データの取得に必要な情報が割り付けられる領域。
フラッシュメモリ領域内で,先頭が偶数番地,かつ64K-1境界にまたがらない領域に配置可能。
|
|
|
|
先頭が偶数番地で,0x000c0〜0xeffffの領域に配置可能。
|
|
|
|
|
備考1 .kernel_work0,.kernel_work1,.kernel_work2,.kernel_work3については,
データ・キュー情報,または
固定長メモリ・プール情報で該当セクション名の指定が行われた場合に限り必要となります。
備考2 RI78V4では,saddr領域(0xffe20〜0xfff1f)から8バイト分の領域を占有します。したがって,ユーザ側で利用可能なsaddr領域は,最大で247バイトとなります。
備考3 セクション開始アドレスで指定するセクション名は,RI78V4を使用したCS+環境では自動的に設定されます。開始アドレスを変更したい場合は,リンカの設定で変更してください。リンカの設定についての詳細は,「CS+ RL78ビルド編」を参照してください。
備考4 セクションの開始アドレスを指定についての詳細は,「CS+ RL78コーディング編」を参照してください。
2.5.1 .kernel_systemセクション
.kernel_systemセクションのサイズは,処理プログラム内で使用するサービス・コールに依存し,約1Kバイト〜9Kバイトとなります。
2.5.2 .kernel_system_timer_nセクション
以下に,.kernel_system_timer_nセクションのサイズ(単位:バイト)を見積もる際に必要となる計算式を示します。
system_timer_n = 16+(
inthnum_FAR×8 )
2.5.3 .kernel_system_trace_fセクション
以下に,.kernel_system_trace_fセクションのサイズ(単位:バイト)は示します。
【 トレース・モードが「ハードウェア・トレース・チャート・モード」の場合 】
【 トレース・モードが「ソフトウェア・トレース・チャート・モード」の場合 】
【 トレース・モードが「長時間統計トレース・モード」の場合 】
.kernel_infoセクションのサイズは,16バイトとなります。
以下に,.kernel_constセクションのサイズ(単位:バイト)を見積もる際に必要となる計算式を示します。
const = (
tsknum×10 )+
semnum+
flgnum+(
dtqnum×5 )+(
mpfnum×8 )+(
cycnum×12 )+(
kindnum×4 )+16
2.5.6 .kernel_const_fセクション
以下に,.kernel_const_fセクションのサイズ(単位:バイト)を示します。
【 トレース・モードが「ハードウェア・トレース・チャート・モード」の場合 】
【 トレース・モードが「ソフトウェア・トレース・チャート・モード」の場合 】
【 トレース・モードが「長時間統計トレース・モード」の場合 】
以下に,.kernel_stackセクションのサイズ(単位:バイト)を見積もる際に必要となる計算式を示します。
stack = Σ(
stksz k+20 )+(
sys_stksz+2 )
stksz k:
タスク情報で指定した“スタック・サイズ”
sys_stksz:
スタック情報で指定した“スタック・サイズ”。多重割り込みが入る場合は1回につき18バイト加算。
以下に,.kernel_dataセクションのサイズ(単位:バイト)を見積もる際に必要となる計算式を示します。
ただし,該当計算式は,システム・コンフィギュレーション・ファイルに“
セマフォ情報が定義されているか否か”により異なります。
data = align2 (
maxtpri+1 )+align2 { (
tsknum×24 )+(
semnum×2 )+1 }+align2 (
flgnum×3 )+align2 { (
dtqnum×4 )+1 }+(
mbxnum×8 )+align2 (
primbx )+(
mpfnum×4 )+(
cycnum×8 )+20
data = align2 (
maxtpri+1 )+(
tsknum×24 )+align2 (
flgnum×3 )+align2 { (
dtqnum×4 )+1 }+(
mbxnum×8 )+align2 (
primbx )+(
mpfnum×4 )+(
cycnum×8 )+20
maxtpri:
優先度情報で指定した“優先度範囲”
primbx:
メールボックス情報で属性(メッセージのキューイング方式)に“優先度順”を指定した総数
2.5.9 .kernel_data_initセクション
.kernel_data_initセクションのサイズは,2バイトとなります。
2.5.10 .kernel_work0,.kernel_work1,.kernel_work2,.kernel_work3セクション
以下に,.kernel_work0,.kernel_work1,.kernel_work2,.kernel_work3セクションのサイズ(単位:バイト)を見積もる際に必要となる計算式を示します。
work
X = Σ (
blkcnt k×
blksz k )+Σ (
dtqcnt k×4 )
2.5.11 .kernel_data_initセクション
.kernel_data_initセクションのサイズは,2バイトとなります。
2.5.12 .kernel_data_trace_nセクション
以下に,.kernel_data_trace_nセクションのサイズ(単位:バイト)を示します。
【 トレース・モードが「ハードウェア・トレース・チャート・モード」の場合 】
【 トレース・モードが「ソフトウェア・トレース・チャート・モード」の場合 】
data_trace_n = 8 +
bufsize
【 トレース・モードが「長時間統計トレース・モード」の場合 】
data_trace_n = { (
tsknum+1)×20 ) }+ { (
inhnum+1)
×8 ) }+34
2.5.13 .kernel_const_trace_fセクション
以下に,.kernel_const_trace_fセクションのサイズ(単位:バイト)を示します。
【 トレース・モードが「ハードウェア・トレース・チャート・モード」の場合 】
【 トレース・モードが「ソフトウェア・トレース・チャート・モード」の場合 】
【 トレース・モードが「長時間統計トレース・モード」の場合 】
プロジェクトの新規作成,または既存のプロジェクトの読み込みを行います。
備考 プロジェクトの新規作成,および既存のプロジェクトの読み込みについての詳細は,「RIシリーズ 起動編」,および「CS+ 起動編」を参照してください。
ビルドの設定や実行を行う場合は,アクティブ・プロジェクトを設定します。
なお,サブプロジェクトがない場合,プロジェクトは常にアクティブになります。
備考 アクティブ・プロジェクトの設定についての詳細は,「CS+ RL78 ビルド編」を参照してください。
プロジェクトへのビルド対象ファイルの追加/削除,依存関係の更新などを行います。
備考 プロジェクトへのビルド対象ファイルの追加/削除,依存関係の更新についての詳細は,「CS+ RL78ビルド編」を参照してください。
以下に,ロード・モジュールを生成する際に必要となるファイル群の一覧を示します。
備考 システム・コンフィギュレーション・ファイル名の拡張子は,“cfg”を指定してください。
拡張子が異なる場合は,“cfg”が自動的に付加されます(例えば,ファイル名に“aaa.c”を指定した場合,“aaa.c.cfg”となります)。
- RI78V4が提供しているライブラリ・ファイル
- Cコンパイラ/アセンブラ・パッケージが提供しているライブラリ・ファイル
備考1
プロジェクト・ツリー パネルにシステム・コンフィギュレーション・ファイルを追加すると,リアルタイムOS生成ファイル・ノードが表示されます。
リアルタイムOS生成ファイル・ノードには,以下の情報ファイルが表示されます。ただし,この時点では,これらのファイルは生成されません。
- システム情報ヘッダ・ファイル(アセンブリ言語用)
図2−2 プロジェクト・ツリー パネル(sys.cfg追加後)
備考2 システム・コンフィギュレーション・ファイルを差し替える場合は,追加しているシステム・コンフィギュレーション・ファイルを一旦プロジェクトから外したのち,再度ファイルを追加してください。
備考3 システム・コンフィギュレーション・ファイルは,プロジェクトに複数追加することができますが,有効となるのは最初に追加したファイルです。有効なファイルをプロジェクトから外しても,追加済みのファイルは有効にならないため,再度ファイルを追加してください。
プロジェクト・ツリーでシステム・コンフィギュレーション・ファイルを選択し,
プロパティ パネルをオープンします。
図2−3 プロパティ パネル:[システム・コンフィギュレーション・ファイル情報]タブ
ビルドの生成物として,ロード・モジュール・ファイルを出力することを設定します。
備考 ロード・モジュールの出力指定についての詳細は,「CS+ RL78ビルド編」を参照してください。
プロパティ パネルの
[タスク・アナライザ]タブで,RI78V4が提供しているユーティリティ・ツール“タスク・アナライザ・ツール”を利用して処理プログラムの実行履歴(トレース・データ)を解析する際に必要となる情報を設定します。
コンパイラ,アセンブラ,リンカなどに対するオプションを設定します。
備考 ビルド・オプションの設定についての詳細は,「CS+ RL78 ビルド編」を参照してください。
ビルドを実行し,ロード・モジュール・ファイルを生成します。
備考 ビルドの実行についての詳細は,「CS+ RL78 ビルド編」を参照してください。
図2−5 プロジェクト・ツリー パネル(ビルド実行後)
プロジェクトの設定情報をプロジェクト・ファイルに保存します。
備考 プロジェクトの保存についての詳細は,「CS+ 起動編」を参照してください。
その後,フラッシュメモリへの書き込みなどによりシステムへの組み込みを行います。