Everything

第2章  システム構築


本章では,RI600V4が提供している機能を利用したシステム(ロード・モジュール)の構築手順について解説しています。
2.1 概  要
システム構築とは,RI600V4の提供媒体からユーザの開発環境(ホスト・マシン)上にインストールされたファイル群(カーネル・ライブラリなど)を用いてロード・モジュールを生成することです。
図2-1に,システム構築の手順を示します。
図2-1  システム構築の手順
RI600V4では,ロード・モジュールを生成する際に必要となるファイル群のサンプル・プログラムを提供しています。
サンプル・プログラムは,以下のフォルダに格納されています。ソース・ファイルは,appliサブ・フォルダに格納されています。
<ri_sample> = <CubeSuite+_root>\SampleProjects\RX\デバイス名_RI600V4
- <CubeSuite+_root>
CubeSuite+のインストール・フォルダを表します。
デフォルトでは,“ C:\Program Files\Renesas Electronics\CubeSuite+”となります。
- SampleProjects
CubeSuite+のサンプル・プロジェクト・フォルダです。
- RX
RX MCU用のサンプル・プロジェクト・フォルダです。
- デバイス名_RI600V4
RI600V4のサンプル・プロジェクト・フォルダです。このフォルダに,プロジェクト・ファイルがあります。
デバイス名: サンプルを提供しているデバイス名を表しています。
2.2 処理プログラムの記述
システムとして実現すべき処理を記述します。
なお,RI600V4では,処理プログラムを実現すべき処理の種類,および,用途にあわせて以下に示した4種類に分類しています。
- タ ス ク
他処理プログラム(割り込みハンドラ,周期ハンドラ,およびアラーム・ハンドラ)とは異なり,RI600V4が提供するサービス・コールを使用して明示的に操作しないかぎり実行されることのない処理プログラムです。
- 周期ハンドラ
指定された周期時間毎に起動されるルーチンです。
なお,RI600V4では,周期ハンドラを“タスクとは独立したもの(非タスク)”として位置づけています。このため,一定の時間が経過した際には,システム内で最高優先度を持つタスクが処理を実行中であっても,その処理は中断され,周期ハンドラに制御が移ります。
- アラーム・ハンドラ
指定した時間後に一度だけ起動されるルーチンです。
なお,RI600V4では,アラーム・ハンドラを“タスクとは独立したもの(非タスク)”として位置づけています。このため,一定の時間が経過した際には,システム内で最高優先度を持つタスクが処理を実行中であっても,その処理は中断され,アラーム・ハンドラに制御が移ります。
- 割り込みハンドラ
割り込みが発生した際に起動されるルーチンです。
なお,RI600V4では,割り込みハンドラを“タスクとは独立したもの(非タスク)”として位置づけています。このため,割り込みが発生した際には,システム内で最高優先度を持つタスクが処理を実行中であっても,その処理は中断され,割り込みハンドラに制御が移ります。
備考 処理プログラムについての詳細は,「第3章 タスク管理機能」,「第8章 時間管理機能」,「第10章 割り込み管理機能」を参照してください。
2.3 システム・コンフィギュレーション・ファイルの記述
RI600V4に提供するデータを保持した情報ファイルを生成する際に必要となるシステム・コンフィギュレーション・ファイルを記述します。
備考1 システム・コンフィギュレーション・ファイルについての詳細は,「第19章 システム・コンフィギュレーション・ファイル」を参照してください。
備考2 リアルタイムOSタスク・アナライザを「ソフトウェア・トレース・モードでトレース・チャートを取得」または「ソフトウェア・トレース・モードで長時間統計を取得」で使用する場合は,システム・コンフィギュレーション・ファイルに,ユーザ・オウン・コーディング部で作成した割り込みハンドラを定義する必要があります。詳細は,「第15章 リアルタイムOSタスク・アナライザ」を参照してください。
2.4 ユーザ・オウン・コーディング部の記述
- システム・ダウン・ルーチン(_RI_sys_dwn__( ) )
システム・ダウン・ルーチンは,システム・ダウンが発生したときに呼び出されます。
- ソフトウェア・トレース・モードのユーザ・オウン・コーディング部
ソフトウェア・トレース・モードを使用する場合は,タイム・スタンプを取得するためのユーザ・オウン・コーディング部を実装する必要があります。
- ブート処理関数(PowerON_Reset_PC( ))
ブート処理は,リセットベクタに登録され,RI600V4が処理を実行するうえで必要となる最低限のハードウエアやソフトウエアを初期化するためにユーザ・オウン・コーディング部として切り出された初期化処理専用ルーチンです。また,cfg600が出力したROM定義ファイルとRAM定義ファイルを取り込む役割も担います。
- セクション情報ファイル(ユーザ・オウン・コーディング部)
初期化する未初期化データ・セクションおよび初期化データ・セクションを定義します。
備考 ユーザ・オウン・コーディング部についての詳細は,「第13章 システム・ダウン」,「第15章 リアルタイムOSタスク・アナライザ」,「第16章 システム初期化処理」を参照してください。
2.5 ロード・モジュールの生成
2.2 処理プログラムの記述」から「2.4 ユーザ・オウン・コーディング部の記述」で作成されたファイル群,および,RI600V4,Cコンパイラ・パッケージが提供しているライブラリ・ファイルに対して,CubeSuite+上でビルドを実行し,ロード・モジュールを生成します。
1 ) プロジェクトの作成/読み込み
プロジェクトの新規作成,または既存のプロジェクトの読み込みを行います。
備考 プロジェクトの新規作成,および既存のプロジェクトの読み込みについての詳細は,「RIシリーズ 起動編」,「CubeSuite+ 起動編」,および本製品のリリースノートを参照してください。
2 ) ビルド対象プロジェクトの設定
ビルドの設定や実行を行う場合は,アクティブ・プロジェクトを設定します。
なお,サブプロジェクトがない場合,プロジェクトは常にアクティブになります。
備考 アクティブ・プロジェクトの設定についての詳細は,「CubeSuite+ RXビルド編」を参照してください。
3 ) バージョンの確認
プロジェクト・ツリーでリアルタイムOSノードを選択し,プロパティ パネルをオープンします。
[RI600V4]タブの[カーネル・バージョン]プロパティにおいて,使用するRI600V4のバージョンを確認します。
図2-2  プロパティ パネル:[RI600V4]タブ
4 ) ビルド対象ファイルの設定
プロジェクトへのビルド対象ファイルの追加/削除,依存関係の更新などを行います。
備考 プロジェクトへのビルド対象ファイルの追加/削除,依存関係の更新についての詳細は,「CubeSuite+ RXビルド編」を参照してください。
以下に,ロード・モジュールを生成する際に必要となるファイル群の一覧を示します。
- 「2.2 処理プログラムの記述」で作成されたソース・ファイル
- 処理プログラム(タスク,周期ハンドラ,アラーム・ハンドラ,割り込みハンドラ)
- 「2.3 システム・コンフィギュレーション・ファイルの記述」で作成されたシステム・コンフィギュレーション・ファイル
備考 システム・コンフィギュレーション・ファイル名の拡張子は,“cfg”を指定してください。
拡張子が異なる場合は,“cfg”が自動的に付加されます(例えば,ファイル名に“aaa.c”を指定した場合,“aaa.c.cfg”となります)。
- 「2.4 ユーザ・オウン・コーディング部の記述」で作成されたソース・ファイル
- ユーザ・オウン・コーディング部(システム・ダウン・ルーチン,ブート処理)
- RI600V4が提供しているライブラリ・ファイル
- カーネル・ライブラリ(「2.6.3 カーネル・ライブラリ」参照)
- Cコンパイラ・パッケージが提供しているライブラリ・ファイル
- 標準ライブラリ,数学ライブラリなど
備考1 プロジェクト・ツリー パネルにシステム・コンフィギュレーション・ファイルを追加すると,リアルタイムOS生成ファイル・ノードが表示されます。
リアルタイムOS生成ファイル・ノードには,以下の情報ファイルが表示されます。ただし,この時点では,これらのファイルは生成されません。
- システム情報ヘッダ・ファイル(kernel_id.h)
- サービス・コール定義ファイル(kernel_sysint.h)
- ROM定義ファイル(kernel_rom.h)
- RAM定義ファイル(kernel_ram.h)
- システム定義ファイル(ri600.inc)
- CMTタイマ定義ファイル(ri_cmt.h)
- テーブル・ファイル(ritable.src)
図2-3  プロジェクト・ツリー パネル
備考2 システム・コンフィギュレーション・ファイルを差し替える場合は,追加しているシステム・コンフィギュレーション・ファイルを一旦プロジェクトから外したのち,再度ファイルを追加してください。
備考3 システム・コンフィギュレーション・ファイルは,プロジェクトに複数追加することができますが,有効となるのは最初に追加したファイルです。有効なファイルをプロジェクトから外しても,追加済みのファイルは有効にならないため,再度ファイルを追加してください。
5 ) リアルタイムOS生成ファイルの出力指定
プロジェクト・ツリーでシステム・コンフィギュレーション・ファイルを選択し,プロパティ パネルをオープンします。
[システム・コンフィギュレーション・ファイル関連情報]タブにおいて,リアルタイムOS生成ファイルの出力設定などを行います。
図2-4  プロパティ パネル:[システム・コンフィギュレーション・ファイル情報]タブ
6 ) ロード・モジュール・ファイルの出力指定
ビルドの生成物として,ロード・モジュール・ファイルを出力することを設定します。
備考 ロード・モジュールの出力指定についての詳細は,「CubeSuite+ RXビルド編」を参照してください。
7 ) ビルド・オプションの設定
コンパイラ,アセンブラ,リンカなどに対するオプションを設定します。
必ず「2.6 ビルド・オプション」を参照してください。
備考 ビルド・オプションの設定についての詳細は,「CubeSuite+ RXビルド編」を参照してください。
8 ) ビルドの実行
ビルドを実行し,ロード・モジュール・ファイルを生成します。
備考 ビルドの実行についての詳細は,「CubeSuite+ RXビルド編」を参照してください。
図2-5  プロジェクト・ツリー パネル(ビルド実行後)
9 ) プロジェクトの保存
プロジェクトの設定情報をプロジェクト・ファイルに保存します。
備考 プロジェクトの保存についての詳細は,「CubeSuite+ 起動編」を参照してください。
2.6 ビルド・オプション
ここでは,特に留意すべきビルド・オプションについて解説します。
2.6.1 サービス・コール情報ファイルとコンパイラ・オプション“-ri600_preinit_mrc”
サービス・コール情報ファイル(mrcファイル)は,kernel.hをインクルードするファイルのコンパイルによって,オブジェクト・ファイルと同じフォルダに生成されます。
mrcファイルには,ソース中で使用しているサービス・コール名が出力されます。テーブル生成ユーティリティmkritblには,mrcファイルが格納されたパスを漏れなく指定する必要があります。漏れがある場合,アプリケーションで使用しているサービス・コール・モジュールがリンクされない場合があります。この場合,そのサービス・コールを呼び出したときにシステム・ダウンとなります。
逆に,過去に生成され,現在は無効なmrcファイルをmkritblに入力した場合は,アプリケーションで使用していないサービス・コール・モジュールがリンクされる場合があります。この場合,RI600V4の動作に問題は生じませんが,コードサイズが無駄に大きくなってしまうことになります。
また,kernel.hをインクルードするファイルのコンパイル時には,オプション“-ri600_preinit_mrc”を指定してください。本オプションを指定しなくてもRI600V4の動作に問題は生じませんが,アプリケーションで使用していないサービス・コール・モジュールがリンクされる場合があります。この場合,RI600V4の動作に問題は生じませんが,コードサイズが無駄に大きくなってしまうことになります。
アプリケーションをライブラリ化する場合は,コンパイル時に生成されたmrcファイルもmkritblに入力してください。これが難しい場合,使用しているサービス・コール名を羅列したmrcファイル(下記例を参照)を作成し,mkritblに入力してください。
なお,組み込まれていないサービス・コールを呼び出した場合は,システム・ダウンとなります。
 sta_tsk
 snd_mbx
 rcv_mbx
 prcv_mbx

