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).
如果调高优化级别,代码量控制在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范围。