STM8L052R8 超過32KB之后代碼編譯出錯問題
我在使用 STM8L052R8 做的一個項目,這顆芯片FLASH應該是 64KB,IAR查看 lnkstm8l052r8.icf 文件,有如下定義:
define region NearFuncCode = [from 0x8000 to 0xFFFF];
define region FarFuncCode = [from 0x8000 to 0xFFFF]
| [from 0x10000 to 0x17FFF];
define region HugeFuncCode = [from 0x8000 to 0x17FFF];
但是,我在程序中,如果編譯代碼超過 32KB,則編譯出錯,提示:
Error[Lp011]: section placement failed
unable to allocate space for sections/blocks with a total estimated
minimum size of 0x96ee bytes in <[0x008000-0x00ffff]>
(total uncommitted space 0x7f80).
如果調高優(yōu)化級別,代碼量控制在32KB以內,則可編譯通過。
在項目設置, Optione->Target->Device 選擇 stm8l152r8; stm8l152.h 中,選擇 #define STM8L15X_HD
不知道還有什么可能導致此錯誤? 還是會不會我買到的芯片有問題呢?
解決辦法:更改項目配置,General Options->Target中的Code改為Mediue或者Large
Code的small是64K byte尋址范圍,medium是16M byte范圍,但函數不允許跨越64K byte邊界, large模式下是16M byte尋址范圍,函數不存在跨界限制,隨便放
Date的small是256 byte尋址范圍,medium是64K byte范圍,large是16M范圍。