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.30www.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と同じ)のセクショに指定しました。
備忘用に画像添付しておきます。
設計的に変更すべきとは思えましたが..
取り急ぎ動作するようになり大変助かりました。ありがとうございます。