第2章  システム構築


本章では,RI78V4が提供している機能を利用したシステム(ロード・モジュール)の構築手順について解説しています。

2.1 概  要

システム構築とは,RI78V4の提供媒体からユーザの開発環境(ホスト・マシン)上にインストールされたファイル群(カーネル・ライブラリなど)を用いてロード・モジュールを生成することです。

以下に,システム構築の手順を示します。

図2−1  システム構築の手順



2.2 処理プログラムの記述

システムとして実現すべき処理を記述します。

なお,RI78V4では,処理プログラムを実現すべき処理の種類/用途にあわせて以下に示した3種類に分類しています。

- タ ス ク
他の処理プログラム(周期ハンドラ,割り込みハンドラなど)とは異なり,RI78V4が提供するサービス・コールを使用して明示的に操作しない限り実行されることのない処理プログラムです。

備考 タスクについての詳細は,「3.2 タ ス ク」を参照してください。

- 周期ハンドラ
一定の時間(起動周期)を単位として周期的に起動される周期処理専用ルーチンです。
なお,RI78V4では,周期ハンドラを“非タスク(タスクとは独立したもの)”として位置づけています。このため,起動周期に達した際には,システム内で最高優先度を持つタスクが処理を実行中であっても,その処理は中断され,周期ハンドラに制御が移ります。


備考 周期ハンドラについての詳細は,「7.5 周期ハンドラ」を参照してください。

- 割り込みハンドラ
割り込みが発生した際に起動される割り込み処理専用ルーチンです。
なお,RI78V4では,割り込みハンドラを“非タスク(タスクとは独立したもの)”として位置づけています。このため,割り込みが発生した際には,システム内で最高優先度を持つタスクが処理を実行中であっても,その処理は中断され,割り込みハンドラに制御が移ります。


備考1 割り込みハンドラについての詳細は,「9.3 割り込みハンドラ」を参照してください。

備考2 “タイマ・ハンドラの呼び出し”を行う割り込みハンドラについても,ユーザが記述する必要があります。

2.3 システム・コンフィギュレーション・ファイルの記述

RI78V4に提供するデータを保持した情報ファイル(システム情報テーブル・ファイル,システム情報ヘッダ・ファイル,割り込み情報定義ファイル)を生成する際に必要となるシステム・コンフィギュレーション・ファイルを記述します。

備考 システム・コンフィギュレーション・ファイルについての詳細は,「第13章 システム・コンフィギュレーション・ファイル」を参照してください。

2.4 ユーザ・オウン・コーディング部の記述

RI78V4を様々な実行環境に対応するために切り出されたユーザ・オウン・コーディング部を記述します。

なお,RI78V4では,ユーザ・オウン・コーディング部を実現すべき処理の種類/用途にあわせて以下に示した4種類に分類しています。

- 割り込みエントリ処理
割り込みが発生した際にCPUが強制的に制御を移すベクタ・テーブル・アドレスに該当処理(割り込みハンドラブート処理など)への分岐命令を割り付けるために割り込み管理機能から切り出されたエントリ処理専用ルーチンです。

備考1 割り込みエントリ処理についての詳細は,「9.2 割り込みエントリ処理」を参照してください。

備考2 割り込みハンドラをC言語で記述(システム・コンフィギュレーション・ファイルの割り込みハンドラ定義(DEF_INH)にてTA_HLNG属性を指定)する場合,Cコンパイラが“割り込み要求名に対応した割り込みエントリ処理”を自動的に出力するため,ユーザが割り込みエントリ処理を記述する必要はありません。

- ブート処理
RI78V4が処理を実行するうえで必要となる最低限のハードウエアを初期化するためにシステム構成管理機能から切り出された初期化処理専用ルーチンであり,リセット割り込みが発生した際にCPUが強制的に制御を移すベクタ・テーブル・アドレスに割り付けられた割り込みエントリ処理から呼び出されます。

備考 ブート処理についての詳細は,「10.2 ブート処理」を参照してください。

- 初期化ルーチン
ユーザの実行環境に依存したハードウエア(周辺コントローラなど)を初期化するためにシステム構成管理機能から切り出された初期化処理専用ルーチンであり,カーネル初期化部から呼び出されます。

備考 初期化ルーチンについての詳細は,「10.3 初期化ルーチン」を参照してください。

- アイドル・ルーチン
CPUが提供しているスタンバイ機能を有効活用(低消費電力システムの実現)するためにスケジューリング機能から切り出されたアイドル処理専用ルーチンであり,RI78V4のスケジューリング対象となるタスク(RUNNING状態,またはREADY状態のタスク)がシステム内に1つも存在しなくなった際にスケジューラから呼び出されます。

備考 アイドル・ルーチンについての詳細は,「11.7 アイドル・ルーチン」を参照してください。

