”かふぇルネ“はルネサス製品に関してユーザ同士が自由に会話をするツールであり、回答者はルネサス社内外の方たちとなります。ルネサス製品やソリューションに関して正式な回答をご希望の場合は、ルネサス技術サポート問合せをご使用ください。

宣言した変数に連続したアドレスでアクセスしたい(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とか?)して、その範囲内に
 アドレスが割り当てられるよう変数宣言をする。
 扱い慣れていない環境のため、こんな事ができるか調べ中。

  • shinさん、こんにちは。NoMaYと申します。

    これまでH8コンパイラを使用されていて、かつ、掲題の件のようなことをされていたのであれば、CC-RXでは以下のCS+のヘルプの画面コピーの -nostuff オプションを指定することで対処出来ると思います。

    -nostuff=B,D,C

     
    画面コピー

    -nostuff


    (参) デフォルト -stuff


    [関連リンク]

    残念ながら記載はありませんでしたけれども。

    RX開発環境移行ガイド H8からRXへの移行(コンパイラ編)(High-performance Embedded Workshop, H8C→CS+,CC-RX)
    RJJ06J0077-0200 Rev.2.00 Pages 17 2016.11.30
    www.renesas.com/jp/ja/document/gde/rx-development-environment-migration-guide-migration-h8c-family-rx-family-compiler-ed-high
     

  • NoMaYさま、

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

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

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

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

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

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

     

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

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