• 欢迎访问开心洋葱网站,在线教程,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站,欢迎加入开心洋葱 QQ群
  • 为方便开心洋葱网用户,开心洋葱官网已经开启复制功能!
  • 欢迎访问开心洋葱网站,手机也能访问哦~欢迎加入开心洋葱多维思维学习平台 QQ群
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏开心洋葱吧~~~~~~~~~~~~~!
  • 由于近期流量激增,小站的ECS没能经的起亲们的访问,本站依然没有盈利,如果各位看如果觉着文字不错,还请看官给小站打个赏~~~~~~~~~~~~~!

RT-Thread移植u8g2出现No space in execution regions的分析以及初始化相同优先级线程后第一次调度的机制

人工智能 better_coder 1067次浏览 0个评论

Error: L6406E: No space in execution regions with .ANY selector matching

问题描述

RT-Thread移植u8g2出现No space in execution regions的分析以及初始化相同优先级线程后第一次调度的机制  

今天往stm32f407的工程里面加入了u8g2这个12864点阵液晶的驱动库的时候,compile编译的时候没有问题,但是链接link的时候出现了错误,报了Error: L6406E: No space in execution regions with .ANY selector matching这个错误,经过老师点拨,终于明白,并且学习到了新知识  


解决及原因

这个是因为u8g2作为一个驱动库,包含了一些超级大字库文件,其中有个文件大小足足有25M但是实际上我们只用了字库中一部分字体而已,如果整个文件进行编译链接就是内存空间的极大浪费。

RT-Thread移植u8g2出现No space in execution regions的分析以及初始化相同优先级线程后第一次调度的机制  

整个工程编译之后的数据量远远超过了芯片的内置flash大小,所以程序放不进芯片flash了,因此我们需要做的是对代码进行高级优化。对keil5设置进行如下更改:  RT-Thread移植u8g2出现No space in execution regions的分析以及初始化相同优先级线程后第一次调度的机制   RT-Thread移植u8g2出现No space in execution regions的分析以及初始化相同优先级线程后第一次调度的机制  

调整keil5里面的这个选项之后,编译器就会对代码进行优化未优化的时候编译器会把整个文件进行编译链接并且放到芯片的flash中,而经过高级优化之后,编译器会自动识别在这个文件中用到的东西才会进行编译,没有用到的部分就不会进行编译了。去掉那些没有用到的数据之后再进行编译链接的话数据量就会小很多。  


最终编译结果(problem solved)

RT-Thread移植u8g2出现No space in execution regions的分析以及初始化相同优先级线程后第一次调度的机制  

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


初始化相同优先级线程后第一次调度的机制

现象

首先在sample在初始化函数里面创建线程1和线程2这2个线程,初始化为相同的优先级 (注意,这里是先创建的线程1,再创建的线程2)   RT-Thread移植u8g2出现No space in execution regions的分析以及初始化相同优先级线程后第一次调度的机制  

然后进入调试模式,在线程1和线程2的函数入口打断点

  RT-Thread移植u8g2出现No space in execution regions的分析以及初始化相同优先级线程后第一次调度的机制   RT-Thread移植u8g2出现No space in execution regions的分析以及初始化相同优先级线程后第一次调度的机制  

结果发现每次debug调用这个sample的时候,总是会停在线程1的入口断点那里  

原因

固有观念来看,2个相同优先级的线程在刚开始的时候应该是等概随机调用的。然而 实际上,线程1初始化完成之后就进入就绪队列了,但是线程2可能都没初始化完成,所以在就绪队列里面肯定是线程1排在线程2的前面,因此进入线程调度之后肯定是先线程1先运行。  


                                               (づ ̄3 ̄)づ╭❤~一键三连,这次一定(๑•̀ㅂ•́)و✧ 

RT-Thread移植u8g2出现No space in execution regions的分析以及初始化相同优先级线程后第一次调度的机制


开心洋葱 , 版权所有丨如未注明 , 均为原创丨未经授权请勿修改 , 转载请注明RT-Thread移植u8g2出现No space in execution regions的分析以及初始化相同优先级线程后第一次调度的机制
喜欢 (0)

您必须 登录 才能发表评论!

加载中……