Renesas



Section1
Section2
Section3
Section4
Section5




SH-2AとSH2A-DUALの機能紹介と効率アップのワンポイントアドバイス

2. SH-2Aのスタートアップとデバッグ手法のワンポイントアドバイス

最初にSH-2AのシングルコアであるSH7280のスタートアップを紹介します。
なお、スタートアップはルネサス統合開発環境のプロジェクト・ジェネレータが生成するサンプルプログラムを基に紹介します。

プロジェクト・ジェネレータが生成するサンプルプログラムを使用する場合、ルネサス統合開発環境の起動時は「新規プロジェクト・ワークスペースの作成」のラジオボタンをチェックし、「OK」してください。

そうするとプロジェクト・タイプの選択ダイアログが表示されますから、「プロジェクト・タイプ」はアプリケーションを選択し、ワークスペース名とプロジェクト名には任意の名前を入力し、「OK」してください。
なお、「プロジェクト・タイプ」におけるアプリケーションは、プロジェクト・ジェネレータにサンプルプログラムを生成してもらうタイプのプロジェクトであり、標準的なプロジェクトと考えてください。

次は使用するSuperHファミリのCPUシリーズとCPUタイプを問い合わせてきます。使用するCPUの種別に合わせて選択します。

次はグローバルオプションの設定を問い合わせてきます。SH-2Aの場合、グローバルオプションはデフォルトのままで構いません。

このダイアログから必要なサンプルプログラムの選択となります。
「I/Oライブラリ使用」のチェックボックスはprintf関数やscanf関数等のI/Oライブラリを使用するかどうかの選択です。通常、I/Oライブラリは使用しませんから、このチェックボックスは外します。
次の「ヒープメモリ使用」のチェックボックスはmalloc関数やcalloc関数等のメモリ割り当てライブラリを使用するかどうかの選択です。これも通常は使用しませんから、このチェックボックスは外します。
次はmain関数生成のドロップダウンメニューです。C言語でのmain関数が必要であれば、ドロップダウンメニューを「Cソース・ファイル」に設定します。
次のI/Oレジスタ定義ファイルのチェックボックスは内蔵周辺機能制御用のヘッダファイルの生成依頼であり、これはチェックのままで利用します。
次は「ハードウェアセットアップ関数生成」のドロップダウンメニューです。「ハードウェアセットアップ関数生成」とは内蔵周辺機能の初期化を行う関数を意味します。必要であれば、「アセンブリ・ソース・ファイル」か「C/C++ソース・ファイル」としての生成を依頼します。

このダイアログでは必要なC言語標準ライブラリの生成を選択します。
もし、システムの中で必要なC言語標準ライブラリがあれば、対応したヘッダファイルのチェックボックスを「ON」します。

このダイアログではスタックの設定を指示します。
なお、スタック領域は作成したシステム毎に異なるため、プロジェクト作成時の設定は適当な値となります。
ここで指定した値はプロジェクト・メニューの「構成の編集」コマンドにおける「スタック」のタブで自由に変更可能です。
システム作成後は必ず「Renesas Call Walker」を使って算出した値に変更してください。


このダイアログでは割り込みを含めた例外処理に必要となるベクタテーブル及び割り込み関数の生成を依頼します。これらのサンプルプログラムが必要であれば目的のチェックボックスを「ON」してください。

このダイアログでは使用するターゲット、すなわちデバッガの選択を行います。
ダイアログ内には操作中のルネサス統合開発環境で利用可能なデバッガの一覧が表示されますから、使用するデバッガのチェックボックスを「ON」します。

なお、デバッガを選択すると、選択したデバッガ毎にコンフィグレーション名を問い合わせてきます。
デバッガ毎に分かり易い名前を設定してください。

以上でプロジェクト・ジェネレータの設定は終了です。
最後に生成されたサンプルプログラムの一覧が表示されますから、そのまま「完了」のボタンを入力してください。

プロジェクト・ジェネレータの設定が完了するとルネサス統合開発環境が立ち上がります。画面左のワークスペースウィンドウにはプロジェクト・ジェネレータが生成したサンプルプログラムが登録されています。

なお、サンプルプログラムを含めたワークスペースやプロジェクトのファイル構成は、このようになっています。
ワークスペースのフォルダ内にプロジェクトのフォルダがあり、生成されたサンプルプログラムは、コンフィグレーションのフォルダと共にプロジェクトのフォルダ内に存在しています。

それではプロジェクト・ジェネレータが生成したサンプルプログラムを基にSH-2Aシングルコアのスタートアップを紹介します。なお、今から紹介するスタートアップ手順はSH2A-DUALになっても基本的に変わりがないと考えてください。

SH-2Aを含めたコントローラ系SuperHファミリでは、パワーオン・リセットを含めた割り込みはベクタ方式を使っています。電源投入のパワーオン・リセットが入力されるとCPUはリセットベクタを参照してPowerON_Reset_PC関数に起動を与えます。

これがvecttbl.cファイル内にあるリセットベクタのコーディング例です。17行目がリセット直後のPCの初期値、20行目がリセット直後のSPの初期値です。このリセットベクタによって、リセット直後はPowerON_Reset_PC関数に起動がかかります。

起動されたPowerON_Reset_PC関数はresetprg.cファイル内にあり、そのコーディングはこのようになっています。PowerON_Reset_PC関数では43行目から47行目の手順でmain関数を実行します。なお、これらの手順はスタートアップ手順の項番1から項番6に対応しています。以下、この手順に従ってmain関数起動までの手順を紹介します。

コントローラ系SuperHファミリでは、リセット以外の割り込みで利用するベクタテーブルは任意の番地に移動できます。ただし、ベクタテーブルの場所を移動したら、それはVBRで示さなければなりません。そこで初めに組み込み関数を使ってVBRの初期化を行います。

