外部変数のRAM上の配置について

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で開発していたときは、定義した順番で

配置されていた記憶があるのですが。。。やはりコンパイラに依存するものなのでしょうか?

大して重要な事ではないのですが気になって質問しました。

Parents
  • fujita nozomuさん、わわいさん、お返事ありがとうございました。
    セクションか構造体を使うしかなさそうですね。
    ありがとうございました。
  • > セクションか構造体を使うしかなさそうですね。

    大域変数の記述をアセンブラで行うことでも可能です。

    #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
    
Reply
  • > セクションか構造体を使うしかなさそうですね。

    大域変数の記述をアセンブラで行うことでも可能です。

    #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
    
Children
No Data