簡體   English   中英

GCC linker 腳本 - split.bss 部分到多個 RAM 區域

[英]GCC linker script - split .bss section to multiple RAM regions

嵌入式設備有兩個 SRAM 區域。 首先是 0x20000000,長度為 16k。 然后在 0x20040000 長度 96k。 在應用程序中,生成的.bss 部分大小為 102k,因此它不完全適合任一 RAM 區域。 它需要在兩個區域之間進行拆分。 如何做到這一點是 in.ld linker 腳本?

我知道兩個很笨拙的選擇。

選項 A:在腳本中按名稱手動選擇對象並將它們分成兩個部分。 使用此選項,我覺得我正在手動執行 linker 應該執行的操作。

選項 B:將屬性放置到源代碼中,以使一些對象成為 special.bss2 部分。 這個比選項A還要糟糕。

我希望 linker 自動在兩個 memory 區域中以最佳方式分割對象。 我知道至少 IAR linker 可以在沒有任何手動操作的情況下做到最佳。

我從恩智浦員工那里得到了回報:
“GNU linker 正在以線性方式遍歷 linker 腳本文件,並且不會嘗試填充東西或將變量分配到不同的 memory 區域。”
您必須創建一個bss2部分並在啟動文件中初始化它,然后 go 用於選項 A 或 B。您也可以使用另一個工具鏈,它們中的大多數都能夠將變量分配到不同的 memory 部分

Linker 腳本:

.bss2 :
  {
    . = ALIGN(4);
    __bss2_start__ = .;
    *(.bss2)
    *(.bss2.*)
    . = ALIGN(4);
    __bss2_end__ = .;
  } > RAM2 AT > RAM2

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM