keil编译报错:No space in execution regions with .ANY selector matching

6 篇文章 0 订阅

No space in execution regions with .ANY selector matching
出现该错误是因为内存溢出,没有更多的空间,可以从以下几点进行排查。

1、优化编译器的编译规则,配置成Level 3 最高级,但是会增加编译时间
在这里插入图片描述

Keil编译器提供了多种优化选项,以帮助程序员在编译代码时提高代码效率和性能。一些常见的优化选项包括:

优化级别: Keil编译器提供了不同的优化级别,通常分为无优化、低优化、中等优化和高优化等级。高优化级别可能会产生更高效的代码,但也可能增加编译时间。

内联函数: 内联函数可以减少函数调用的开销,将函数的内容直接嵌入到调用它的地方,提高程序执行速度。在Keil中,可以使用__inline关键字声明内联函数。

循环优化: Keil编译器能够优化循环,例如执行循环展开或者减少循环次数等,以提高代码效率。

变量寄存器分配: 通过适当的寄存器分配,可以减少内存访问次数,提高代码执行效率。Keil编译器可以通过优化变量的寄存器分配来实现这一点。

指令调度: 对于某些处理器架构,编译器可以对指令进行调度,以最大程度地利用处理器的流水线,减少空闲周期,提高执行效率。

优化控制流: Keil编译器可以通过优化控制流程(如条件语句和循环)来减少跳转指令的使用,提高代码执行速度。


2、把没有调用到的代码屏蔽掉;
比如以下都是要用到的库,没用到的我都去掉了;
在这里插入图片描述

3、把调试打印功能给屏蔽掉;

在这里插入图片描述

4、注意查看代码里面的大数组,减少大数组的定义。
5、增加堆栈的空间,修改汇编文件.s结尾,startup_ch32f20x_D8C.s
在单片机中,堆栈(Stack)是一种用于临时存储数据和管理程序执行的内存区域。堆栈的大小可以根据需求进行修改和设置,但通常在单片机中,堆栈的大小是有限制的,由硬件或软件定义。

堆栈的作用类似于一个临时存储区,用于存放函数调用时的局部变量、函数参数、返回地址等信息。当程序执行函数调用时,相关的信息会被推入堆栈,当函数执行完毕时,这些信息会被弹出堆栈,程序继续执行。

修改堆栈大小通常涉及到单片机的存储器配置或编译器的设置。具体步骤可能因不同的单片机型号或开发环境而异,但一般情况下:

通过编译器设置: 在一些开发环境中,可以通过编译器的选项或配置文件来修改堆栈大小。这可能涉及堆栈的起始地址和大小的设置,以及可能的内存保护机制。

在程序中设置堆栈大小: 有些单片机允许在程序中显式地设置堆栈大小,这可能需要特定的指令或者对相关寄存器的操作。

修改堆栈大小需要谨慎进行,因为堆栈过小可能导致堆栈溢出(Stack Overflow),这会影响程序的稳定性和正确性。如果堆栈不足以存放函数调用所需的信息,会导致程序异常终止或者不可预测的行为。

在设计程序时,应该根据程序的需求和单片机的规格来合理配置堆栈大小。通常,堆栈大小是在编译器或开发环境中设置的,建议参考相关的文档和开发工具的说明来进行设置。
在这里插入图片描述

  • 9
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
回答: 这个问题的报错信息是".\build\keil\Obj\rt-thread.axf: Error: L6406E: No space in execution regions with .ANY selector matching maintask.o(.bss)",其中原因可能是芯片的IRAM空间不足。解决方法可以尝试在KEIL的Target中选择IRAM2前的框打勾,以增加可用的IRAM空间。\[1\]另外,你也可以通过查看map文件来查看FLASH和SRAM的使用情况。打开xxx_STM32F103ZET6_HAL.map文件,拉到底部就可以看到程序占用的FLASH和SRAM的大小。\[2\]在编译结果栏里,你可以看到Code表示程序所占用的FLASH大小,RO-data表示程序定义的常量,RW-data表示已被初始化的全局变量,ZI-data表示未被初始化的全局变量。通过这些数据,你可以知道当前使用的FLASH和SRAM的大小。\[3\]所以,要注意的是程序的大小不是.hex文件的大小,而是编译后的Code和RO-data之和。 #### 引用[.reference_title] - *1* [Error: L6406E: No space in execution regions with .ANY selector matching main.o(.bss).](https://blog.csdn.net/m0_68997646/article/details/130642226)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [keil5软件报错 Error: L6406E: No space in execution regions with .ANY selector matching xxx](https://blog.csdn.net/qq_44250317/article/details/125642008)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱睡的梨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值