Renesas Synergy™

FAQ 106080 : ベクターテーブルを任意のアドレスに配置したい。

Q: 質問

 ベクターテーブルを任意のアドレスに配置したい。

 


A: 回答

H8SXは、VBRレジスタを使用してベクタテーブルを任意のアドレスに配置することが可能です。
しかしH8SX,H8S,H8ファミリ用C/C++コンパイラパッケージ環境にてワークスペースを作成した場合、自動生成するスタートアップコードを使用しますと任意のアドレスに配置することができません。
これは、スタートアップコードがベクタテーブルを自動生成する__interrupt拡張機能を使用し0番地よりベクタテーブルを配置しているためです。

VBRを使用してベクターテーブルを他のアドレスに配置する場合は、スタートアップコードを使用せずベクタテーブルを作成してください。

例)
スタートアップコードでは、
<intprg.c>
#pragma section IntPRG
・・・
// vector 4 Illegal code
__interrupt(vect=4) void INT_Illegal_code(void){/* sleep(); */}
・・・
と定義されております。
この__interrupt拡張機能によりベクタテーブルを自動生成しています。

下記例のようにベクタテーブルを作成してください。
<intprg.c>
#pragma section IntPRG
・・・
// vector 4 Illegal code
void INT_Illegal_code(void){/* sleep(); */}
・・・
<vecttbl.c>
#pragma section INTTBL
void *INT_Vectors[] = {
・・・
// 4 Reserved
(void *) INT_Illegal_code,
・・・

上記のベクタテーブルを作成の上、セクションINTTBLをVBRにて指定のアドレス空間に配置してください。

 

適用製品

H8SX,H8S,H8ファミリ用C/C++コンパイラパッケージ
他にご質問がございましたら、リクエストを送信してください