(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)

私のところでは,この変更で初期値のある変数が初期化されるようになりました.
勘違いしているところがありましたら,ご指摘いただけると幸いです.

よろしくお願いします.

松浦光洋
有限会社松浦商事