我正在使用gcc編譯ARM Cortex-M4F微控制器的一些代碼。我的應用程序使用我已經方便地寫入C文件的大量數據集合:整數和浮點數的大數組,循環鏈表指向各種數組,各種結構體等等。將C文件中的所有數據強制爲.text(或其他)部分
當我編譯它時,它加起來約爲500K的數據,再加上幾百K的實際應用程序。 gcc將所有這些數據方便地放入.data部分;然後,ld嘗試構建將.data部分放入RAM並將.text(code)部分放入FLASH的精靈。我使用的單元沒有500K的RAM,所以它不能構建ELF,但它確實有1M的FLASH。我嘗試改變我的鏈接器腳本,以便將.data和.text放入「正常工作」的FLASH中,但還有一些代碼需要將其數據放入RAM中,因此最終執行失敗;我無法徹底改變。
我需要的是告訴gcc把這個C文件中的每一個對象都放到.text段中,這樣它就可以和其他非可變內容一起進入FLASH,或者至少我可以在其他部分然後指示我的鏈接器腳本如何處理,以便它不會干擾RAM中沒有問題的現有斑點。我不知道該怎麼做。下面是它鏈接到的我有什麼
/* data.c */
static char* option_array_0_0[] =
{
"O=0.40",
"K=FOO",
"JAR=JAR",
};
static int width_array_0_0[] =
{
0,
1,
1,
};
Window window_array_0[] =
{
{
option_array,
width_array,
},
};
/* main.c */
extern Window window_array_0[];
int main()
{
/* Do stuff */
}
在data.c,window_array_0一切東西(或大多數的一切,也許是字符串數組會與.text區段?)非常精簡下來例如,正在把我的鏈接器腳本放入RAM中的.data。我想把它放在不同的部分,然後我可以放入FLASH中。在那裏有數以千計的這些類型的數組,以及數百個結構和數十個其他信息位。這有可能改變嗎?作爲一個測試,我用一個char [500000]的隨機數據取代了我的「window_array_0」,並且編譯時沒有抱怨,所以我假設它把所有內容都放到了.text中(如我們所預料的那樣),我只是不知道如何製作它爲任意對象這樣做。 感謝您的幫助。
確認! 「靜態常量」實際上是我正在尋找的魔法詞。我不知道我是如何錯過的。我現在可以用這個工作。非常感謝! – DavidG