野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 584|回复: 2

STM32H7系列的RAM分配问题

[复制链接]
发表于 2024-10-18 11:02:40 | 显示全部楼层 |阅读模式

在STM32H7这类Cortex-M7处理器中,内存被划分为不同的区域,以适应不同的性能和功能需求。1M的RAM被划分为以下几个主要区域:

  • TCM(Tightly Coupled Memory):


    • ITCM(Instruction TCM):用于存储程序代码,地址从0x0000 0000开始,大小为64KB。
    • DTCM(Data TCM):用于数据存取,地址从0x2000 0000开始,大小为128KB。[color=var(--msh-chat-segment-quoteIcon-color)][backcolor=var(--msh-chat-segment-quoteIcon-bg)]
  • AXI SRAM区:


    • 位于D1域,挂在AXI总线上,速度为200MHz。
    • 地址从0x2400 0000开始,大小为512KB。[color=var(--msh-chat-segment-quoteIcon-color)][backcolor=var(--msh-chat-segment-quoteIcon-bg)]
  • SRAM1、SRAM2、SRAM3区:


    • 位于D2域,挂在AHB总线上,速度为200MHz。
    • SRAM1地址从0x3000 0000开始,大小为128KB。
    • SRAM2地址从0x3002 0000开始,大小为128KB。
    • SRAM3地址从0x3004 0000开始,大小为32KB。[color=var(--msh-chat-segment-quoteIcon-color)][backcolor=var(--msh-chat-segment-quoteIcon-bg)]
  • SRAM4区:


    • 位于D3域,挂在AHB总线上,速度为200MHz。
    • 地址从0x3800 0000开始,大小为64KB。[color=var(--msh-chat-segment-quoteIcon-color)][backcolor=var(--msh-chat-segment-quoteIcon-bg)]
  • Backup SRAM区:


    • 位于D3域,挂在AHB总线上,速度为200MHz。
    • 地址从0x3880 0000开始,大小为4KB。

DTCM区仅有CPU能访问,在火哥的ADC+DMA采样例程中__IO uint16_t ADC_ConvertedValue[4];DMA目标地址并没有指定内存区,是编译器自己分配到了AXI_RAM了吗?如果分配在128k的DTCM区,DMA就无法吧ADC转换的数据搬运到ADC_ConvertedValue吧?希望有大神能解释下。符图:

野火论坛202410181101527922..png 野火论坛202410181101199927..png 野火论坛202410181100575716..png

回复

使用道具 举报

发表于 2024-10-22 11:01:25 | 显示全部楼层
改下 ALIGN_32BYTES (__attribute__ ((at(0x30000000)))
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2024-10-23 13:09:30 | 显示全部楼层
WishWish 发表于 2024-10-22 11:01
改下 ALIGN_32BYTES (__attribute__ ((at(0x30000000)))

嗯,明白,把数组分配到指定的SRAM1空间里。我对用例程序,实际dubug发现定义的DMA缓存数组,是会分配在0x24000000;刚好在AXI_RAM区间内,所以DMA能够把ADC转换的数据放到DMA缓存数组。我好奇的是编译器是怎么知道我这块数组给DMA用,主动的分到了AXI_RAM。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-12-4 00:40 , Processed in 0.106864 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表