stm32c8t6编译错误:Error: L6406E: No space in execution regions with .ANY selector matching ...

问题描述

        在我学习正点原子 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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值