
|
 |
RENESAS TOOL NEWS 2005年02月16日 : RSO-M3T-NC30WA-050216D
Cコンパイラパッケージ M3T-NC30WA の使用上の注意事項を連絡します。
- 該当製品
M16C/60, M16C/30, M16C/Tiny, M16C/20, M16C/10, およびR8C/Tinyシリーズ用
M3T-NC30WA V.5.10 Release 1 ~ V.5.30 Release 1
- 内容
コンパイルオプション-finfo指定時に生成されるインスペクタ情報に、割り込み時におけるスタックへのレジスタの退避および復帰に要するサイズが出力されません。
このためスタック計算ユーティリティSTKViewer(*)使用時に正しいスタックサイズを表示できません。
| *: |
コンパイラが生成するインスペクタ情報を利用してスタックサイズを計算しています。 |
- 2.1 発生条件
-
以下の条件をすべて満たす場合に発生します。
| (1) | 割り込み関数を宣言している。 |
| (2) | コンパイル時に-finfoオプションを指定している。 |
- 回避策
- 3.1 Auto変数がある場合
-
以下のとおり、asm()関数にアセンブラ指示命令".stk"により、割り込み関数の処理開始および終了に、
割り込み時のレジスタ(R0,R1,R2,R3,A0およびA1)の退避および復帰に要するスタックサイズ 12を記述してください。
--------------------------------------------------------------------
#pragma INTERRUPT i_func
void i_func(void)
{
asm( " .stk 12" ); /* レジスタR0,R1,R2,R3,A0およびA1の
退避用スタックサイズ */
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
asm( " .stk -12" ); /* レジスタR0,R1,R2,R3,A0およびA1の
復帰用スタックサイズ */
}
--------------------------------------------------------------------
注意: コンパイル後生成されるアセンブラコードには影響がありません。
- 3.2 Auto変数がない場合
-
以下のとおり、asm()関数にアセンブラ指示命令".stk"により、割り込み関数の処理開始および終了に、
割り込み時のレジスタ(R0,R1,R2,R3,A0,A1およびFB)の退避および復帰に要するスタックサイズ 14を記述してください。
--------------------------------------------------------------------
#pragma INTERRUPT i_func
void i_func(void)
{
asm( " .stk 14" ); /* レジスタR0,R1,R2,R3,A0,A1およびFBの
退避用スタックサイズ */
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
asm( " .stk -14" ); /* レジスタR0,R1,R2,R3,A0,A1およびFBの
復帰用スタックサイズ */
}
--------------------------------------------------------------------
注意: コンパイル後生成されるアセンブラコードには影響がありません。
- 恒久対策
本問題は、M3T-NC30WA V.5.30 Release 02では改修済みです。
オンラインアップデートサイトからリビジョンアップできます。
|