0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

你以为的RAM不是你以为的RAM~

朱老师物联网大讲堂 2024-04-05 08:09 次阅读

一、DTCM和AXI连接的RAM

STM32H7系列处理器内部有多个RAM空间,每个RAM空间的大小和响应速度都不一样。这里面我们重点关注DTCM总线矩阵连接的128KB RAM和AXI总线矩阵连接的512KB RAM。

d2089c24-f2e0-11ee-9118-92fbcf53809c.png

DTCM RAM 128KB:MDK配置是IRAM1:起始地址是0x20000000,大小是0x20000,128KB

AXI RAM 512KB: MDK配置是IRAM2:起始地址是0x240000000,大小是0x80000,152KB

d1fe83ce-f2e0-11ee-9118-92fbcf53809c.gif

二、lds链接脚本的内存分配

通过上述的分析,我们知道AXI RAM空间要比DTCM RAM空间是要大很多的,那么我们lds链接脚本该如何设置,才能使上电后start_xx.s汇编文件启动能将RW段、ZI段、HEAP、STACK能分配到AXI RAM 512KB 区域呐?取决于lds链接脚本的内存分配。首先我们分析一下RW段、ZI段、HEAP、STACK在内部RAM中是如何分配的(HEAP和STACK实际上也属于ZI段),这里面有几个概念需要清楚。通过下图的描述,我们能看到各个段的含义。

d2204f4a-f2e0-11ee-9118-92fbcf53809c.png

RAM中上述的段分配情况通过以下图表进行说明。从RAM起始地址开始依次存放RW-DATA,BSS、HEAP、STACK和剩余空间。这里举例是以0x20000000开始的128KB AXI RAM进行举例说明。

d2242dea-f2e0-11ee-9118-92fbcf53809c.png

既然有两个RAM存储区,那么我们的RW-DATA、BSS、HEAP、STACK应该链接在哪一个RAM区,这个时候就需要用到.lds链接脚本,链接脚本的作用就是对RAM和FLASH的分配做指定。

在MDK里有两种类型的链接脚本,一种链接脚本是MDK编译器自动指定,用户不需要关注,另外一种脚本是用户自定义,通过自定义脚本设定多片RAM的指定,和每一片RAM的具体用法。

用户自定义的用法是通过点击魔术棒->linker->按照下图的设置,然后点击Edit按钮就会打开链接脚本。

d230b736-f2e0-11ee-9118-92fbcf53809c.png

链接脚本的定义如下:通过注释我们知道有俩片RAM区,一片是RW_IRAM1(DTCM RAM:128KB,地址是0x20000000),一片是RW_IRAM2(AXI RAM:512K,地址是0x24000000),这里配置为RW_IRAM1注释掉不使用,使用RW_IRAM2。

.ANY (+RW +ZI),意思是将RW-DATA、ZI(BSS、HEAP、STACK)分配到RW_IRAM2内存区域。在程序上电启动时就会将此RAM使用起来,程序运行的临时变量、全局变量等都在RW_IRAM2中运行。

d244efd0-f2e0-11ee-9118-92fbcf53809c.png

此时我们发现AXI RAM 128KB空间没用到。如何将这个空间利用起来?rs485_sample_master.o (+RW +ZI)这句话的意思是将rs485_sample_master.c的这个文件中所有定义在RW_DATA段、ZI段的变量全部分布在RW_IRAM1这个RAM空间,也就是AXI RAM 128KB空间。

.ANY (axi_ram_128kb)这句话的意思是用户可以将任意的变量等按照一定的规则定义到RW_IRAM1这个RAM空间,也就是AXI RAM 128KB空间, (axi_ram_128kb) 的含义是这个将RW_RAM1这个内存区声明为axi_ram_128kb section。

在具体的C语言代码中的定义方式如下:

d25649d8-f2e0-11ee-9118-92fbcf53809c.png

我们查看.map文件可以看到具体的定义是否有效,或者通过串口查看变量分配地址。通过.map文件的查看,我们可以确定程序中定义的变量确实分配到0x20000000为起始地址的AXI RAM 128KB空间了。

rs485_sample_master.o文件的RW、ZI段也分配在了0x20000000为起始地址的AXI RAM 128KB空间了。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 处理器
    +关注

    关注

    68

    文章

    18880

    浏览量

    226872
  • RAM
    RAM
    +关注

    关注

    8

    文章

    1342

    浏览量

    114164
  • 总线
    +关注

    关注

    10

    文章

    2806

    浏览量

    87636
