STM32H743+Keil-将变量定义到指定内存

本文详细介绍了如何在Keil中针对STM32H743芯片,将变量分配到指定的DTCM内存。通过修改Target和Linker设置,创建.sct文件来定义内存区域,并在代码中使用ALIGN_32BYTES声明变量。在DEBUG模式下验证内存分配正确性。
摘要由CSDN通过智能技术生成

一、前言


在STM32CubeIDE实现了将变量定义到指定内存,当使用Keil时,方法又不一样了。
STM32H743+CubeIDE-将变量定义到指定的内存

RAM:0x20000000 ~ 0x20020000 ,尺寸128KB。这个就是DTCM内存。
安富莱的建议:
在这里插入图片描述

二、Keil


2.1、Target

让Keil只管理DTCM内存,不要管理其他内存。
在这里插入图片描述

2.2、Linker

从ST官方手册RM0433可以查到,STM32H743的Flash首地址是0x08000000,DTCM(紧密耦合内存)的首地址是0x20000000。
在这里插入图片描述
.sct文件,最开始跟Target配置的ROM与RAM一一对应的。接下来,我们需要增加.sct的内存。
在这里插入图片描述
在.sct文件添加其他内存的描述。
在这里插入图片描述

  RW_IRAM2 0x24000000 0x00080000  {  ; RW data - 512KB AXI SRAM
   *(.RAM_D1) 
  }
  
  RW_IRAM3 0x30000000 0x00048000  {  ; RW data - 128KB SRAM1(0x30000000) + 128KB SRAM2(0x3002 0000) + 32KB SRAM3(0x30040000)
   *(.RAM_D2)
  }
  
  RW_IRAM4 0x38000000 0x00010000  {  ; RW data - 64KB SRAM4(0x38000000)
   *(.RAM_D3)
  }

接着,这一步非常重要,必须点击rebuild整个工程,不然会报错。如果编译的时候出现警告的话,不用管。出现警告的原因是你还没有在那些刚定义的内存里定义变量而已。

在这里插入图片描述

三、代码


分别在段RAM_D1,RAM_D2,RAM_D3定义一些数组与变量。
建议使用ALIGN_32BYTES的方式声明变量,这个标识符使得变量以32bit对齐,方便Cache的API操作。
在这里插入图片描述

四、DEBUG


进入DEBUG模式后,将数组放到Watch窗口上。

看到数组AXISRAMBuf所在的内存地址是0x24000000,等于刚才.sec文件所定义的.RAM_D1段。
在这里插入图片描述

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wallace Zhang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值