第2章 システム構築
- タ ス ク
他処理プログラム(割り込みハンドラ,周期ハンドラ,およびアラーム・ハンドラ)とは異なり,RI600V4が提供するサービス・コールを使用して明示的に操作しないかぎり実行されることのない処理プログラムです。
他処理プログラム(割り込みハンドラ,周期ハンドラ,およびアラーム・ハンドラ)とは異なり,RI600V4が提供するサービス・コールを使用して明示的に操作しないかぎり実行されることのない処理プログラムです。
- 周期ハンドラ
指定された周期時間毎に起動されるルーチンです。
なお,RI600V4では,周期ハンドラを“タスクとは独立したもの(非タスク)”として位置づけています。このため,一定の時間が経過した際には,システム内で最高優先度を持つタスクが処理を実行中であっても,その処理は中断され,周期ハンドラに制御が移ります。
指定された周期時間毎に起動されるルーチンです。
なお,RI600V4では,周期ハンドラを“タスクとは独立したもの(非タスク)”として位置づけています。このため,一定の時間が経過した際には,システム内で最高優先度を持つタスクが処理を実行中であっても,その処理は中断され,周期ハンドラに制御が移ります。
- アラーム・ハンドラ
指定した時間後に一度だけ起動されるルーチンです。
なお,RI600V4では,アラーム・ハンドラを“タスクとは独立したもの(非タスク)”として位置づけています。このため,一定の時間が経過した際には,システム内で最高優先度を持つタスクが処理を実行中であっても,その処理は中断され,アラーム・ハンドラに制御が移ります。
指定した時間後に一度だけ起動されるルーチンです。
なお,RI600V4では,アラーム・ハンドラを“タスクとは独立したもの(非タスク)”として位置づけています。このため,一定の時間が経過した際には,システム内で最高優先度を持つタスクが処理を実行中であっても,その処理は中断され,アラーム・ハンドラに制御が移ります。
- 割り込みハンドラ
割り込みが発生した際に起動されるルーチンです。
なお,RI600V4では,割り込みハンドラを“タスクとは独立したもの(非タスク)”として位置づけています。このため,割り込みが発生した際には,システム内で最高優先度を持つタスクが処理を実行中であっても,その処理は中断され,割り込みハンドラに制御が移ります。
割り込みが発生した際に起動されるルーチンです。
なお,RI600V4では,割り込みハンドラを“タスクとは独立したもの(非タスク)”として位置づけています。このため,割り込みが発生した際には,システム内で最高優先度を持つタスクが処理を実行中であっても,その処理は中断され,割り込みハンドラに制御が移ります。
備考2 リアルタイムOSタスク・アナライザを「ソフトウェア・トレース・モードでトレース・チャートを取得」または「ソフトウェア・トレース・モードで長時間統計を取得」で使用する場合は,システム・コンフィギュレーション・ファイルに,ユーザ・オウン・コーディング部で作成した割り込みハンドラを定義する必要があります。詳細は,「第15章 リアルタイムOSタスク・アナライザ」を参照してください。
- ソフトウェア・トレース・モードのユーザ・オウン・コーディング部
ソフトウェア・トレース・モードを使用する場合は,タイム・スタンプを取得するためのユーザ・オウン・コーディング部を実装する必要があります。
ソフトウェア・トレース・モードを使用する場合は,タイム・スタンプを取得するためのユーザ・オウン・コーディング部を実装する必要があります。
- ブート処理関数(PowerON_Reset_PC( ))
ブート処理は,リセットベクタに登録され,RI600V4が処理を実行するうえで必要となる最低限のハードウエアやソフトウエアを初期化するためにユーザ・オウン・コーディング部として切り出された初期化処理専用ルーチンです。また,cfg600が出力したROM定義ファイルとRAM定義ファイルを取り込む役割も担います。
ブート処理は,リセットベクタに登録され,RI600V4が処理を実行するうえで必要となる最低限のハードウエアやソフトウエアを初期化するためにユーザ・オウン・コーディング部として切り出された初期化処理専用ルーチンです。また,cfg600が出力したROM定義ファイルとRAM定義ファイルを取り込む役割も担います。
「2.2 処理プログラムの記述」から「2.4 ユーザ・オウン・コーディング部の記述」で作成されたファイル群,および,RI600V4,Cコンパイラ・パッケージが提供しているライブラリ・ファイルに対して,CubeSuite+上でビルドを実行し,ロード・モジュールを生成します。
備考 システム・コンフィギュレーション・ファイル名の拡張子は,“cfg”を指定してください。
拡張子が異なる場合は,“cfg”が自動的に付加されます(例えば,ファイル名に“aaa.c”を指定した場合,“aaa.c.cfg”となります)。
拡張子が異なる場合は,“cfg”が自動的に付加されます(例えば,ファイル名に“aaa.c”を指定した場合,“aaa.c.cfg”となります)。
備考1 プロジェクト・ツリー パネルにシステム・コンフィギュレーション・ファイルを追加すると,リアルタイムOS生成ファイル・ノードが表示されます。
リアルタイムOS生成ファイル・ノードには,以下の情報ファイルが表示されます。ただし,この時点では,これらのファイルは生成されません。
リアルタイムOS生成ファイル・ノードには,以下の情報ファイルが表示されます。ただし,この時点では,これらのファイルは生成されません。
備考3 システム・コンフィギュレーション・ファイルは,プロジェクトに複数追加することができますが,有効となるのは最初に追加したファイルです。有効なファイルをプロジェクトから外しても,追加済みのファイルは有効にならないため,再度ファイルを追加してください。
mrcファイルには,ソース中で使用しているサービス・コール名が出力されます。テーブル生成ユーティリティmkritblには,mrcファイルが格納されたパスを漏れなく指定する必要があります。漏れがある場合,アプリケーションで使用しているサービス・コール・モジュールがリンクされない場合があります。この場合,そのサービス・コールを呼び出したときにシステム・ダウンとなります。
逆に,過去に生成され,現在は無効なmrcファイルをmkritblに入力した場合は,アプリケーションで使用していないサービス・コール・モジュールがリンクされる場合があります。この場合,RI600V4の動作に問題は生じませんが,コードサイズが無駄に大きくなってしまうことになります。
また,kernel.hをインクルードするファイルのコンパイル時には,オプション“-ri600_preinit_mrc”を指定してください。本オプションを指定しなくてもRI600V4の動作に問題は生じませんが,アプリケーションで使用していないサービス・コール・モジュールがリンクされる場合があります。この場合,RI600V4の動作に問題は生じませんが,コードサイズが無駄に大きくなってしまうことになります。
アプリケーションをライブラリ化する場合は,コンパイル時に生成されたmrcファイルもmkritblに入力してください。これが難しい場合,使用しているサービス・コール名を羅列したmrcファイル(下記例を参照)を作成し,mkritblに入力してください。
「16.2.3 ブート処理ファイルのコンパイラ・オプション」に記載のように,ブート処理ファイル(サンプル・プロジェクトでは“resetprg.c”)にはオプション“-nostuff”を設定する必要があります。そうでない場合,RI600V4は正常に動作しません。
オプション“-nostuff”をブート処理ファイルのみに設定するにはブート処理ファイルの[プロパティ]パネルの[個別コンパイル・オプション]タブで,オプション“-nostuff”を全ファイルに設定するには[CC-RX(ビルド・ツール)]の[プロパティ] パネルの[コンパイル・オプション]タブで,以下のいずれかを設定してください。
1 ) [オブジェクト]カテゴリで設定する
図2-6のように,[初期値なし変数をアライメント4のセクションに配置する],[初期値あり変数をアライメント4のセクションに配置する],および[const修飾変数をアライメント4のセクションに配置する]を”はい”に設定してください。
図2-6のように,[初期値なし変数をアライメント4のセクションに配置する],[初期値あり変数をアライメント4のセクションに配置する],および[const修飾変数をアライメント4のセクションに配置する]を”はい”に設定してください。
カーネルライブラリは,表2-1に示すフォルダに格納されています。ただし,CubeSuite+が自動的に適切なカーネル・ライブラリをリンクするので,ユーザはカーネル・ライブラリを意識する必要はありません。
備考1 <ri_root>は,RI600V4のインストール・フォルダを表しています。
デフォルトは,“ C:\Program Files\Renesas Electronics\CubeSuite+\RI600V4”です。
デフォルトは,“ C:\Program Files\Renesas Electronics\CubeSuite+\RI600V4”です。
セクション配置は,リンカのオプション“-start”で指定します。CubeSuite+では,[CC-RX(ビルド・ツール)]プロパティの[リンク・オプション]タブの[セクション]カテゴリで設定します。
本セクションは,[タスク・アナライザ]タブで[ソフトウェア・トレース・モードでトレース・チャートを取得]および[カーネルのバッファ]を選択した場合にのみ生成されます。サイズは,[タスク・アナライザ]タブで指定します。
|
||||
コンフィギュレータcfg600は,システム・コンフィギュレーション・ファイルの“interrupt_fvector[]”の定義内容に従って,固定ベクタ・テーブル/例外ベクタ・テーブルをFIX_INTERRUPT_VECTOR セクションとして生成します。
- RXv1アーキテクチャ使用時
RXv1アーキテクチャでは,固定ベクタ・テーブルは0xFFFFFF80番地に固定されています。FIX_INTERRUPT_VECTORセクションは0xFFFFFF80番地に配置してください。
FIX_INTERRUPT_VECTORセクションを0xFFFFFF80番地以外に配置した場合は,システム・コンフィギュレーション・ファイルの“interrupt_fvector[]”はすべて無視され,固定ベクタ・テーブルに割り当てられている例外要因(リセットを除く)が発生した時にシステム・ダウンとなる機能は正常に動作しません。ユーザ側で固定ベクタ・テーブルを0xFFFFFF80番地に生成してください。
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 セクションの先頭アドレスに初期化してください。
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 セクションの先頭アドレスに初期化してください。
セクション情報ファイル(ユーザ・オウン・コーディング部)のDTBLに記述した初期化データセクションは,リンカのオプション“-rom”を用いてROMに配置されたセクションをRAM上のセクションにマップする設定を行う必要があります。図2-8のように,[CC-RX(ビルド・ツール)]の[プロパティ] パネルの[リンク・オプション]タブの[セクション]カテゴリを設定してください。
[タスク・アナライザ]タブのトレース・モードの設定に応じて,表2-3に示すビルド・オプションが自動設定されます。ただし,この自動設定機能は,対応する機能のプロパティパネルとは連動していないため,自動設定された内容を対応する機能のプロパティパネルで変更してはなりません。