1

これは簡単な質問かもしれませんが、私はGNU GCCのリンカーファイル(codesourcery arm-none-eabi ver 4.5.2)の初心者です。

ARM7プロセッサとデータシートでMmuを初期化する必要がありますが、Mmuページテーブルは16kバイト(2 ^ 14)の境界に配置する必要があると言われています。

今のところ私はこの解決策を持っていますが、これがより効率的な解決策ではないことはほぼ確実です!

ENTRY(_start)

SECTIONS
{
 . = 0x0;
 .text : {_stext = .;
*startall.o (.text)
. = 0x4000;
*MmuSdram0.o (.text)
*(.text)
_etext = .;}
 .data : {_sdata = .;
*(.data) 
_edata = .;}
 .bss : {_sbss = .;
*(.bss) 
_ebss = .;}
}

startall.oは、プロセッサの初期化を含むアセンブリファイルです。
次の行では、アドレスを0x4000(2 ^ 14の境界)に設定しました。
MmuSdram0.oには、Mmuページテーブルが含まれています。
次に、残りのファームウェアに従います。
明らかに、このソリューションは、startallの終わりと0x4000の間にギャップを与えます。これは、メモリスペースの浪費です(私は浪費が好きではありません;-)

代わりに、*(。text)の後にページテーブルを配置しますが、次のような方法がわかりません:
*(。text)"except" MmuSdram0.o
そして、リンカーにページを配置させることを好みますアドレスを自分で修正する代わりに、次に使用可能な2^14境界のテーブル。リンカのドキュメントをチェックして、ALIGNコマンドを見つけましたが、それを正しく使用する方法がわかりません。また、これが私のニーズに合ったコマンドであるかどうかもわかりません...

前もって感謝します!

4

1 に答える 1

0

うーん、__attribute__ (( aligned(16*1024) ))セミコロン「;」の前に置きます あなたのmmuテーブル宣言の

于 2011-10-18T08:46:00.140 に答える