STM32F103C8T6移植FreeRTOS内存不足的问题

这两天在学习FreeRTOS实时操作系统,手里有一块以前买的普中科技(芯片:STM32F103C8T6)的开发板,于是就试了下把FreeRTOS移植到板子上。

使用开发板自带的LED的例子,参考正点原子的FreeRTOS移植参考手册。

按照步骤把FreeRTOS移植完用Keil5编译的过程中,出现了好多内存不足的link错误。见下图:

针对这个问题,查了下芯片官网。正点原子使用的是STM32F103VET6芯片(FLASH 512Kb,SRAM 64Kb),而我使用的开发板的芯片是STM32F103C8T6芯片(FLASH 128Kb,SRAM 20Kb),

芯片官网的架构图上是SRAM是10Kb,按照芯片手册来说应该是20Kb。两种芯片架构图如下:

了解了这个细节后,知道上面编译出错的根本原因是出在内存上。而FreeRTOS使用xCreatTask函数创建任务是用的动态内存,即在SRAM里自动分配的。

在FreeRTOSConfig.h配置文件中有设置RTOS要使用的内存大小,用configTOTAL_HEAP_SIZE宏定义的。

在正点原子的手册中,他的芯片是用的STM32F103VET6芯片(FLASH 512Kb,SRAM 64Kb),而它的这个宏定义的值是20K(20*1024)。

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

我要移植到芯片 STM32F103C8T6芯片(FLASH 128Kb,SRAM 20Kb),因此这个宏定义不能使用上面芯片设置的值20K,修改成10K

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

再次编译工程,上述的错误消失,成功通过编译。


在网上还看到过修改程序优化等级的,不建议大家使用,首先把程序优化等级调节到最大,也就是Level 3(-O3),容易出现一些奇怪的问题,而且也不会节省多少内存。

建议还是设置成默认优化等级Level 0(-O0)不变。

  • 23
    点赞
  • 67
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

king110108

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

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

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

打赏作者

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

抵扣说明:

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

余额充值