基于STM32F103C8T6移植Free-RTOS中内存不足的问题(一)

MCU : STM32F103C8T6

编译器:Keil5

前言: 打算学习一下Free-RTOS,手里有一块STM32F103C8T6的板子,就想着先拿来练手,移植上去先学起来,并且打算在CSDN上记录一下一路遇到的坑,萌新第一次写博客,如果有什么意见或者有不对的地方欢迎大家留言。

我是先去图书馆借了本“FreeRTOS源码详解与应用开发”跟着教程一步一步移植好后,编译发现一大堆错误

..\Output\ESP32Server_FreeRTOS.axf: Error: L6406E: No space in execution regions with .ANY selector matching heap_4.o(.bss).
..\Output\ESP32Server_FreeRTOS.axf: Error: L6406E: No space in execution regions with .ANY selector matching tasks.o(.bss).
..\Output\ESP32Server_FreeRTOS.axf: Error: L6406E: No space in execution regions with .ANY selector matching bsp_usart.o(.bss).
..\Output\ESP32Server_FreeRTOS.axf: Error: L6406E: No space in execution regions with .ANY selector matching tasks.o(.data).
....还有好多
..\Output\ESP32Server_FreeRTOS.axf: Error: L6407E: Sections of aggregate size 0x1087c bytes could not fit into .ANY selector(s).

上网一查是因为芯片的空间不足,网上的解决方法写有很多
1.勾选Use MicroLIB

在option -> 选择Target -> 勾选Use MicroLIB

实际操作一下发现确实有用,但是好像收效甚微,勾选后重新编译,内存确实占用的少了一点,但是还是通过不了编译呀
这个时候我又跟着进行了第二步操作

..\Output\ESP32Server_FreeRTOS.axf: Error: L6406E: No space in execution regions with .ANY selector matching heap_4.o(.bss).
..\Output\ESP32Server_FreeRTOS.axf: Error: L6406E: No space in execution regions with .ANY selector matching tasks.o(.bss).
..\Output\ESP32Server_FreeRTOS.axf: Error: L6406E: No space in execution regions with .ANY selector matching bsp_usart.o(.bss).
..\Output\ESP32Server_FreeRTOS.axf: Error: L6406E: No space in execution regions with .ANY selector matching tasks.o(.data).
....
..\Output\ESP32Server_FreeRTOS.axf: Error: L6407E: Sections of aggregate size 0x1061c bytes could not fit into .ANY selector(s).

2.更改Optimization 为 Level 3(-O3)

在option-> 选择C/C++ -> 更改Optimization 为 Level 3(-O3)

网上给出的解释是这是一个优化等级,不同优化等级,占用代码量和运行速度是不一样的
(-O3)运行最快,代码量最少,但是最容易出问题
但是实际操作后发现好像没有用处。

3.更改configTOTAL_HEAP_SIZE的大小

在FreeRTOSConfig.h文件夹下 更改configTOTAL_HEAP_SIZE的大小

这个也是目前最暴力,最有效的方式,因为跟着书移植这些也都没有改动,但是书里面是基于F4移植的,这里给操作系统开辟的内存很大,而C8T6的资源很少所以造成了出现内存不足的情况,我在这里将configTOTAL_HEAP_SIZE配置为10k

#define configTOTAL_HEAP_SIZE		((size_t)(10 * 1024))	/* 系统总堆栈大小	*/

通过编译,问题解决。

  • 11
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值