MESC TOOL NEWS:
MESCT-NC308WA-000801D
NC308WA, NC30WA, NC79WA, NC77WA
ご使用上のお願い
|
Cコンパイラ(アセンブラ・統合化開発環境付き)の使用上の注意事項を連絡します。
| M16C/80シリーズ用: | NC308WA
|
| M16C/60, M16C/20シリーズ用: | NC30WA
|
| 7900シリーズ用: | NC79WA
|
| 77xxシリーズ用: | NC77WA
|
- 浮動小数点定数をunsigned long型に型変換すると、不正な値になることがあります。
- デバッガの動作の一部に支障を及ぼすことがあります。
-
浮動小数点定数をunsigned long型に型変換すると、不正な値になることがあります。
- 1.1 該当製品
- NC308WA V.1.00 Release 1 ~ V.3.00 Release 1
- NC30WA V.1.00 Release 1 ~ V.4.00 Release 1
- NC79WA V.2.00 Release 1 ~ V.4.00 Release 1
- NC77WA V.3.00 Release 1 ~ V.5.20 Release 2
- 1.2 発生条件
- 以下2点の条件をすべて満たしている場合に発生します。
- (1) 以下のいずれかにより、浮動小数点定数がunsigned long型に変換される。
- (a) unsigned long型変数の初期化子に浮動小数点定数のみを記述している。
- (b) unsigned long型変数に、浮動小数点定数を代入している。
- (c) 関数のunsigned long型引数に、浮動小数点定数を渡している。
- (d) 浮動小数点定数をunsigned long型に明示的にキャストしている。
- (2) (1)の浮動小数点定数の値が、2147483647(LONG_MAX)を越えて、4294967295(ULONG_MAX)以下である。
- 1.3 発生例
-------------------------------------------------------------------
unsigned long ul1 = 3000000000.0; /* 発生例1:条件(1)-(a),(2) */
unsigned long ul2;
void sub(unsigned long);
void func(void)
{
ul2 = 3000000000.0; /* 発生例2:条件(1)-(b),(2) */
sub(3000000000.0); /* 発生例3:条件(1)-(c),(2) */
ul2 -= (unsigned int)3000000000.0; /* 発生例4:条件(1)-(d),(2) */
}
-------------------------------------------------------------------
- 1.4 回避策
- unsigned long型に変換される浮動小数点定数は、整定数で記述してください。
-----------------------------------------------------------------------
unsigned long ul1 = 3000000000UL; /*回避策1 : unsigned long型を明示*/
unsigned long ul1 = 3000000000; /*回避策2 : 接尾辞がなければ
値で型が決まる*/
-----------------------------------------------------------------------
- 1.5 恒久対策
- 本内容は、次回バージョンアップの際に改修する予定です。
NC308WA, NC30WA, NC79WA, NC77WA ご使用上のお願い
MESCT-NC308WA-000801D
-
デバッガの動作の一部に支障を及ぼすことがあります。
- 2.1 該当製品
- NC308WA V.3.00 Release 1
- NC30WA V.4.00 Release 1
- 2.2 内 容
- 関数先頭のアライメントを行う際にコンパイラが出力する".align"指示命令の
位置が間違っているため、デバッグ情報の行情報が正しく出力されません。
このためデバッガ(PD308, PD308SIM, PD30, PD30SIM)で、以下の問題が発生することがあります。
なお、".align"指示命令の出力位置が間違っていても、ターゲットプログラムの動作には影響を与えません。したがって、デバッガ以外での使用には問題はありません。
- (1) ブレークポイントでブレークしない問題
- プログラムウィンドウ、またはソースウィンドウのソース表示モードで、関数の先頭行にソフトウェアブレークポイントを設定すると、そのブレークポイントで実行が停止しない場合があります。
- (2) 表示個所の変更ができない問題
- 以下の方法でソース表示位置を変更しようとすると"指定したアドレスに該当するソース行が見つかりません。"のメッセージが表示され、表示位置を変更できない場合があります。
- (a) プログラムウィンドウ、およびソースウィンドウの[View]ボタン->[Source]ボタンで開くSourceダイアログで関数を指定したとき
- (b) トレースウインドウのソースモードで、行番号表示領域をダブルクリックして開くSourceダイアログで関数を指定したとき
- (c) MRタスクポーズウインドウの[View]ボタン->[Source]ボタンで開くSourceダイアログで関数を指定したとき
- (d) FUNCコマンドで関数名を指定してソース表示位置を変更するとき
- (3)BREAKINコマンドで関数名を指定できない問題
- BREAKINコマンドで関数名を指定してブレークポイントを設定しようとすると、(2)と同じメッセージが表示されて、設定できない場合があります。
- 2.3 発生条件
- 以下4点の条件のいずれか1つ以上を満たしている場合には発生しません。いずれにも該当しない場合に発生します。
- (1) "-fno_align"オプションを指定している。
- (2) ソースファイル中の最初の関数である。
- (3) #pragma SECTIONを記述してprogramセクションのセクション名称を変更した直後の関数である。
- (4) 直前の関数が奇数アドレスで終了している。
- 2.4 回避策
- 関数のアライメントを行わないよう、コンパイル時に"-fno_align"オプションを指定してください。関数のアライメントを行う場合は、以下の方法で回避してください。
- (1) ブレークポイントでブレークしない問題の回避策
- 関数の先頭にソフトウェアブレークポイントを設定する場合は、プログラム
ウィンドウ、またはソースウィンドウを逆アセンブル表示モードかミックス
表示モードにして、関数先頭のラベルの位置の命令にブレークポイントを設定してください。
- (2) 表示個所の変更ができない問題の回避策
- ソース内の別な関数を表示して当該関数までスクロールしてください。
または、関数のアドレスか行番号を指定して表示個所を変更してください。
- (3) BREAKINコマンドで関数名を指定できない問題の回避策
- SoftwareBreak(SB)コマンドで関数のラベルを指定して設定してください。
-----------------------------------------------------------------
>breakin ta0int
ERROR xxxxx: 指定したアドレスに該当するソース行が見つかりません。
>sb _ta0int
>sb
FE0144
-----------------------------------------------------------------
- 2.5 恒久対策
- 本内容は、次回バージョンアップの際に改修する予定です。