RENESAS TOOL NEWS 2006年10月16日 : 061016/tn1
M16Cファミリ用Cコンパイラパッケージ
M3T-NC308WA および M3T-NC30WA
ご使用上のお願い |
M16Cファミリ用Cコンパイラパッケージ M3T-NC308WA および M3T-NC30WA の使用上の注意事項を連絡します。
- 可変割り込みベクタテーブルとスペシャルページベクタテーブルの自動生成に ついて
- 該当製品
M32C/90, M32C/80, M16C/80, および M16C/70シリーズ用
Cコンパイラパッケージ M3T-NC308WA
V.5.20 Release 1 ~ V.5.41 Release 00
M16C/60, M16C/30, M16C/20, M16C/10, M16C/Tiny, および R8C/Tinyシリーズ用
Cコンパイラパッケージ M3T-NC30WA
V.5.30 Release 1 ~ V.5.40 Release 00A
- 内容
可変割り込みベクタテーブルまたはスペシャルページベクタテーブルを コンパイラに自動生成させると、リンク時にWindowsエラーが発生し、 以下のエラーメッセージが表示されることがあります。
エラーメッセージ
「問題が発生したため、ln308.exe を終了します。ご不便をおかけして 申し訳ありません。」
Windowsエラーが発生しない場合は問題ありません。
- 発生条件
| 3.1 |
|
可変割り込みベクタテーブルの自動生成
3.1.1 M3T-NC308WA V.5.40 Release 00 ~ V.5.41 Release 00 および
M3T-NC30WA V.5.40 Release 00 ~ V.5.40 Release 00A の場合
次の条件のいずれかを満たす場合に発生することがあります。
(1) #pragma INTERRUPTを割り込みベクタ番号付きの書式で記述している。
(2) リンクオプション"-VECT" または"-VECTN" を選択している。
3.1.2 M3T-NC308WA V.5.20 Release 1 ~ V.5.20 Release 02 および
M3T-NC30WA V.5.30 Release 1 ~ V.5.30 Release 02 の場合
次の条件をすべて満たす場合に発生することがあります。
(1) #pragma INTERRUPTを割り込みベクタ番号付きで記述している。
(2) コンパイルオプション"-fmake_vector_table(-fMVT)" を選択している。
(3) アセンブルオプション"-fMVT" を選択している。
(4) リンクオプション"-fMVT" を選択している。 |
| 3.2 |
|
スペシャルページベクタテーブルの自動生成
3.2.1 M3T-NC308WA V.5.40 Release 00 ~ V.5.41 Release 00 および
M3T-NC30WA V.5.40 Release 00 ~ V.5.40 Release 00A の場合
"#pragma SPECIAL" を使用している場合に発生することがあります。
3.2.2 M3T-NC308WA V.5.20 Release 1 ~ V.5.20 Release 02 および
M3T-NC30WA V.5.30 Release 1 ~ V.5.30 Release 02 の場合
次の条件をすべて満たす場合に発生することがあります。
(1) "#pragma SPECIAL" を使用している。
(2) コンパイルオプション"-fmake_special_table(-fMST)"を選択している。
(3) アセンブルオプション"-fMST"を選択している。
(4) リンクオプション"-fMST"を選択している。 |
- 回避策
以下の方法で回避してください。
| 4.1 |
|
可変割り込みベクタテーブルの自動生成
4.1.1 M3T-NC308WA V.5.40 Release 00 ~ V.5.41 Release 00 および
M3T-NC30WA V.5.40 Release 00 ~ V.5.40 Release 00A の場合
次の手順でプログラムを変更してください。
(1) #pragma INTERRUPT のベクタ番号を削除してください。
変更例
-------------------------------------------------------------
変更前: #pragma interrupt _brk(vect=0)
変更後: #pragma interrupt _brk
-------------------------------------------------------------
(2)-1 C言語スタートアッププログラムを使用している場合は、可変割り込み
ベクタの関数を宣言するファイル intprg.c に、可変割り込みベクタ
テーブル(vectorセクション)をアセンブリ言語で追記してください。
intprg.cへの追記内容
可変割り込みベクタテーブル(vectorセクション):
-------------------------------------------------------------
#pragma ASM
.glb __dummy_int
.section vector,ROMDATA
.lword __dummy_int ; vect 0
.lword __dummy_int ; vect 1
:
.lword __dummy_int ; vect 63
#pragma ENDASM
-------------------------------------------------------------
追記例
intprg.cへの追記例を、圧縮ファイルintprg.zip(1.52 KB)にして
掲載しています。ダウンロード後、解凍して参照してください。
(2)-2 アセンブリ言語スタートアッププログラムを使用している場合は、
セクション定義ファイル sect308.incを修正してください。
修正例
sect308.incの423行目付近:
-------------------------------------------------------------
;------------------------------------------------------
; variable vector section
;------------------------------------------------------
.section vector,ROMDATA ; variable vector table
.org VECTOR_ADR
;.if __MVT__ == 0 ←コメントにしてください。
.lword dummy_int ; BRK (software int 0)
.lword dummy_int ;
:
.lword dummy_int ; software int 63
;.endif ; __MVT__ ←コメントにしてください。
-------------------------------------------------------------
(3) (2)-1のintprg.c または (2)-2のsect308.incで、可変割り込みベクタ
テーブルに使用する関数を設定してください。
設定例
ベクタ番号0に関数_brk()を設定する場合:
-------------------------------------------------------------
変更前: .lword __dummy_int ; vect 0
変更後: .glb __brk
.lword __brk ; vect 0
-------------------------------------------------------------
注意:リンクオプション"-VECT"および"-VECTN"は選択しないでください。
4.1.2 V.5.20 Release 1 ~ V.5.20 Release 02 (M3T-NC308WA) および
V.5.30 Release 1 ~ V.5.30 Release 02 (M3T-NC30WA) の場合
次の手順でプログラムを変更してください。
(1) #pragma INTERRUPT のベクタ番号を削除してください。
変更例
-------------------------------------------------------------
変更前: #pragma interrupt _brk(vect=0)
変更後: #pragma interrupt _brk
-------------------------------------------------------------
(2) アセンブリ言語スタートアッププログラムのセクション定義ファイル
sect308.incの可変割り込みベクタテーブルに使用する関数を設定して
ください。
設定箇所
sect308.incの171行目付近:
-------------------------------------------------------------
.if __MVT__==0
;-------------------------------------------------------
; variable vector section
;-------------------------------------------------------
.section vector,ROMDATA ; variable vector table
.org VECTOR_ADR
.lword dummy_int ; BRK (software int 0)←下記設定例のとおり変更する
.lword dummy_int ;
:
-------------------------------------------------------------
設定例
ベクタ番号0に関数_brk()を設定する場合:
-------------------------------------------------------------
変更前: .lword dummy_int ; BRK (software int 0)
変更後: .glb __brk
.lword __brk ; BRK (software int 0)
-------------------------------------------------------------
注意:次のオプションは、いずれも選択しないでください。
- コンパイルオプション "-fmake_vector_table(-fMVT)"
- アセンブルオプション"-fMVT"
- リンクオプション"-fMVT" |
| 4.2 |
|
スペシャルページベクタテーブルの自動生成
該当バージョンでは、拡張機能#pragma SPECIALを用いて関数を宣言しない でください。
|
- 恒久対策
M3T-NC308WAは、次期バージョンで改修する予定(年内計画中)です。
M3T-NC30WAは、11月リリースの V.5.42 Release 00 で改修する予定です。