情景:
在編譯Keil工程時,compile編譯能夠通過,但在linking過程中,出現一大串”Error: L6406W: No space in execution regions with .ANY selector match Section“的錯誤。
分析:
這個出現的原因是因爲芯片RAM空間不足,無法執行程序。通常RAM的空間會比較小,ROM空間相對較大。
解決辦法:
兩個思路,一個是擴大RAM,二是減少需要存在RAM裏的內容:
1. 嘗試修改”Target Options“中右側RAM的Size,但這個要先查看芯片文檔,找到文檔中描述的RAM大小,把Size調成最大值。
但是我的這個工程還是不行,看來是預存的數據量太大了。
2. 如果第一種方法還是不行,那就只能嘗試把一些數據類的變量定義爲靜態,這樣就可以利用ROM的存儲空間了。找到工程中存儲數據的部分,發現是大量的float數組。這種情況會佔用大量的空間,所以要在float聲明的前面加一個”const“,轉換爲靜態變量。
這樣我的就可以通過了,成功生成了hex文件。
3. 如果第二種方法還是不行,那就只能修改代碼的數據結構了。