keil5編譯超大字庫類檔案時遇到的Error: L6406E類錯誤
- 問題描述
- 解決及原因
今天在上嵌入式課程的時候遇到了一個新問題,特此寫一篇博客記錄一下,
問題描述

今天往stm32f407的工程里面加入了u8g2這個12864點陣液晶的驅動庫的時候,compile編譯的時候沒有問題,但是link的時候出現了錯誤,報了Error: L6406E: No space in execution regions with .ANY selector matching這個錯誤,經過老師點撥,終于明白,并且學習到了新知識
解決及原因
這個是因為u8g2作為一個驅動庫,包含了一些超級大的字庫檔案,其中有個檔案大小足足有25M,但是實際上我們只用了字庫中一部分字體而已,如果整個檔案進行編譯鏈接就是記憶體空間的極大浪費,

整個工程編譯之后的資料量遠遠超過了芯片的內置flash大小,所以程式放不進芯片flash了,因此我們需要做的是對代碼進行高級優化,對keil5設定進行如下更改:


調整keil5里面的這個選項之后,編譯器就會對代碼進行優化,未優化的時候編譯器會把整個檔案進行編譯鏈接并且放到芯片的flash中,而經過高級優化之后,編譯器會自動識別在這個檔案中用到的東西才會進行編譯,沒有用到的部分就不會進行編譯了,去掉那些沒有用到的資料之后再進行編譯鏈接的話資料量就會小很多,
最終編譯結果(problem solved):

Level0-3的優化等級逐漸提高,但是隨著優化等級提高了,程式的可除錯性逐漸變差,所以大家謹慎選擇哦,
以后大家遇到這種類似的超大型檔案的時候也可以嘗試通過這個編譯選項進行調整哦~
一鍵三連,這次一定~
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/234324.html
標籤:其他
