読者です 読者をやめる 読者になる 読者になる

エンジニアの備忘録

仕事や趣味でのトラブルシューティングの備忘録

CS+(CubeSuite+)で、初期値ありstatic変数に数値を代入できない

CubeSuite マイコン

static変数が変わらない

static U16 flag_event = 0;

を関数外で宣言 関数内で

flag_event = 1;

のように数値を代入しても、1が入らずに0のまま。。

static U16 flag_event;

と宣言して、main()の文頭でflag_event = 0;し、それ以降に呼び出される関数でflag_event = 1;したら、ちゃんと1が代入された。 これはおかしいと思って調査。

リンカの設定を変えないといけない

static変数を、数値代入して宣言すると、CubeSute+ではデフォルト設定ではROM領域に保存されて、数値変更ができなくなるらしい。 CubeSute+のビルドツールから リンク・オプションでセクション>ROMからRAMへマップするセクションで

D=R
D_1=R_1
D_2=R_2

を追加。 http://documentation.renesas.com/doc/products/tool/doc/r20ut2470jj0100_qscdrx.pdf によると

変数のデフォルトの配置セクションは,次のとおりになります。
初期値なし変数:
 B, B_2, B_1
セクション

初期値あり変数:
 D, D_2, D_1
セクション
(ROM)

R, R_2, R_1
セクション
(RAM)

const変数:
 C, C_2, C_1
セクション