2.5 セクションの開始アドレスの指定

リンカが行うアドレス割り付けをユーザが固定化するため,セクションの開始アドレスを指定します。本指定はリンカのオプションで指定します。

なお,RI78V4では,機能単位にモジュール化された管理オブジェクトの割り付け先(セクション名)を規定しています。

以下に,RI78V4が規定しているセクション名の一覧を示します。

表2−1  RI78V4のセクション

セクション名

配置領域

再配置属性

意味

.kernel_system

フラッシュ

メモリ領域

TEXTF

RI78V4の核となる処理部,および,RI78V4が提供するサービス・コールの本体処理部が割り付けられる領域。

先頭が偶数番地で,0x000c0〜0xeffffの領域に配置可能。

.kernel_system_timer_n

フラッシュ

メモリ領域

TEXT

システム・タイマ割り込み処理部,および,far分岐情報が割り付けられる領域。

先頭が偶数番地で,0x000c0〜0x0ffffの領域に配置可能。

.kernel_info

フラッシュ

メモリ領域

CONSTF

RI78V4のバージョンなどといった情報が割り付けられる領域。

フラッシュメモリ領域内で,先頭が偶数番地,かつ64K-1境界にまたがらない領域に配置可能。

.kernel_const

.kernel_const_f

フラッシュ

メモリ領域

CONSTF

動的に変化することのないOS資源に関する初期情報が,システム情報テーブルや割り込み情報定義ファイルに割り付けられる領域。

フラッシュメモリ領域内で,先頭が偶数番地,かつ64K-1境界にまたがらない領域に配置可能。

.kernel_stack

内部RAM

領域

BSS

システム・スタック,および,タスク・スタックが割り付けられる領域。

先頭が偶数番地で,内蔵RAM内0xf0000〜0xfffffの領域,かつ,64KB-1境界にまたがらない領域に配置可能。

.kernel_data

内部RAM

領域

BSS

RI78V4が提供する機能を実現するうえで必要となる情報,および,動的に変化するOS資源に関する情報が管理オブジェクトとして割り付けられる領域。

先頭が偶数番地で,内蔵RAM内0xf0000〜0xfffffの領域,かつ,64KB-1境界にまたがらない領域に配置可能。

.kernel_data_init

内部RAM

領域

BSS

RI78V4の初期化情報が割り付けられる領域。

先頭が偶数番地で,内蔵RAM内0xf0000〜0xfffffの領域,かつ,64KB-1境界にまたがらない領域に配置可能。

.kernel_work0

.kernel_work1

.kernel_work2

.kernel_work3

内部RAM

領域

BSS

データキュー,および固定長メモリ・プールが割り付けられる領域。

先頭が偶数番地で,内蔵RAM内0xf0000〜0xfffffの領域,かつ,64KB-1境界にまたがらない領域に配置可能。

.kernel_data_trace_n

内部RAM

領域

BSS

トレース・データが割り付けられる領域。

先頭が偶数番地で,内蔵RAM内0xf0000〜0xfffffの領域,かつ,64KB-1境界にまたがらない領域に配置可能。

.kernel_const_trace_f

フラッシュ

メモリ領域

CONSTF

トレース・データの取得に必要な情報が割り付けられる領域。

フラッシュメモリ領域内で,先頭が偶数番地,かつ64K-1境界にまたがらない領域に配置可能。

.kernel_system_trace_f

フラッシュ

メモリ領域

TEXTF

トレース・データ取得処理部が割り付けられる領域。

先頭が偶数番地で,0x000c0〜0xeffffの領域に配置可能。

.kernel_sbss

内部RAM

領域

SBSS

RI78V4が使用するSADDR領域。

saddr領域内で先頭が偶数番地の領域に配置。



備考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 )

tnthnum_FAR割り込みハンドラ情報のうちTA_FAR属性指定の割り込みハンドラの総数

2.5.3 .kernel_system_trace_fセクション

以下に,.kernel_system_trace_fセクションのサイズ(単位:バイト)は示します。

【 トレース・モードが「トレースなし」の場合 】

system_trace_f = 0

【 トレース・モードが「ハードウェア・トレース・チャート・モード」の場合 】

system_trace_f = 184

【 トレース・モードが「ソフトウェア・トレース・チャート・モード」の場合 】

system_trace_f = 706

【 トレース・モードが「長時間統計トレース・モード」の場合 】

system_trace_f = 590

2.5.4 .kernel_infoセクション

.kernel_infoセクションのサイズは,16バイトとなります。

2.5.5 .kernel_constセクション

以下に,.kernel_constセクションのサイズ(単位:バイト)を見積もる際に必要となる計算式を示します。

const = ( tsknum×10 )+semnumflgnum+( dtqnum×5 )+( mpfnum×8 )+( cycnum×12 )+( kindnum×4 )+16