收藏 人收藏

    评论

    相关推荐

    什么是RAM和ROM

    RAM(Random Access Memory,随机存取存储器)和ROM(Read-Only Memory,只读存储器)是计算机存储系统中的两种重要组成部分,它们在计算机的性能和功能上扮演着不同的角色。下面将分别详细解释RAM和ROM的定义、特点、工作原理、类型及其在计
    的头像 发表于 08-30 11:38 791次阅读

    怎么解决MCU RAM空间不够用的问题?

    之前使用沁恒公司的一款BLE芯片CH573,随着代码量的增多,开发到后期时遇到了RAM空间不够用的问题,当时吓了我一跳,以为需要重新换更大RAM的芯片。
    的头像 发表于 05-01 09:57 898次阅读
    怎么解决MCU <b class='flag-5'>RAM</b>空间不够用的问题?

    易灵思RAM使用--Update5

    易灵思RAM在使用时可以会遇到一些问题,这里把常用的问题总结下。 1、ram初始化文件路径是工程路径 在对ram进行初始化时需要指定文件路径,这里要注意'/'的方向。 (1)如果文件放在工程目录
    的头像 发表于 04-24 08:43 395次阅读
    易灵思<b class='flag-5'>RAM</b>使用--Update5

    易灵思RAM使用--Update4

    易灵思RAM在使用时可以会遇到一些问题,这里把常用的问题总结下。 1、ram初始化文件路径是工程路径 在对ram进行初始化时需要指定文件路径,这里要注意'/'的方向。 (1)如果文件放在工程目录
    的头像 发表于 04-23 14:52 822次阅读
    易灵思<b class='flag-5'>RAM</b>使用--Update4

    fpga双口ram的使用

    FPGA双口RAM的使用主要涉及配置和使用双端口RAM模块。双端口RAM的特点是有两组独立的端口,可以对同一存储块进行读写操作,从而实现并行访问。
    的头像 发表于 03-15 13:58 710次阅读

    IC设计:ram的折叠设计操作步骤

    在IC设计中,我们有时会使用深度很大,位宽很小的ram。例如深度为1024,位宽为4bit的ram
    的头像 发表于 03-04 15:08 1988次阅读
    IC设计:<b class='flag-5'>ram</b>的折叠设计操作步骤

    MCU复位RAM会保持吗,如何实现复位时变量数据保持

    在使用MCU时,通常大家默认MCU复位时RAM会被复位清零,那实际MCU复位时RAM是什么状态?如何让mcu复位时RAM保持不变呢?
    的头像 发表于 03-01 09:32 1984次阅读
    MCU复位<b class='flag-5'>RAM</b>会保持吗,如何实现复位时变量数据保持

    ram和rom的作用和区别是什么

    RAM(Random Access Memory)是一种计算机内部存储器,而ROM(Read-Only Memory)则是一种只读存储器。两者在计算机系统中扮演着不同的角色,起到不同的作用。本文将
    的头像 发表于 02-04 17:05 3274次阅读

    RAM和ROM的区别,哪个与CPU连接

    RAM(Random Access Memory)和ROM(Read-Only Memory)是计算机中两种主要的存储器件,它们在结构、功能以及与CPU之间的连接上有不同之处。RAM主要用于临时存储
    的头像 发表于 01-31 14:14 1573次阅读

    易灵思RAM使用--Update3

    易灵思RAM在使用时可以会遇到一些问题,这里把常用的问题总结下。 1、ram初始化文件路径是工程路径 在对ram进行初始化时需要指定文件路径,这里要注意'/'的方向。 (1)如果文件放在工程目录
    的头像 发表于 12-12 09:52 443次阅读
    易灵思<b class='flag-5'>RAM</b>使用--Update3

    IC设计中关于ram的应用

    统计有效数据包的个数。 假设数据中存在pkt_id,pkt_id为0~63,则ram的深度为64。pkt_id用于作为读写地址。RAM读延时为3个时钟周期。
    的头像 发表于 11-17 17:36 493次阅读
    IC设计中关于<b class='flag-5'>ram</b>的应用

    IC设计:常见的ram访问冲突

    ram冲突是几乎每颗芯片都需要关注的问题,部分场景下,ram访问冲突不容易验证到,容易造成芯片bug。ram访问冲突的类型通常有访问接口冲突和访问地址冲突。
    的头像 发表于 11-13 10:44 1299次阅读
    IC设计:常见的<b class='flag-5'>ram</b>访问冲突

    各种RAM的原理及区别都知道吗

    存储器的种类很多,按其用途可分为主存储器和辅助存储器。主存储器简称内存,内存在电脑中起着举足轻重的作用,一般采用半导体存储单元。因为RAM是内存其中最重要的存储器,所以通常我们直接称之为内存。
    发表于 10-07 14:27 799次阅读

    单片机中的RAM vs ROM

    单片机中的RAM vs ROM
    的头像 发表于 09-28 17:57 987次阅读

    数组下标可以为负数吗 ?

    数组下标可以为负数吗
    发表于 09-26 06:45