MDK優化變量的問題

最近在項目上遇到個問題,在特定位置給局部變量賦值的時候會導致單片機code劇增。

最後查找問題根源才知道原來是編譯器將變量給優化了,在變量的定義處加上關鍵字__IO即可解決這個問題。

在我們註釋掉一個函數的調用語句時(沒有註釋掉函數的實現)導致我們的代碼量code增加了不少,按照正常邏輯來說,註釋掉代碼,應該是代碼量code減少纔對,後面經過查資料得出問題的根源:

編譯原理中給出了問題的原因:

註釋掉函數的調用卻不註釋掉該函數本體,則編譯器在編譯時仍然會編譯該函數,並且由於缺少對該函數的顯式調用,編譯器將假定該函數是被隱式調用的(例如通過函數指針),因此不得不更加小心地將該函數用到的局部變量單獨封塊,從而導致原本可以被複用的data段無端地多出一個塊來。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章