如何将变量存储在指定内存地址(基于Keil MDK-ARM)

关注、星标公众,不错过精彩内容

640?wx_fmt=png

将变量、数组(例如表或函数)存储到特定地址的原因有很多。


校验和可能需要位于某个地址,可能需要将函数放在特定的内存位置,根据使用的编译器,可以选择设置特定的内存区域。


这个问题是在前面分享文章《STM32开发工具之STM Studio调试和诊断工具讲解》之后,有读者提出来的问题。


我需要在固定的内存地址找到一个变量,如何使用C源代码执行此操作?


一、回顾STMStudio

前不久分享STMStudio文章之后,很多朋友对这个工具比较感兴趣,也第一时间下来安装使用了该工具。


这里简单说一下STMStudio与本文相关的内容:变量

STMStudio可管理四种变量:

由物理存储地址标识的绝对变量。

能够计算绝对变量的最小值、最大值、平均值和标准差等值的统计变量。

表达式变量是数学表达式计算的结果。表达式是绝对变量或统计变量与数学运算符(+,-,*,/…)的组合,例如:(Variable1+Variable2)*Variable3。注意,表达式变量是在统计变量之后求值的,因此不可能计算表达式的统计值。

包含用户可配置信息的插件变量。


(为了节约时间,使用有道翻译的句子,大家请结合原文理解)

640?wx_fmt=png

可以看得出来,局部变量是不支持的。


J-Scope

这个STMStudio工具和J-Scope有类似之处,也能查看变量、波形:

640?wx_fmt=png

640?wx_fmt=png

J-Scope也是一个不错的工具,大家可以下载安装试试:

https://www.segger.com/products/debug-probes/j-link/tools/j-scope



二、回归主题

如何将变量存储在指定内存地址?


不同的编译器,会有不同的方法,这里主要结合MDK说下基于AC5和AC6编译,简述其中的方法。


结合STM32F103ZE,有64K(0x10000)内存。


1.针对AC5(ARMCC Compiler version 5.x

定义一个变量cnt到指定内存地址:0x20008000

uint8_t cnt __attribute__((at(0x20008000)));

2.针对AC6(ARM Compiler 6 (又名ARMCLANG))

定义一个变量cnt到指定内存地址:0x20008000

uint8_t cnt __attribute__((section(".ARM.__at_0x20008000")));

这个地方进行分段:

640?wx_fmt=png


这样指定内存地址,即可使用STMStudio进行查看指定地址变量了:

640?wx_fmt=png

好了,先写到这里,希望对大家有帮助。

推荐阅读:

1.STM32CubeIDE V1.0.1都修复了些什么BUG?

2.ARM针对Cortex-M处理器推出一套安全系统:Arm FuSa RTS

我的知乎:strongerHuang

我的网站:www.strongerhuang.com

关注公众号『strongerHuang』,在底部菜单中查看更多精彩内容!

640?wx_fmt=jpeg

长按识别图中二维码关注

新建软件工程的详细过程如下: 1. 打开Keil MDK-ARM开发环境。双击打开Keil MDK-ARM图标,进入开发环境界面。 2. 创建新的软件工程。在工具栏上选择“Project”菜单,然后点击“New Project”选项,弹出新建工程对话框。 3. 设置项目目录和工程名称。在新建工程对话框中选择一个合适的目录,并输入工程名称,然后点击“OK”按钮。 4. 选择目标设备。在新建工程对话框的“Device”选项卡中,选择目标设备的厂商和芯片型号,并将该设备添加到工程中。然后点击“OK”按钮。 5. 配置工程选项。在新建工程对话框的“Options for Target”选项卡中,可以配置目标设备的各种选项,例如时钟频率、存储器分配等。完成配置后,点击“OK”按钮。 6. 添加源文件。在左侧的Project窗口中,右键点击“Source Group 1”(或其他名称),然后选择“Add Files to Group 'Source Group 1'”选项。在打开的文件选择对话框中,选择要添加的源文件,然后点击“Add”按钮。 7. 编译工程。在工具栏上选择“Project”菜单,然后点击“Build”选项,进行工程的编译。编译过程会将源文件转换为可执行的机器代码。 8. 生成可执行文件。编译成功后,在工程目录下会生成一个可执行文件(通常是一个.hex或.bin文件),用于下载到目标设备上运行。 9. 调试和运行。将目标设备连接到开发环境上,并在工具栏上选择“Debug”菜单,然后点击“Start/Stop Debug Session”选项,开始调试和运行工程。 10. 测试和调优。在调试过程中,可以逐步执行代码,查看变量的值以及程序运行状态,通过测试和调优来确保工程的正确性和性能。 以上就是新建软件工程的详细过程,通过这个过程,我们可以开始进行嵌入式软件的开发工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

strongerHuang

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

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

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

打赏作者

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

抵扣说明:

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

余额充值