tsknumタスク情報の総数

semnumセマフォ情報の総数

flgnumイベントフラグ情報の総数

dtqnumデータ・キュー情報の総数

mpfnum固定長メモリ・プール情報の総数

kindnum: OS資源に関する5種類の情報(セマフォ情報イベントフラグ情報データ・キュー情報メールボックス情報固定長メモリ・プール情報周期ハンドラ情報)のうち,システム・コンフィギュレーション・ファイルに定義されている種類の総数

2.5.6 .kernel_const_fセクション

以下に,.kernel_const_fセクションのサイズ(単位:バイト)を示します。

【 トレース・モードが「トレースなし」の場合 】

const_f = 0

【 トレース・モードが「ハードウェア・トレース・チャート・モード」の場合 】

const_f = 0

【 トレース・モードが「ソフトウェア・トレース・チャート・モード」の場合 】

const_f = 0

【 トレース・モードが「長時間統計トレース・モード」の場合 】

const_f = 63

2.5.7 .kernel_stackセクション

以下に,.kernel_stackセクションのサイズ(単位:バイト)を見積もる際に必要となる計算式を示します。

tsknum

stack = Σ( stksz k+20 )+( sys_stksz+2 )

k = 1

tsknumタスク情報の総数

stksz kタスク情報で指定した“スタック・サイズ”

sys_stkszスタック情報で指定した“スタック・サイズ”。多重割り込みが入る場合は1回につき18バイト加算。

2.5.8 .kernel_dataセクション

以下に,.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優先度情報で指定した“優先度範囲”

tsknumタスク情報の総数

semnumセマフォ情報の総数

flgnumイベントフラグ情報の総数

dtqnumデータ・キュー情報の総数

mbxnumメールボックス情報の総数

primbxメールボックス情報で属性(メッセージのキューイング方式)に“優先度順”を指定した総数

mpfnum固定長メモリ・プール情報の総数

cycnum周期ハンドラ情報の総数

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セクションのサイズ(単位:バイト)を見積もる際に必要となる計算式を示します。

mpfnum dtqnum

workX = Σ ( blkcnt k×blksz k )+Σ ( dtqcnt k×4 )

k = 1 k = 1

mpfnum固定長メモリ・プール情報のセクション単位の総数

blkcnt k固定長メモリ・プール情報で指定した“メモリ・ブロック数”

blksz k固定長メモリ・プール情報で指定した“ブロック・サイズ”

dtqnumデータ・キュー情報のセクション単位の総数

dtqcnt kデータ・キュー情報で指定した“データ数”

2.5.11 .kernel_data_initセクション

.kernel_data_initセクションのサイズは,2バイトとなります。

2.5.12 .kernel_data_trace_nセクション

以下に,.kernel_data_trace_nセクションのサイズ(単位:バイト)を示します。

【 トレース・モードが「トレースなし」の場合 】

data_trace_n = 0

【 トレース・モードが「ハードウェア・トレース・チャート・モード」の場合 】

data_trace_n = 2

【 トレース・モードが「ソフトウェア・トレース・チャート・モード」の場合 】

data_trace_n = 8 + bufsize

bufsizeトレース・バッファ・サイズ

【 トレース・モードが「長時間統計トレース・モード」の場合 】

data_trace_n = { ( tsknum+1)×20 ) }+ { ( inhnum+1) ×8 ) }+34

tsknumタスク情報の総数

inhnum割り込みハンドラ情報の総数

2.5.13 .kernel_const_trace_fセクション

以下に,.kernel_const_trace_fセクションのサイズ(単位:バイト)を示します。

【 トレース・モードが「トレースなし」の場合 】

const_trace_n = 6

【 トレース・モードが「ハードウェア・トレース・チャート・モード」の場合 】

const_trace_n = 64

【 トレース・モードが「ソフトウェア・トレース・チャート・モード」の場合 】

const_trace_n = 70

【 トレース・モードが「長時間統計トレース・モード」の場合 】

const_trace_n = 70

2.6 ロード・モジュールの生成

2.2 処理プログラムの記述」から「2.5 セクションの開始アドレスの指定」で作成されたファイル群,トレース情報ファイル,および,RI78V4やCコンパイラ・パッケージが提供しているライブラリ・ファイルに対して,CS+上でビルドを実行し,ロード・モジュールを生成します。

1 ) プロジェクトの作成/読み込み

プロジェクトの新規作成,または既存のプロジェクトの読み込みを行います。

備考 プロジェクトの新規作成,および既存のプロジェクトの読み込みについての詳細は,「RIシリーズ 起動編」,および「CS+ 起動編」を参照してください。

2 ) ビルド対象プロジェクトの設定

ビルドの設定や実行を行う場合は,アクティブ・プロジェクトを設定します。