2.6.2 ブート処理ファイルのコンパイラ・オプション
16.2.3 ブート処理ファイルのコンパイラ・オプション」に記載のように,ブート処理ファイル(サンプル・プロジェクトでは“resetprg.c”)にはオプション“-nostuff”を設定する必要があります。そうでない場合,RI600V4は正常に動作しません。
オプション“-nostuff”をブート処理ファイルのみに設定するにはブート処理ファイルの[プロパティ]パネルの[個別コンパイル・オプション]タブで,オプション“-nostuff”を全ファイルに設定するには[CC-RX(ビルド・ツール)]の[プロパティ] パネルの[コンパイル・オプション]タブで,以下のいずれかを設定してください。
1 ) [オブジェクト]カテゴリで設定する
図2-6のように,[初期値なし変数をアライメント4のセクションに配置する],[初期値あり変数をアライメント4のセクションに配置する],および[const修飾変数をアライメント4のセクションに配置する]を”はい”に設定してください。
図2-6  [オブジェクト]カテゴリ
2 ) [その他]カテゴリで設定する
図2-7のように,[その他の追加オプション]に“-nostuff”を追加してください。
図2-7  [その他]カテゴリ
2.6.3 カーネル・ライブラリ
カーネルライブラリは,表2-1に示すフォルダに格納されています。ただし,CubeSuite+が自動的に適切なカーネル・ライブラリをリンクするので,ユーザはカーネル・ライブラリを意識する必要はありません。
表2-1  カーネル・ライブラリ
フォルダ
対応コンパイラ・バージョン
対応CPUコア
ファイル名
説明
1
<ri_root>\library\rxv1
V1.02.01以降
RXv1アーキテクチャ
ri600lit.lib
リトル・エンディアン用
ri600big.lib
ビッグ・エンディアン用
2
<ri_root>\library\rxv2
V2.01.00以降
RXv1アーキテクチャおよびRXv2アーキテクチャ
ri600lit.lib
リトル・エンディアン用
ri600big.lib
ビッグ・エンディアン用

