问题描述
在我学习正点原子 FreeRTOS 后,将 FreeRTOS 项目从 STM32RCT6 移植到 STM32C8T6 的过程中遇到了如图编译错误:
问题分析
该报错的意思大概就是板子空间不足了。也就是说可能是代码中 Flash 或者 SRAM 占用的内存超过了板子能承受的最大内存限制。
关于如何查看代码占用的实际内存可以看这篇博客:
stm32f103c8t6 程序编译后的 Program Size: Code=xxx RO-data=xxx RW-data=xxx ZI-data=xxx 是什么-CSDN博客
因为移植完后的代码报错,我们无法查看代码占用的实际内存,那么我们就看看移植前的代码占用内存情况。
我们打开 map 文件,果不其然:c8t6 的 SRAM 只有20k,但程序所占 RW 为 28.33k。
问题解决
既然我们知道了问题所在,那么只需要降低 RW 即可。由于 SRAM 存储器通常用于存储程序运行时的变量、栈和堆等数据。因此我们可以减小堆栈内存大小。
1、malloc.c
我们可以在不影响程序正常运行的情况下减小最大管理内存。从 35 改到 4;
2、FreeRTOSconfig.h
我们也可以在不影响程序正常运行的情况下修改 FreeRTOS 中的总堆大小。从 20 改到 8;