VBRの初期化後は静的変数の初期化を行います。初期値のある静的変数は初期値をROMからRAMへコピーし、初期値のない静的変数はゼロクリアを行う必要があります。SuperHファミリでは、静的変数の初期化に対しては_INITSCTライブラリ関数が用意されています。そこで、それを呼び出して静的変数の初期化を行います。なお、静的変数を初期化するライブラリ関数は静的変数の番地情報をテーブルより参照しますから、テーブルはdbsct.cファイルに記述します。これがdbsct.cのコーディング例です。ライブラリ関数は、このテーブル情報を参照し、静的変数の初期化を行います。

静的変数の初期化が完了したら、今度は内蔵周辺機能の初期化を行うため、HardwareSetup関数を呼び出します。その関数の本体はhwsetup.cファイル内にあります。HardwareSetup関数は、プロジェクト構築時は空関数となっています。必要であれば、関数内にシステムで利用する内蔵周辺機能の初期化を記述してください。

これでmain関数を実行する準備がすべて整いましたので、あとは割り込みマスクを解放し、main関数を呼び出します。なお、main関数はプロジェクト名と同じ名前の「.c」ファイル内にあります。やはり、こちらもプロジェクト構築時は空関数となっています。システムで実行する処理はmain関数及びmain関数から呼び出しを行う関数内に記述してください。

もし、システムで割り込みを利用する場合、それはintprg.cファイル内に作成されている割り込み関数内に必要な処理を記述してください。コントローラ系SuperHファミリでは、割り込みに対してはベクタ方式を使っており、割り込み用のベクタテーブルはvecttbl.cファイル内の29行目以降に作成されています。

これが割り込み用のベクタテーブルのコーディング例です。このベクタテーブルによって、割り込み要因に対応した割り込み関数が実行されます。なお、対応した割り込み関数はintprg.cファイル内に1行、1関数で構築されています。

これがintprg.cファイル内にある割り込み関数のコーディング例です。1行、1関数として生成されています。ただし、プロジェクト構築時は空関数となっています。必要であれば、関数内に割り込み発生時に行う処理を記述してください。なお、割り込み関数の名前は、割り込みの要因名の前に「 INT_ 」を付けた形で構築されています。どれがどの割り込みに対しての関数であるかは簡単にわかると思います。

最終的にプロジェクト・ジェネレータが生成したサンプルプログラムを利用する場合、これら3つの記述を行えば、簡単にシステムが作成できるようになっています。

プログラムの作成が完了したら、実行可能なロードモジュールの作成を行います。ルネサス統合開発環境の場合、ロードモジュールは「ビルド」コマンドにより作成可能です。「ビルド」コマンドは、ビルド・メニューの「ビルド」で行います。そうすると記述された言語に従い、アウトプット・ウィンドウの示すように各ツールが自動的に実行され、ロードモジュールが生成されます。

なお、作成したプログラムにエラーがある場合、それはアウトプット・ウィンドウに表示されます。もし、エラーが発生したら、アウトプット・ウィンドウにあるエラーのタグジャンプのボタンを利用してください。エラーのタグジャンプのボタンを押すと、エディタはエラーのあった所にカーソルが飛び、アウトプット・ウィンドウはエラーのメッセージを表示してくれます。エラーの内容に従って、プログラムを修正し、再びビルドを行ってください。

ビルドの実行によりロードモジュールが作成されたら、今度はデバッグを行います。ただし、デバッグについてはデバッグ・セッションを理解しなければなりません。ルネサス統合開発環境では、1つのプロジェクトに対して、いろいろなデバッガを操作させることが可能です。例えば、シミュレータとかエミュレータ等です。また、エミュレータに関してはコンパクト・タイプのものやフル・エミュレータ等が利用可能です。ルネサス統合開発環境では、その接続ターゲットの情報とデバッグ環境の情報をデバッグ・セッションとして管理しており、デバッグ・セッションはドロップダウンメニューにより選択可能となっています。

なお、デバッグ・セッションはワークスペースを生成した段階で決まってしまいますが、生成後であっても自由に追加・削除することが可能です。デバッグ・セッションを追加したい時は、デバッグ・メニューの「デバッグセッション」コマンド、並びに「デバッグ設定」コマンドにより追加・削除を行います。

次に各ツールへのオプションについて紹介します。ルネサス統合開発環境では、オプションはコンフィグレーションと言うもので管理されています。その理由は、一つのソースからいろいろなロードモジュールを生成するためです。例えば、まったく最適化を実施しないロードモジュール、逆にスピードを中心に最適化を実施したロードモジュール、更にはサイズ中心に最適化を実施したロードモジュール等、オプションの設定を変更し、さまざまな評価を行って頂くためです。そのオプションの管理単位がコンフィグレーションです。

やはり、コンフィグレーションもドロップダウンメニューで選択可能です。また、どのようなコンフィグレーションが存在するのかはワークスペースを生成した段階で決まっていますが、生成後であっても自由に追加・削除することが可能です。コンフィグレーションを追加したいときは、ビルド・メニューの「ビルドの構成」コマンドにより追加・削除を行います。

各ツールに対するオプションはビルド・メニューにある「Standard Toolchain」のコマンドで開くことが可能なオプション・ウィンドウ内に指定します。全てのツールに対するオプションが設定可能ですから、ツールの選択はタブで指定します。

なお、オプションの設定では、その有効範囲に注意を払ってください。オプションをプロジェクト全体に対して設定したい時と、特定のソースに対してのみ設定したい時があります。その有効範囲は、ウィンドウの左側で指定します。同様にコンフィグレーションの選択も可能ですから、その有効範囲を選択してからオプション設定を行ってください。