第2章  システム構築


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

2.1 概  要

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

図2−1に,システム構築の手順を示します。

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



RI600PXでは,ロード・モジュールを生成する際に必要となるファイル群のサンプル・プログラムを提供しています。

サンプル・プログラムは,以下のフォルダに格納されています。ソース・ファイルは,appliサブ・フォルダに格納されています。

<ri_sample> = <CubeSuite+_root>\SampleProjects\RX\デバイス名_RI600PX

- <CubeSuite+_root>

CubeSuite+のインストール・フォルダを表します。

デフォルトでは,“ C:\Program Files\Renesas Electronics\CubeSuite+”となります。

- SampleProjects

CubeSuite+のサンプル・プロジェクト・フォルダです。

- RX

RX MCU用のサンプル・プロジェクト・フォルダです。

- デバイス名_RI600PX

RI600PXのサンプル・プロジェクト・フォルダです。このフォルダに,プロジェクト・ファイルがあります。

デバイス名: サンプルを提供しているデバイス名を表しています。

2.2 処理プログラムの記述

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

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

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

- タスク例外処理ルーチン
タスクに対してタスク例外を要求すると,タスク毎に定義されたタスク例外処理ルーチンが起動されます。タスク例外処理ルーチンには,要求された例外要因が渡されます。

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


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


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


備考 処理プログラムについての詳細は,「第4章 タスク管理機能」,「第6章 タスク例外処理機能」,「第10章 時間管理機能」,「第12章 割り込み管理機能」を参照してください。

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

RI600PXに提供するデータを保持した情報ファイルを生成する際に必要となるシステム・コンフィギュレーション・ファイルを記述します。

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

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

- メモリ保護機能

- アクセス例外ハンドラ(_RI_sys_access_exception( ))
アクセス例外ハンドラは,タスクまたはタスク例外処理ルーチンが許可されていないメモリ・アクセスを行ったときに起動されます。

- 時間管理機能

- 基本クロック用タイマ初期化ルーチン(_RI_init_cmt_knl( ))
基本クロック用タイマ初期化ルーチンは,RI600PX起動時に呼び出されます。

- システム・ダウン

- システム・ダウン・ルーチン(_RI_sys_dwn__( ))
システム・ダウン・ルーチンは,システム・ダウンが発生したときに呼び出されます。

- システム初期化処理

- ブート処理ファイル
詳細は,「17.2 ブート処理ファイル(ユーザ・オウン・コーディング部)」を参照してください。


- セクション情報ファイル(ユーザ・オウン・コーディング部)
未初期化データ・セクションおよび初期化データ・セクションの情報を定義します。

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

2.2 処理プログラムの記述」から「2.4 ユーザ・オウン・コーディング部の記述」で作成されたファイル群,および,RI600PX,Cコンパイラ・パッケージが提供しているライブラリ・ファイルに対して,CubeSuite+上でビルドを実行し,ロード・モジュールを生成します。

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

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

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

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

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

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

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

3 ) バージョンの確認

プロジェクト・ツリーでリアルタイムOSノードを選択し,プロパティ パネルをオープンします。

[RI600PX]タブの[カーネル・バージョン]プロパティにおいて,使用するRI600PXのバージョンを確認します。

図2−2  プロパティ パネル:[RI600PX]タブ



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

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

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

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

- 「2.2 処理プログラムの記述」で作成されたソース・ファイル

- 処理プログラム(タスク,周期ハンドラ,アラーム・ハンドラ,割り込みハンドラ)

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

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

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


- 「2.4 ユーザ・オウン・コーディング部の記述」で作成されたソース・ファイル

- ユーザ・オウン・コーディング部(システム・ダウン・ルーチン,ブート処理)

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

- カーネル・ライブラリ(「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ファイルには,ソース中で使用しているサービス・コール名が出力されます。テーブル生成ユーティリティmkritblpxには,mrcファイルが格納されたパスを漏れなく指定する必要があります。漏れがある場合,アプリケーションで使用しているサービス・コール・モジュールがリンクされない場合があります。この場合,そのサービス・コールを呼び出したときにシステム・ダウンとなります。

逆に,過去に生成され,現在は無効なmrcファイルをmkritblpxに入力した場合は,アプリケーションで使用していないサービス・コール・モジュールがリンクされる場合があります。この場合,RI600PXの動作に問題は生じませんが,コードサイズが無駄に大きくなってしまうことになります。

また,kernel.hをインクルードするファイルのコンパイル時には,“-ri600_preinit_mrc”オプションを指定してください。本オプションを指定しなくてもRI600PXの動作に問題は生じませんが,アプリケーションで使用していないサービス・コール・モジュールがリンクされる場合があります。この場合,RI600PXの動作に問題は生じませんが,コードサイズが無駄に大きくなってしまうことになります。

アプリケーションをライブラリ化する場合は,コンパイル時に生成されたmrcファイルもmkritblpxに入力してください。これが難しい場合,使用しているサービス・コール名を羅列したmrcファイル(下記例を参照)を作成し,mkritblpxに入力してください。

なお,組み込まれていないサービス・コールを呼び出した場合は,システム・ダウンとなります。

 sta_tsk
 snd_mbx
 rcv_mbx
 prcv_mbx


2.6.2 ブート処理ファイルのコンパイラ・オプション

17.2.3 ブート処理ファイルのコンパイラ・オプション」に記載のように,ブート処理ファイル(サンプル・プロジェクトでは“resetprg.c”)にはオプション“-nostuff”を設定する必要があります。そうでない場合,RI600PXは正常に動作しません。

オプション“-nostuff”をブート処理ファイルのみに設定するにはブート処理ファイルの[プロパティ]パネルの[個別コンパイル・オプション]タブで,オプション“-nostuff”を全ファイルに設定するには[CC-RX(ビルド・ツール)]の[プロパティ] パネルの[コンパイル・オプション]タブで,以下のいずれかを設定してください。

1 ) [オブジェクト]カテゴリで設定する
図2−6