RENESAS TOOL NEWS 2007年02月01日 : 070201/tn1
| M16Cシリーズ用Cコンパイラパッケージ
ご使用上のお願い
--スタートアップに
関する注意事項 |
M16Cシリーズ用Cコンパイラパッケージの使用上の注意事項を連絡します。
1. 該当製品
M16Cシリーズ*用Cコンパイラパッケージ(M3T-NC30WA)
V.5.40 Release 00 および V.5.40 Release 00A
* M16C/60, /30, /20, /10, /TinyおよびR8C/Tinyシリーズの総称です。
2. 内容
統合開発環境High-performance Embedded Workshopが生成するC言語スタート
アップファイルを使用して、far領域のセクションを初期化するとプログラムが
暴走する場合があります。
3. 発生条件
far領域をマクロ関数scopy_f() または sclear_f()で初期化している場合に
発生します。
4. 回避策
initsct.hファイルを以下のように修正してください。
・マクロ関数sclear_f()
#define sclear_f(X,Y) _asm(" .initsct "X","Y"¥n"¥
" push.w #(sizeof "X")>>16¥n"¥
" push.w #(sizeof "X")&0ffffH¥n"¥
" push.w #(topof "X")>>16¥n"¥
" push.w #(topof "X")&0ffffH¥n"¥
" .stk 8¥n"¥
" .glb _bzero¥n"¥ ----- (1)-1
" .call _bzero,G¥n"¥ ----- (1)-2
" jsr.a _bzero¥n"¥ ----- (1)-3
" add.b #8H,SP¥n"¥ ----- (2)-1
" .stk -8"); ----- (2)-2
(1) (1)-1から(1)-3では、_bcopyを_bzeroに変更してください。
(1)-3の末尾は、(2)-1へ続くため "); で終了せずに文字列連結をする
¥n"¥ に変更してください。
(2) (2)-1では、スタックポインタの補正コードを追加してください。
(2)-2では、スタック補正情報.stkを追加してください。
・マクロ関数scopy_f()
#define scopy_f(X,Y) _asm(" .initsct "X","Y"¥n"¥
" .initsct "X"I,rom"Y"¥n"¥
" push.w #(sizeof "X") >> 16¥n"¥
" push.w #(sizeof "X") & 0ffffH¥n"¥
" push.w #(topof "X") >> 16¥n"¥
" push.w #(topof "X") & 0ffffH¥n"¥
" push.w #(topof "X"I) >> 16¥n"¥
" push.w #(topof "X"I) & 0ffffH¥n"¥
" .stk 12¥n"¥
" .glb _bcopy¥n"¥
" .call _bcopy,G¥n"¥
" jsr.a _bcopy¥n"¥ ----- (3)
" add.b #0cH,SP¥n"¥ ----- (4)-1
" .stk -12"); ----- (4)-2
(3) (3)の末尾は、(4)-1へ続くため "); で終了せずに文字列連結をする
¥n"¥ に変更してください。
(4) (4)-1では、スタックポインタの補正コードを追加してください。
(4)-2では、スタック補正情報.stkを追加してください。
5. 恒久対策
V.5.42 Release 00以降では改修済みです。最新バージョンをご使用ください。