将8位AVR项目迁移至STM32G030C8时遭遇RAM不足问题求助
STM32G030C8移植FreeRTOS+LCD时RAM不足问题排查
背景与问题
- 原有项目:基于ATmega4809(6KiB RAM),运行FreeRTOS+128×128点阵显示屏,开启-O1优化后,程序内存占用46114字节(93.8%),数据内存占用4789字节(77.9%),可正常运行。
- 新移植项目:采用STM32G030C8(8KiB RAM),遇到以下问题:
- 基于HAL/CMSIS_V2部署FreeRTOS时无法适配,已关闭所有未用功能、选择与原项目一致的heap_1内存管理方案,仅CMSIS_V1能成功烧录基础FreeRTOS项目。
- 加入LCD显示代码后立即出现RAM不足,尚未完成AVR代码的完整迁移就触发该问题。
细节疑问
- 字库存储:AVR项目用PROGMEM将字库表存于Flash,STM32项目用
const修饰字库表以放入Flash,确认该部分未占用RAM。 - LCD帧缓冲区:定义为
uint8_t buffer[2048],怀疑编译器是否错误将其编译为2048个32位值,导致RAM占用翻倍。
更新信息
移除FreeRTOS仅保留LCD代码时,执行arm-none-eabi-size命令得到以下输出:
arm-none-eabi-size STM32G030C8-48pin.elf text data bss dec hex filename 33136 180 6804 40120 9cb8 STM32G030C8-48pin.elf
- 从输出可见2KB的LCD帧缓冲区已正常分配,但存在1.5KB的
.user_heap_stack段,疑问FreeRTOS的heap_1是否已经接管了堆栈管理,为何仍存在这个默认的堆栈段占用RAM。
内容的提问来源于stack exchange,提问作者user3411864
相关产品推荐
相关产品推荐

