2012-06-04 22 views
0

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的語法是什麼?

你是如何在你的項目中解決這個問題的?

+0

我通過將所有目標文件的TEXT部分與所需的IRAM *代碼鏈接到SRAM而不是有選擇地鏈接例程來解決此問題。不是可擴展的解決方法.. – Raj

回答

0

要做到這一點,一種方法是將你的函數放在另一個部分(例如.sram.text),爲此,使用gcc的section屬性作爲每個特定函數(例如:__attribute__ ((section ".sram.text"))。

因此,將所需部分通配到SRAM將非常容易。