[英]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.