Error: L6406E: No space in execution regions with .ANY selector matching xxx.o(.xxx).

keil5 下载时出现错误

  • 前言
  • 一、错误分析
  • 二、解决方法
  • 三、其它报错原因

前言

我在使用STM32F4的FreeRTOS做项目实验过程中遇到报错:提示内存大小不足以存储当前代码,简单的说就是:芯片的存储空间不够


一、错误分析

linking…
…\OBJ\LED.axf: Error: L6406E: No space in execution regions with .ANY selector matching heap_4.o(.bss).
…\OBJ\LED.axf: Error: L6406E: No space in execution regions with .ANY selector matching spi.o(.bss).
…\OBJ\LED.axf: Error: L6406E: No space in execution regions with .ANY selector matching malloc.o(.bss).

。。。。。。

…\OBJ\LED.axf: Error: L6406E: No space in execution regions with .ANY selector matching spi.o(.data).
…\OBJ\LED.axf: Error: L6407E: Sections of aggregate size 0x12554 bytes could not fit into .ANY selector(s).
Not enough information to list image symbols.
Not enough information to list load addresses in the image map.
Finished: 2 information, 0 warning and 31 error messages.
“…\OBJ\LED.axf” - 31 Error(s), 3 Warning(s).
Target not created.
Build Time Elapsed: 00:00:17

错误原因:我是用到了 malloc 内存管理,申请了大量空间,但我再把想要的程序都移植到这个工程中,就显示报错。

二、解决方法

找到 malloc.h 文件,将最大管理内存先改小,然后再改大选择合适的。比如我这里先改成20K,也就是(20*1024)就能正常运行,然后我有改成了40K就有报错,说明最大管理内存不能超过40K,否则就报错;其次改成了35K就能正常运行了。
Error: L6406E: No space in execution regions with .ANY selector matching xxx.o(.xxx)._第1张图片
最大管理内存改为 35K,根据自己code的情况来决定
Error: L6406E: No space in execution regions with .ANY selector matching xxx.o(.xxx)._第2张图片
最后就解决错误了!

三、其它报错原因

将大容量的芯片程序移到小芯片容量程序可能也会报错,比如原程序是在STM32F103VET6这种大容量芯片移植到STM32F103RBT6这块中等容量的芯片:

STM32F103VET6:FLASH size 512kb RAM : 64Kb
STM32F103RBT6:FLASH size 128Kb RAM : 20Kb
这里很明显存储大小都不一样,也可能会报错

当然还有其它的错误原因,遇到问题先看是什么原因导致报错的再进行度娘解决。

你可能感兴趣的:(STM32,单片机,stm32,嵌入式硬件)