当前位置: 首页> 健康> 知识 > STM32F407VET6开发板RT-Thread memheap 内存堆的适配

STM32F407VET6开发板RT-Thread memheap 内存堆的适配

时间:2025/8/27 10:43:14来源:https://blog.csdn.net/tcjy1000/article/details/142031853 浏览次数:0次

相关文章

  • STM32F407VET6开发板RT-Thread的移植适配

  • STM32F407VET6开发板RT-Thread MSH 串口的适配

环境

  • STM32F407VET6 开发板(魔女),http://www.stm32er.com/

  • Keil MDK5,版本 5.36

memheap 内存堆

  • RT-Thread 支持 memheap 内存堆,并且支持多块内存(如SRAM)的管理

  • 如果 SRAM 地址不连续,可能会被分成几个内存块,多个内存块,可以使用 RT-Thread mem heap 进行管理

STM32F407VET6 SRAM

  • 通过查看 STM32F407VET6 的数据手册,SRAM总大小: 192K,分成三个部分

在这里插入图片描述

  • bsp 默认配置了 128K,也就是 112+16,还有一块 SRAM : 64 KB 的并没有利用起来,本次配置并让其工作起来

配置链接脚本

  • Keil MDK5 的链接脚本: stm32f407\stm32f407-st-discovery\board\linker_scripts\link.sct

  • 这里可以增加一个 SRAM2 的内存分区

在这里插入图片描述

  • board.c 中增加 SRAM2 的初始化代码
#define HEAP_SRAM2_BEGIN                (0x10000000)
#define HEAP_SRAM2_SIZE                 (64 * 1024)static struct rt_memheap memheap_sram2;
int system_sram2_init(void)
{return rt_memheap_init(&memheap_sram2, "sram2", (void *)HEAP_SRAM2_BEGIN, (rt_size_t)HEAP_SRAM2_SIZE);
}
INIT_BOARD_EXPORT(system_sram2_init);
  • 这里利用了 RT-Thread 自动初始化机制

配置使能 memheap

  • 通过 RT-Thread ENV 工具: menuconfig,配置使能 memheap 功能,并使用 scons --target=mdk5 更新工程

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

更新

  • 更新后,编写下载,通过 RT-Thead msh 串口 shell,查看内存 SRAM2 正常的初始化了

  • 【备注】:可以编写内存的申请函数,确认是否会分配使用 SRAM2 的内存

在这里插入图片描述

内存的申请测试:

  • 可以大块申请内存,比如一次申请 20KB,如果 默认 128K heap 不够了,就会在 sram2 内存堆中进行申请

  • 可以使用 RT-Thread MSH cmd 命令进行测试:

#define MEM_BLOCK_NUM           100
#define MEM_BLOCK_SIZE          10 * 1024rt_uint8_t *user_ptr[MEM_BLOCK_NUM] = { 0 };void mem_alloc_test(void)
{for (int i = 0; i < MEM_BLOCK_NUM; i++){user_ptr[i] = rt_malloc(MEM_BLOCK_SIZE);if (!user_ptr[i]){rt_kprintf("malloc failed, index = %d\n", i);return;}else{rt_kprintf("[%d] : 0x%08x\n", i, user_ptr[i]);}}
}
MSH_CMD_EXPORT(mem_alloc_test, mem_alloc_test);
  • 运行 自己创建的 msh cmd 命令: mem_alloc_test,发现内存块 sram2 也参与了内存的申请(rt_malloc),也就是内存分配,如果一个内存块不够,就尝试从其他内存块进行分配

在这里插入图片描述

小结

  • 本篇记录 RT-Thread 内存块管理: memheap 内存堆的使用

  • 通过配置 memheap,充分利用 MCU 的 SRAM 内存资源,把几个地址不连续的内存块管理起来

关键字:STM32F407VET6开发板RT-Thread memheap 内存堆的适配

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: