Error: L6406E: No space in execution regions with .ANY selector matching 原因及解决办法

   日期:2020-12-14     浏览:2010    评论:0    
核心提示:keil5编译超大字库类文件时遇到的Error: L6406E类错误问题描述解决及原因今天在上嵌入式课程的时候遇到了一个新问题,特此写一篇博客记录一下。问题描述今天往stm32f407的工程里面加入了u8g2这个驱动芯片显示字符的库,compile编译的时候没有问题,但是link的时候出现了错误,报了Error: L6406这个错误,经过老师点拨,终于明白,并且学习到了新知识解决及原因...

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的优化等级逐渐提高,但是随着优化等级提高了,程序的可调试性逐渐变差,所以大家谨慎选择哦。
以后大家遇到这种类似的超大型文件的时候也可以尝试通过这个编译选项进行调整哦~

一键三连,这次一定~

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服