最近在使用GD32F425RG芯片是遇到了一个关于RAM的问题,在我的项目中定义了一个两个很大的数组一个136K另一个68K整个程序所用的RAM210K左右,但在编译的时候编译不通过,显示RAM超范围。后经过查找芯片手册得知,在GD32F425微控制器中,其内部RAM总容量为256KB,但根据GD32F4xx系列的通用设计,这部分RAM并非连续单一的存储区域,而是被划分为多个物理块,每个块具有不同的基地址和特性。合理利用这些分块对系统性能和稳定性至关重要。以下是基于GD32F4xx系列RAM特性的注意事项总结:

一、RAM分块结构及基地址

根据GD32F4xx系列的通用设计,256KB的片上SRAM通常分为以下物理块:

  1. SRAM0:112KB,基地址为0x20000000,通常用于存储全局变量、堆栈等通用数据。

  2. SRAM1:16KB,基地址为0x2001C000,适合小规模数据或特定功能模块使用。

  3. SRAM2:64KB,基地址为0x20020000,可作为缓冲区或动态内存池。

  4. TCMSRAM(紧耦合存储器):64KB,仅可通过Cortex-M4内核数据总线访问,适合高频访问数据(如实时算法变量)

二、分块使用注意事项

1. 内存分配策略优化
  • 高频数据优先使用TCMSRAM:TCMSRAM因其低延迟特性,适合存储实时性要求高的数据(如中断服务程序变量、DMA缓冲区)。需注意其无法被DMA直接访问,需通过内核操作。

  • 动态内存管理:若使用动态内存分配(如malloc),需指定内存池的基地址。例如,将大数组或动态内存池分配到SRAM2,避免占用TCMSRAM资源。

  • 全局变量优化:减少未初始化的全局变量(ZI-data),优先使用const修饰常量以节省RW-data空间,降低RAM占用。

2. DMA与外设访问限制
  • TCMSRAM的DMA限制:TCMSRAM无法直接被DMA控制器访问,若需DMA传输,需将数据暂存至其他SRAM块后再操作。

  • 外设缓冲区对齐:使用SRAM2作为外设(如SPI、UART)缓冲区时,需确保数据对齐,避免因地址越界引发硬件错误。

下面是GD32F425芯片手册关于RAM介绍的部分截图:

三、在使用TCMSRAM部分的内存时我们在keil上需要将IRAM2勾选上,不然也会报错

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