STM8L052R8 超過(guò)32KB之后代碼編譯出錯(cuò)問(wèn)題
掃描二維碼
隨時(shí)隨地手機(jī)看文章
我在使用 STM8L052R8 做的一個(gè)項(xiàng)目,這顆芯片F(xiàn)LASH應(yīng)該是 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];
但是,我在程序中,如果編譯代碼超過(guò) 32KB,則編譯出錯(cuò),提示:
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).
如果調(diào)高優(yōu)化級(jí)別,代碼量控制在32KB以內(nèi),則可編譯通過(guò)。
在項(xiàng)目設(shè)置, Optione->Target->Device 選擇 stm8l152r8; stm8l152.h 中,選擇 #define STM8L15X_HD
不知道還有什么可能導(dǎo)致此錯(cuò)誤? 還是會(huì)不會(huì)我買(mǎi)到的芯片有問(wèn)題呢?
解決辦法:更改項(xiàng)目配置,General Options->Target中的Code改為Mediue或者Large
Code的small是64K byte尋址范圍,medium是16M byte范圍,但函數(shù)不允許跨越64K byte邊界, large模式下是16M byte尋址范圍,函數(shù)不存在跨界限制,隨便放
Date的small是256 byte尋址范圍,medium是64K byte范圍,large是16M范圍。