Iam編寫一個GNU鏈接描述文件,並且需要向正確方向微調以解決以下問題。GNU鏈接描述文件:選擇性運行地址(VMA)分配
爲其創建鏈接描述文件的設備具有用於託管文本和rodata的Flash。它也有用於託管數據和BSS的SRAM。
我創建鏈接腳本有變型: - CODE和RODATA加載到Flash,而DATA和BSS是SRAM - CODE,RODATA,數據和BSS在SRAM
這些做工精細。
我現在必須創建鏈接描述文件的變體,其中包含大部分TEXT在Flash中。但是某些名稱以衆所周知的後綴結尾的例程將被加載到SRAM中。
例如,我想將Func1IRAMCode()和Func2__IRAMCode()加載到SRAM部分,而其他沒有IRAMCode後綴的函數必須加載到閃存中。
由於可移植性的原因,我不會將屬性(部分)附加到這些SRAM函數中。
這裏是絆腳石。 文字部分有以下規則:
.text :
{
*(.text .text.* .gnu.linkonce.t.*);
} > FLASH
.Misc :
{
* (.text.*IRAMCode);
} > SRAM
。數據和.bss段2單獨定義。
問題是* IRAMCode()正在分配閃存地址。
從文本部分中排除* IRAMCode的語法是什麼?
你是如何在你的項目中解決這個問題的?
我通過將所有目標文件的TEXT部分與所需的IRAM *代碼鏈接到SRAM而不是有選擇地鏈接例程來解決此問題。不是可擴展的解決方法.. – Raj