在開發過程當中遇到Keil build錯誤,檢查發現時是鏈接時出錯了。
錯誤內容為:
Error: L6406E: No space in execution regions with .ANY selector matching
Error: L6407E: Sections of aggregate size 0x44 bytes could not fit into .ANY selector
懷疑有可能某些段的size溢出了。
因為使用的ARM芯片內置flash為64KB,RAM = 8KB,因此不太可能是flash溢出了,很可能是RAM溢出了。
所以嘗試了兩種解決方法:
第一種是將keil option里面的編譯優化選項,從level 0 調高到level 2,看看經過優化還會不會有溢出的問題。
實驗的結果是沒有溢出了,所以懷疑某些段溢出這個定論是對的,下一步就是要區分是RAM還是Flash溢出了。
第二種,是將一個比較大的函數掛載數組定義成const,也就是放在flash里面,再次build,發現錯誤也消失了。
看來果然是RAM溢出了。
普及下Keil編譯結果的參數含義:
請參考以下資料,說明RO/RW/ZI-DATA的含義:
http://www.keil.com/forum/10624/