STM32F103C8T6移植FreeRTOS后编译失败,内存不够解决办法

STM32F103C8T6移植FreeRTOS后编译失败

使用STM32F103C8T6移植FreeRTOS的时候,编译会失败,但是在Stm32F103VET6工程上编译没问题,编译之后报以下错误

.\Objects\Table_lamp.axf: Error: L6406E: No space in execution regions with .ANY selector matching startup_stm32f10x_md.o(STACK).
.\Objects\Table_lamp.axf: Error: L6406E: No space in execution regions with .ANY selector matching tasks.o(.bss).
.\Objects\Table_lamp.axf: Error: L6406E: No space in execution regions with .ANY selector matching queue.o(.bss).
.\Objects\Table_lamp.axf: Error: L6406E: No space in execution regions with .ANY selector matching tasks.o(.data).
.\Objects\Table_lamp.axf: Error: L6406E: No space in execution regions with .ANY selector matching timers.o(.bss).
.\Objects\Table_lamp.axf: Error: L6406E: No space in execution regions with .ANY selector matching heap_4.o(.data).
.\Objects\Table_lamp.axf: Error: L6406E: No space in execution regions with .ANY selector matching system_stm32f10x.o(.data).
.\Objects\Table_lamp.axf: Error: L6406E: No space in execution regions with .ANY selector matching stm32f10x_rcc.o(.data).
.\Objects\Table_lamp.axf: Error: L6406E: No space in execution regions with .ANY selector matching usart.o(.bss).
.\Objects\Table_lamp.axf: Error: L6406E: No space in execution regions with .ANY selector matching timers.o(.data).
.\Objects\Table_lamp.axf: Error: L6406E: No space in execution regions with .ANY selector matching port.o(.data).
.\Objects\Table_lamp.axf: Error: L6406E: No space in execution regions with .ANY selector matching main.o(.data).
.\Objects\Table_lamp.axf: Error: L6406E: No space in execution regions with .ANY selector matching delay.o(.data).
.\Objects\Table_lamp.axf: Error: L6406E: No space in execution regions with .ANY selector matching task_user.o(.data).
.\Objects\Table_lamp.axf: Error: L6406E: No space in execution regions with .ANY selector matching stdout.o(.data).
.\Objects\Table_lamp.axf: Error: L6406E: No space in execution regions with .ANY selector matching usart.o(.data).
.\Objects\Table_lamp.axf: Error: L6407E: Sections of aggregate size 0x810 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 17 error messages.
“.\Objects\Table_lamp.axf” - 17 Error(s), 0 Warning(s).
Target not created.

这个是由于stm32f103c8t6的内存不足导致的,c8t6只有64k(实际上有128k,配置为128k一般也不会出问题),而vet6有512k,因此直接用vet6上 的FreeRTOS移植过来会导致内存不足的情况。
解决办法:
修改FreeRTOSConfig.h内的

#define configTOTAL_HEAP_SIZE					((size_t)(20*1024))

#define configTOTAL_HEAP_SIZE					((size_t)(10*1024))

也就是修改FreeRTOS系统所有总的堆大小,之后编译便会通过。
在网上还看到过修改程序优化等级的,不建议大家使用,首先把程序优化等级调节到最大。也就是Level 3(-O3),那么程序出奇葩问题的可能性也就最大,其次这样真正来说也节约不了多大内存,大家如果想在日后少死掉点脑细胞,建议还是设置优化等级为Level 0(-O0)!

  • 9
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

爱出名的狗腿子

你的鼓励就是我最大的动力

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

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

打赏作者

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

抵扣说明:

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

余额充值