なお,サブプロジェクトがない場合,プロジェクトは常にアクティブになります。

備考 アクティブ・プロジェクトの設定についての詳細は,「CS+ RL78 ビルド編」を参照してください。

3 ) ビルド対象ファイルの設定

プロジェクトへのビルド対象ファイルの追加/削除,依存関係の更新などを行います。

備考 プロジェクトへのビルド対象ファイルの追加/削除,依存関係の更新についての詳細は,「CS+ RL78ビルド編」を参照してください。

以下に,ロード・モジュールを生成する際に必要となるファイル群の一覧を示します。

- 「2.2 処理プログラムの記述」で作成されたC言語/アセンブリ言語ソース・ファイル

- タ ス ク周期ハンドラ割り込みハンドラ

- 「2.3 システム・コンフィギュレーション・ファイルの記述」で作成されたシステム・コンフィギュレーション・ファイル

- システム・コンフィギュレーション・ファイル

備考 システム・コンフィギュレーション・ファイル名の拡張子は,“cfg”を指定してください。
拡張子が異なる場合は,“cfg”が自動的に付加されます(例えば,ファイル名に“aaa.c”を指定した場合,“aaa.c.cfg”となります)。


- 「2.4 ユーザ・オウン・コーディング部の記述」で作成されたC言語/アセンブリ言語ソース・ファイル

- 割り込みエントリ処理ブート処理初期化ルーチンアイドル・ルーチン

- RI78V4が提供しているファイル

- トレース情報ファイル

- RI78V4が提供しているライブラリ・ファイル

- カーネル・ライブラリ

- Cコンパイラ/アセンブラ・パッケージが提供しているライブラリ・ファイル

- 標準ライブラリ,数学ライブラリなど

備考1 プロジェクト・ツリー パネルにシステム・コンフィギュレーション・ファイルを追加すると,リアルタイムOS生成ファイル・ノードが表示されます。
リアルタイムOS生成ファイル・ノードには,以下の情報ファイルが表示されます。ただし,この時点では,これらのファイルは生成されません。


- システム情報テーブル・ファイル

- システム情報ヘッダ・ファイル(C言語用)

- システム情報ヘッダ・ファイル(アセンブリ言語用)

- 割り込み情報定義ファイル

図2−2  プロジェクト・ツリー パネル(sys.cfg追加後)





備考2 システム・コンフィギュレーション・ファイルを差し替える場合は,追加しているシステム・コンフィギュレーション・ファイルを一旦プロジェクトから外したのち,再度ファイルを追加してください。

備考3 システム・コンフィギュレーション・ファイルは,プロジェクトに複数追加することができますが,有効となるのは最初に追加したファイルです。有効なファイルをプロジェクトから外しても,追加済みのファイルは有効にならないため,再度ファイルを追加してください。

4 ) 情報ファイルの出力指定

プロジェクト・ツリーでシステム・コンフィギュレーション・ファイルを選択し,プロパティ パネルをオープンします。

[システム・コンフィギュレーション・ファイル関連情報]タブにおいて,情報ファイル(システム情報テーブル・ファイル,システム情報ヘッダ・ファイル)を出力することを設定します。

図2−3  プロパティ パネル:[システム・コンフィギュレーション・ファイル情報]タブ



5 ) ロード・モジュール・ファイルの出力指定

ビルドの生成物として,ロード・モジュール・ファイルを出力することを設定します。

備考 ロード・モジュールの出力指定についての詳細は,「CS+ RL78ビルド編」を参照してください。

6 ) トレース機能の設定

プロパティ パネル[タスク・アナライザ]タブで,RI78V4が提供しているユーティリティ・ツール“タスク・アナライザ・ツール”を利用して処理プログラムの実行履歴(トレース・データ)を解析する際に必要となる情報を設定します。

図2−4  [タスク・アナライザ]タブ





7 ) ビルド・オプションの設定

コンパイラ,アセンブラ,リンカなどに対するオプションを設定します。

備考 ビルド・オプションの設定についての詳細は,「CS+ RL78 ビルド編」を参照してください。

8 ) ビルドの実行

ビルドを実行し,ロード・モジュール・ファイルを生成します。

備考 ビルドの実行についての詳細は,「CS+ RL78 ビルド編」を参照してください。

図2−5  プロジェクト・ツリー パネル(ビルド実行後)



9 ) プロジェクトの保存

プロジェクトの設定情報をプロジェクト・ファイルに保存します。

備考 プロジェクトの保存についての詳細は,「CS+ 起動編」を参照してください。

2.7 システムへの組み込み

2.6 ロード・モジュールの生成」の4 )でヘキサ・ファイルの出力を設定すると,ヘキサ・ファイルも生成します。

その後,フラッシュメモリへの書き込みなどによりシステムへの組み込みを行います。