宣言した変数に連続したアドレスでアクセスしたい(CC-RX、RX65N、CS+)

H8S × HEWで開発されたPGを、
CC-RX環境でも動かしたいですが難しく困っています。

旧環境では1バイトでも4バイトでも宣言したものは
メモリ上に順番に並んでいました。
しかしCC-RXでは別の場所に保存されるので、
下記のようなPGを動作することができません。

どなたかアイデアや設定変更すべきポイントなどあれば
ぜひアドバイスください。

■動かしたいプログラムの例

/* ヘッダーファイル */

volatile unsigned char M_START; //宣言を開始
volatile unsigned char M_DATA_A; //変数(1バイト)
volatile unsigned char M_DATA_B[10]; //
volatile unsigned int M_DATA_C; //変数(4バイト)
volatile unsigned int M_DATA_D[10]; //
volatile unsigned char M_END; //宣言を終了


/* ソースファイル */

//M_STARTのアドレスをポインタで取得
unsigned char *adr = &M_START;

//M_START ~ M_ENDまでのアドレスへ
//何らかの処理を加えていく
for(int i=0; i<(&M_END-&M_START); i++){
*adr = nanrakaNoShori();
}


■今の所の解決アイデア

・共用体(union)か構造体(struct)を使えばメモリ上に連続で配置される。
 ただし、呼び出すときにmemory.M_DATA_Aと名前が長く変更になる。

・必要な分のメモリを確保(allocとか?)して、その範囲内に
 アドレスが割り当てられるよう変数宣言をする。
 扱い慣れていない環境のため、こんな事ができるか調べ中。

Parents Reply Children
  • NoMaYさま、

    おっしゃるようにCC-RXの設定を見直したところ、

    バラバラのセクションに分かれなくなりました。

    各セクションへの配置設定がCC-RXの設定画面からでき、

    CC-RX - オブジェクト からB,D,Cの配置セクションを

    アライメント4(int,longと同じ)のセクショに指定しました。

    備忘用に画像添付しておきます。

     

    設計的に変更すべきとは思えましたが..

    取り急ぎ動作するようになり大変助かりました。ありがとうございます。