(toppers-users 3522) ASP-rx610/rx620の変数初期化について
mituhiro matuura
cxp03445 @ nifty.com
2011年 8月 12日 (金) 17:18:31 JST
皆様
初めて投稿します.松浦と申します.
CQ出版インターフェース2011年9月号に掲載されたASPをCQ出版社のサイトからダウンロ
ードして使っています.
初期値のある変数が初期化されない現象があり,原因を調べました.
このASPの元と思われる Renesas Starter Kit rx610用にも当てはまると考えられます
ので情報共有したいと思います.
【原因】
セクションD,D_2,D_1とR,R_2,R_1の配置が逆ではないでしょうか?
【対処法】
1.まずHEWのツールチェーンの設定メニュー「最適化リンカ」タブのカテゴリ「セク
ション」でRAMにD,D_2,D_1,ROMにR,R_2,R_1がマップされているが,これを入れ替える
.
(R,R_2,R_1はRAMに,D,D_2,D_1はROMに)
2.次に同じくカテゴリ「出力」のオプション項目「ROMからRAMへマップするセクショ
ン」に
Rom Ram
D R
D_1 R_1
D_2 R_2
を追加する(これがないとR,R_2,R_1の領域が定義されない)
3.arch\rx_rxc\start.srcの99〜124行目の
init_D:
mov.l #(sizeof R), r3
cmp #0, r3
beq.b init_D_2 ; サイズ0なら初期化必要なし
mov.l #(topof D), r1
mov.l #(topof R), r2
smovf
init_D_2:
mov.l #(sizeof R_2), r3
cmp #0, r3
beq.b init_D_1 ; サイズ0なら初期化必要なし
mov.l #(topof D_2), r1
mov.l #(topof R_2), r2
smovf
init_D_1:
mov.l #(sizeof R_1), r3
cmp #0, r3
beq.b clear_B ; サイズ0なら初期化必要なし
mov.l #(topof D_1), r1
mov.l #(topof R_1), r2
smovf
でD,D_2,D_1をr1に,R,R_2,R_1をr2にmovしているが,逆にする.
(R,R_2,R_1をr1に,D,D_2,D_1をr2にmov)
私のところでは,この変更で初期値のある変数が初期化されるようになりました.
勘違いしているところがありましたら,ご指摘いただけると幸いです.
よろしくお願いします.
松浦光洋
有限会社松浦商事