0

以下のように、プログラムで特別なデータ セクションを定義しました。

const qlEntry GADLENTRY __attribute__((section(".initdata"))) = 
{
    //...
}

この特別なセクションを画像ビンのヘッダーに配置したいと思います。

私の .ld ファイルは次のように書かれています。

MEMORY
{
    rom (rx) :  ORIGIN = 0x08540000, LENGTH = 0x100000
    ram (rwx) : ORIGIN = 0xA0200000, LENGTH = 0x200000
}

SECTIONS
{
    . = 0x08540000;
        .rodata : 
{
    *(.initdata)
    *(.rodata)
}
    .data : 
{ 
    *(.data) 
}
    .bss : 
{ 
    *(.bss) 
}
text : 
{ 
    *(.text) 
}
}

}

しかし、ビルド後、.map ファイルを監視します。

.initdata       0x0854b304       0x2c
 .initdata      0x0854b304       0x2c ql_Main.o
                0x0854b304                GADLENTRY

どうしたの?正しいビンを取得するにはどうすればよいですか。

 *(.initdata)
 .initdata      0x08540000
4

1 に答える 1

0

.initdata次のような別の出力セクションを作成します。

SECTIONS
{
    . = 0x08540000;

    .initdata : { *(.initdata) }

    .rodata : { *(.rodata) }

...

元のリンカ スクリプト ファイルでは、 の前に別のものが置かれて.initdataいます。マップ ファイルでそれが何であるかを確認してください。

リンカー スクリプトにすべての入力セクションが記述されていることを確認してください。

たとえば、.gnu.linkonce.r*入力ファイルにセクションがある場合、それらは最初のメモリ領域に配置される可能性があり、その属性はそのセクション属性 (この場合はrom領域) と一致しており、観察結果が生じる可能性があります。

于 2012-12-12T09:43:43.710 に答える