フラッシュベースのmicrcontrollerで実行するコードをリンクするはずの次のリンカスクリプトがあります。 uCのアドレスは0x0に、RAMは0x40000000になります。私はフラッシュにデータセクションを入れたいが、データセクションへのアクセスがRAMで行われるようにプログラムをリンクする。要点は、コントローラを起動するときに、フラッシュから手動で適切なRAMの場所にコピーします。フラッシュリンカスクリプトのロードと仮想アドレス
int foo[] = {1,2,3,4,5,6};
問題は、それが0x40000000からにリンクされていることである
40000000 <__data_beg__>:
40000000: 00000001 andeq r0, r0, r1
40000004: 00000002 andeq r0, r0, r2
40000008: 00000003 andeq r0, r0, r3
4000000c: 00000004 andeq r0, r0, r4
40000010: 00000005 andeq r0, r0, r5
40000014: 00000006 andeq r0, r0, r6
フォームの配列を表し、そしてない:
MEMORY
{
flash : ORIGIN = 0x00000000, LENGTH = 512K
ram : ORIGIN = 0x40000000, LENGTH = 32K
usbram : ORIGIN = 0x7FD00000, LENGTH = 8K
ethram : ORIGIN = 0x7FE00000, LENGTH = 16K
}
SECTIONS
{
.text : { *(.text) } >flash
__end_of_text__ = .;
.data :
{
__data_beg__ = .;
__data_beg_src__ = __end_of_text__;
*(.data)
__data_end__ = .;
} >ram AT>flash
.bss :
{
__bss_beg__ = .;
*(.bss)
} >ram
}
上に示したように、コードは、次の出力を生成します私が望むように私は、LDマニュアルで説明されているように、リンカースクリプトのAT>フラッシュ部分にフラッシュへのリンクを指定することを期待していました。
arm-elf-ld -T ./lpc2368.ld entry.o main.o -o binary.elf
ありがとう:
http://sourceware.org/binutils/docs/ld/Output-Section-Attributes.html#Output-Section-Attributes
、ここでは私のldの呼び出しです。
で見ることができます適切なRAMオフセット?したがって、ここではリンカは指定されたアドレス(この場合は '__data_beg__')のRAMにデータをコピーしたと仮定していますか?つまり、 '__data_beg_src__'(フラッシュ)を' __data_beg__'(RAM)にコピーしますか? – sherrellbc