Hewを使ってH8/3048Fで動作させるF/W開発を行っています。
外部変数を、定義した順にRAM上に配置させる事はできますでしょうか?
たとえば、あるCソース上で外部変数を
int a;
int b
char c;
int d[2];
・
というように書いてビルドした時、マップファイルをみると、a,b,c,d,・・・の順で
配置されていませんでした。Hewからの設定、または pragmaなどを使って
順番に配置させることはできるのでしょうか?
昔、H8をIARで開発していた時や、78K0をCubeSuiteで開発していたときは、定義した順番で
配置されていた記憶があるのですが。。。やはりコンパイラに依存するものなのでしょうか?
大して重要な事ではないのですが気になって質問しました。
「大して重要な事ではない」とのことなのでレスポンスをつけるのもどうかとも思ったのですが
#if 1 #pragma section 0 int a; #pragma section 1 int b; #pragma section 2 char c; #pragma section 3 int d[2]; #pragma section
とそれぞれの変数を別のセクションとして宣言し、各セクションについてツールチェーンの最適化リンカの設定でセクション B の後に B0, B1, B2, B3 を追加してビルドを行えば
SECTION=B0 _a 00ff9420 SECTION=B1 _b 00ff9422 SECTION=B2 _c 00ff9424 SECTION=B3 _d 00ff9426
各セクションの並びは設定の通りとなるので変数の並びもその通りとなりますね。
> セクションか構造体を使うしかなさそうですね。
大域変数の記述をアセンブラで行うことでも可能です。
#pragma asm .section b,data,align=2 .export _a .align 2 _a: .res.w 1 .export _b .align 2 _b: .res.w 1 .export _c _c: .res.b 1 .export _d .align 2 _d: .res.w 2 #pragma endasm