備考1 <ri_root>は,RI600V4のインストール・フォルダを表しています。
デフォルトは,“ C:\Program Files\Renesas Electronics\CubeSuite+\RI600V4”です。
備考2 コンパイラCC-RX V2.01.00以降を使用時は項番2,それ以外の場合は項番1のライブラリがリンクされます。
2.6.4 セクション配置
セクション配置は,リンカのオプション“-start”で指定します。CubeSuite+では,[CC-RX(ビルド・ツール)]プロパティの[リンク・オプション]タブの[セクション]カテゴリで設定します。
1 ) RI600V4のセクション
表2-2に,RI600V4のセクションを示します。
表2-2  RI600V4セクション一覧
セクション名
属性
アライメント数
ROM/RAM
意味
PRI_KERNEL
CODE
1
ROM/RAM
RI600V4プログラム
CRI_ROM
ROMDATA
4
ROM/RAM
RI600V4定数
FIX_INTERRUPT_VECTOR
ROMDATA
4
ROM
固定ベクタ・テーブル/例外ベクタ・テーブルです。後述の「FIX_INTERRUPT_VECTORセクション」を参照してください。
INTERRUPT_VECTOR
ROMDATA
4
ROM/RAM
可変ベクタ・テーブル(1KB)
BRI_RAM
DATA
4
RAM
RI600V4の変数セクションです。
データ・キュー領域も含まれます。
DRI_ROM
ROMDATA
4
ROM/RAM
RI600V4の初期化データです。サイズは4バイト固定です。
RRI_RAM
DATA
4
RAM
BRI_TRCBUF
DATA
4
RAM
本セクションは,[タスク・アナライザ]タブで[ソフトウェア・トレース・モードでトレース・チャートを取得]および[カーネルのバッファ]を選択した場合にのみ生成されます。サイズは,[タスク・アナライザ]タブで指定します。
BRI_HEAP
DATA
4
RAM
メッセージ・バッファ,可変長メモリ・プール,固定長メモリ・プール領域に付与するセクション名は,システム・コンフィギュレーション・ファイルで指定することができます。
これを省略した場合,その領域のセクション名がBURI_HEAPとなります。
SI
DATA
4
RAM
システム・スタック
SURI_STACK
DATA
4
RAM
タスクのユーザ・スタックに付与するセクション名は,システム・コンフィギュレーション・ファイルで指定することができます。これを省略した場合,ユーザ・スタックのセクション名がSURI_STACKとなります。

