オーバーレイを使用したセクションの配置

スキャッタファイル内で OVERLAY 属性を使用すると、複数の実行領域を同じアドレスに配置できます。 実行領域を一度に 1 つだけインスタンス化するには、オーバーレイマネーャが必要です。 ARM コンパイラツールチェーンにはオーバーレイマネージャは付属していません。

以下の例では、RAM 内のスタティックセクションと、その後に続く一連のオーバーレイの定義を示しています。 この例では、一度にこれらのセクョンの 1 つのみをインスタンス化しています。

Example 28. ルート領域の指定

EMB_APP 0x8000			 
{
    .
    .
    STATIC_RAM 0x0                  ; RW と ZI のコード/データのほとんどを含む
    {
            * (+RW,+ZI)
    }
    OVERLAY_A_RAM 0x1000 OVERLAY    ; オーバーレイの開始アドレス...
    {
            module1.o (+RW,+ZI)
    }
    OVERLAY_B_RAM 0x1000 OVERLAY
    {
            module2.o (+RW,+ZI)
    }
    ...                             ; 残りのスキャッタロード記述...
}

OVERLAY としてマークされている領域は、起動時に C ライブラリによって初期化されません。 オーバーレイ領域が使用するメモリの内容は、オーバーレマネージャが管理します。 また、領域に初期化されたデータが含まれている場合は、NOCOMPRESS 属性を使用して RW データが圧縮されないようにします。

リンカ定義シンボルを使用すると、コードとデータのコピーに必要なアドレスを取得できます。

OVERLAY 属性は、別の領域とは異なるアドレスを持つ単一の領域で使用できます。 したがって、C ライブラリスタートアップコードによる特定の領域の初期化を避ける方法として、オーバーレイ領域を使用できます。 他のオーバーレイ領域と同様に、これらの領域はコード内で手動で初期化する必要があります。

オーバーレイ領域は相対ベースを持つことができます。 +offset ベースアドレスを持つオーバーレイ領域の動作は、その前の領域と +offset の値に依存します。 連続する +offset 領域の +offset の値が同じ場合、それらの領域はリンカによって同じベースアドレスに配置されます。

+offset の実行領域 ER が、オーバーレイ実行領域の連続する重複ブロックに続けて存在する場合、ER のベースアドレスは次のようになります。

オーバーレイ実行領域の重複ブロックのリミットアドレス + offset

以下の表には、+offsetOVERLAY 属性と共に使用した場合の影響を示しています。 REGION1 は、スキャッタファイル内の REGION2 の直前に配置されます。

Table 16. オーバーレイでの相対オフセットの使用

REGION1 を OVERLAY と共に設定する+offsetREGION2 ベースアドレス
いいえ<offset>REGION1 のリミット + <offset>
はい+0REGION1 ベースアドレス
はい<none-zero offset>REGION1 のリミット + <none-zero offset>

以下の例では、相対オフセットをオーバーレイと共に使用した場合の実行領域のアドレスに対する影響を示しています。

Example 29. オーバーレイでの相対オフセットの例

EMB_APP 0x8000{
    CODE 0x8000
    {
        *(+RO)
    }

    # REGION1 Base = CODE limit
    REGION1 +0 OVERLAY
    {
        module1.o(*)
    }

    # REGION2 Base = REGION1 Base
    REGION2 +0 OVERLAY
    {
        module2.o(*)
    }

    # REGION3 Base = REGION2 Base = REGION1 Base
    REGION3 +0 OVERLAY
    {
        module3.o(*)
    }

    # REGION4 Base = REGION3 Limit + 4
    Region4 +4 OVERLAY
    {
        module4.o(*)
    }
}

オーバーレイでない領域の長さが不明な場合は、ゼロ相対オフセットを使用してオーバーレイの開始アドレスを指定することで、オーバーレイをタティックセクションの直後に配置できます。

以下のコマンドラインオプションを使用すると、イメージにさらにデバッグ情報を追加できます。

これらを使用することで、現在有効なオーバーレイをオーバーレイに対応したデバッガで追跡できるようになります。

Show/hide関連項目

Copyright © 2010-2012 ARM. All rights reserved.ARM DUI 0474GJ
Non-ConfidentialID051612