我是靠谱客的博主 繁荣天空,最近开发中收集的这篇文章主要介绍关于stm32移植FreeRTOS后编译出现内存不足的原因,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

今天在学习移植freeRTOS的时候,出现了一大堆内存不足的错误:
linking…
…OBJTEST.axf: Error: L6406E: No space in execution regions with .ANY selector matching heap_4.o(.bss).
…OBJTEST.axf: Error: L6406E: No space in execution regions with .ANY selector matching startup_stm32f10x_hd.o(STACK).
…OBJTEST.axf: Error: L6406E: No space in execution regions with .ANY selector matching tasks.o(.bss).
…OBJTEST.axf: Error: L6406E: No space in execution regions with .ANY selector matching startup_stm32f10x_hd.o(HEAP).
…OBJTEST.axf: Error: L6406E: No space in execution regions with .ANY selector matching usart.o(.bss).
…OBJTEST.axf: Error: L6406E: No space in execution regions with .ANY selector matching libspace.o(.bss).
…OBJTEST.axf: Error: L6406E: No space in execution regions with .ANY selector matching queue.o(.bss).
…OBJTEST.axf: Error: L6406E: No space in execution regions with .ANY selector matching tasks.o(.data).
…OBJTEST.axf: Error: L6406E: No space in execution regions with .ANY selector matching timers.o(.bss).
…OBJTEST.axf: Error: L6406E: No space in execution regions with .ANY selector matching heap_4.o(.data).
…OBJTEST.axf: Error: L6406E: No space in execution regions with .ANY selector matching system_stm32f10x.o(.data).
…OBJTEST.axf: Error: L6406E: No space in execution regions with .ANY selector matching stm32f10x_rcc.o(.data).
…OBJTEST.axf: Error: L6406E: No space in execution regions with .ANY selector matching timers.o(.data).
…OBJTEST.axf: Error: L6406E: No space in execution regions with .ANY selector matching main.o(.data).
…OBJTEST.axf: Error: L6406E: No space in execution regions with .ANY selector matching port.o(.data).
…OBJTEST.axf: Error: L6406E: No space in execution regions with .ANY selector matching usart.o(.data).
…OBJTEST.axf: Error: L6406E: No space in execution regions with .ANY selector matching delay.o(.data).
…OBJTEST.axf: Error: L6407E: Sections of aggregate size 0x5b28 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 18 error messages.
“…OBJTEST.axf” - 18 Error(s), 0 Warning(s).
Target not created.
Build Time Elapsed: 00:00:02

移植的文件都是按照正点原子的软件源代码移植的,当时都惊了,一模一样的文件居然都能出现问题,因为我基本把整个FreeRTOS源代码看过了,所以知道是FreeRTOSconfig.h文件里面的最大内存空间设置问题,网上大家也说改一下就好了,但是我对于这个KEIL上的内存空间配置没有搞清楚,今天专门去各种百度,在此记录下来。
首先现说明造成编译出错的原因:
在FreeRTOSConfig.h文件里面的
/**************************************************************************************************************/
/
FreeRTOS与内存申请有关配置选项 /
/
*************************************************************************************************************/
#define configSUPPORT_DYNAMIC_ALLOCATION 1 //支持动态内存申请
#define configTOTAL_HEAP_SIZE ((size_t)(20
1024)) //系统所有总的堆大小
这里的系统所有总的堆大小是20K,但是我的keil默认设置的只有0x2800,也就是10K。(这是因为我以前初学时候建立的工程,当时这里配置就没有配置正确,所以才导致了这一出问题)在这里插入图片描述
这就是造成内存不足的原因,我们需要将IRAM1里面的0x2800改大,至少应该是大于20K才行,那是不是随便改呢,那肯定是不是的了,要根据你芯片的RAM大小来设置,
在这里插入图片描述

正点原子的STM32F103ZET6的RAM是64K,FLASH512K,所以我们能在keil的IRAM1中配置的最大值就是0x10000,这里的IROM1也要改一下,改成0x80000。
在这里插入图片描述
配置好在编译就没撒问题了。

现在我们就是来弄懂这个IROM1,和IRAM1。
在正点原子的论坛里有人就提出问题,问了这3个地方到底是什么意思和作用?
在这里插入图片描述
在这里插入图片描述
这三处的意思和作用:
1,IROM1,前面是首地址,后面是大小,表示FLASH(代码存储区间)的起始地址和大小。
2,IRAM1,前面是首地址,后面是大小,表示RAM(变量存储区)的起始地址和大小。
3,RAM for Algorithm是用来在IRAM1区域划分一段空间,用来运行flash下载算法(可理解为一个程序),从而给MCU下载代码。但是这个空间只在下载代码的时候有用,下载完了代码以后,这段空间就可以被你的APP代码(你下载的代码)占用的,相当于释放了。

最后

以上就是繁荣天空为你收集整理的关于stm32移植FreeRTOS后编译出现内存不足的原因的全部内容,希望文章能够帮你解决关于stm32移植FreeRTOS后编译出现内存不足的原因所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(67)

评论列表共有 0 条评论

立即
投稿
返回
顶部