7.18 __attribute__((section("name"))) を使用したコードとデータの配置

コードおよびデータは、ツールチェーン固有のプラグマや属性を使用しなくても、独自のオブジェクトに別々に配置できます。

ただし、 __attribute__((section("name"))) を使用して、項目を別の ELF セクションに配置することもできます。その場合、スキャッタファイルを使用して、名前付きセクションを特定の位置に配置できます。

__attribute__((section("name"))) を使用して、変数を別のセクションに配置するには、以下の手順を実行します。

  1. __attribute__((section("name"))) を使用して、変数の配置先の名前付きセクションを指定します。以下に例を示します。

    セクションの命名
    int variable __attribute__((section("foo"))) = 10;
    
  2. スキャッタファイルを使用して、名前付きセクションを配置します。以下に例を示します。

    セクションの配置
    FLASH 0x24000000 0x4000000 {
        …                                ; 残りのコード     ADDER 0x08000000     {         file.o (foo)                  ; file.o からセクション foo を選択する     } }
    

次の例は FLASH ロード領域のメモリマップを示します。

…   Load Region FLASH (Base:0x24000000, Size:0x00000004, Max:0x04000000, ABSOLUTE)     Execution Region ADDER (Base:0x08000000, Size:0x00000004, Max:0xffffffff, ABSOLUTE)     Base Addr    Size         Type   Attr      Idx    E Section Name        Object     0x08000000   0x00000004   Data   RW           16    foo                 file.o
…

以下の点に注意して下さい。

セクション名に .ARM.__at_address を使用することで、特定のアドレスに関数を配置することもできます。例えば、関数 sqr 0x20000 に配置するには、次のように指定します。

int sqr(int n1) __attribute__((section(".ARM.__at_0x20000"))); int sqr(int n1) {     return n1*n1; }
関連する概念
7.19 特定のアドレスに __at セクションの配置
7.20 __at セクションの配置に関する制限
関連する参考文書
12.10 --autoat、--no_autoat
12.126 --scatter=filename
関連情報
__attribute__((section("name"))) 関数属性
__attribute__((section("name"))) 変数属性
#pragma arm section [section_type_list]
非機密扱いPDF file icon PDF 版ARM DUI0474JJ
Copyright © 2010-2013 ARM.All rights reserved.