2 ) FIX_INTERRUPT_VECTORセクション
コンフィギュレータcfg600は,システム・コンフィギュレーション・ファイルの“interrupt_fvector[]”の定義内容に従って,固定ベクタ・テーブル/例外ベクタ・テーブルをFIX_INTERRUPT_VECTOR セクションとして生成します。
- RXv1アーキテクチャ使用時
RXv1アーキテクチャでは,固定ベクタ・テーブルは0xFFFFFF80番地に固定されています。FIX_INTERRUPT_VECTORセクションは0xFFFFFF80番地に配置してください。
FIX_INTERRUPT_VECTORセクションを0xFFFFFF80番地以外に配置した場合は,システム・コンフィギュレーション・ファイルの“interrupt_fvector[]”はすべて無視され,固定ベクタ・テーブルに割り当てられている例外要因(リセットを除く)が発生した時にシステム・ダウンとなる機能は正常に動作しません。ユーザ側で固定ベクタ・テーブルを0xFFFFFF80番地に生成してください。
- RXv2アーキテクチャ使用時
RXv2 アーキテクチャでは,RXv1 アーキテクチャの「固定ベクタ・テーブル」は「例外ベクタ・テーブル」と呼称が変更され,その先頭アドレスをEXTB レジスタで設定できるようになりました。EXTB レジスタのリセット時の初期値は,RXv1 アーキテクチャの固定ベクタ・テーブルと同じ0xFFFFFF80 です。
FIX_INTERRUPT_VECTOR セクションは,通常はリンク時に0xFFFFFF80 番地に配置してください。
FIX_INTERRUPT_VECTORセクションを0xFFFFFF80 番地以外に配置した場合は,システム・コンフィギュレーション・ファイルの“interrupt_fvector[31]”(リセット・ベクタ)は無視されます。ユーザ側でリセット・ベクタ(0xFFFFFFFC 番地)を用意してください。また,ブート処理関数(PowerON_Reset_PC( ))でEXTB レジスタをFIX_INTERRUPT_VECTOR セクションの先頭アドレスに初期化してください。
3 ) 0番地に関する注意
以下が0番地とならないようにしてください。
- 固定長メモリ・プール領域
- 可変長メモリ・プール領域
- メールボックスに送信するメッセージ
2.6.5 初期化データ・セクション
セクション情報ファイル(ユーザ・オウン・コーディング部)のDTBLに記述した初期化データセクションは,リンカのオプション“-rom”を用いてROMに配置されたセクションをRAM上のセクションにマップする設定を行う必要があります。図2-8のように,[CC-RX(ビルド・ツール)]の[プロパティ] パネルの[リンク・オプション]タブの[セクション]カテゴリを設定してください。
図2-8  ROMからRAMへマップするセクション
備考 RI600V4が提供するサンプルプロジェクトでは,RI600V4の“DRI_ROM”セクションの“RRI_RAM”セクションへのマップを設定済みです。
2.6.6 リアルタイムOSタスク・アナライザに関するオプション
[タスク・アナライザ]タブのトレース・モードの設定に応じて,表2-3に示すビルド・オプションが自動設定されます。ただし,この自動設定機能は,対応する機能のプロパティパネルとは連動していないため,自動設定された内容を対応する機能のプロパティパネルで変更してはなりません。
表2-3 
トレース・モード
アセンブラのオプション
リンカのオプション
ハードウェア・トレース・モードでトレース・チャートを取得
-define=TRCMODE=1
なし
ソフトウェア・トレース・モードでトレース・チャートを取得,カーネルのバッファを使用
-define=TRCMODE=2
-define=TRCBUFSZ=<バッファ・サイズ>
また,「バッファを使い切った後の動作」として「トレースを停止する」を選択した場合は,さらに以下を設定します。
-define=TRCBUFMODE=1
なし
ソフトウェア・トレース・モードでトレース・チャートを取得,その他のバッファを使用
-define=TRCMODE=2
また,「バッファを使い切った後の動作」として「トレースを停止する」を選択した場合は,さらに以下を設定します。
-define=TRCBUFMODE=1
-define=__RI_TRCBUF
   =<バッファ・アドレス>
-define=__RI_TRCBUFSZ
   =<バッファ・サイズ>
ソフトウェア・トレース・モードで長時間統計を取得
-define=TRCMODE=3
なし
トレースしない
なし
なし
リアルタイムOSタスク・アナライザ用に自動設定されるオプション
備考1 “TRCMODE”は,以下のファイルで利用しています。
- ritable.src:コンフィギュレータcfg600が出力
- trcSW_cmt.src:「ソフトウェア・トレース・モードでトレース・チャートを取得」用のユーザ・オウン・コーディング部のサンプル
- trcLONG_cmt.src:「ソフトウェア・トレース・モードで長時間統計を取得」用のユーザ・オウン・コーディング部のサンプル
備考2 “TRCBUFSZ”および“TRCBUFMODE”は,“ritable.src”で利用しています。