良许Linux教程网 干货合集 如何将变量存储在指定内存地址(基于Keil MDK-ARM)

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

对于为何将特定的变量、数组(例如数据表或函数)分配到确定的内存地址,存在多种原因。

校验和可能必须出现在特定的地址,或者需要将函数定位到特别划定的内存区块中。此外,取决于你所使用的编译器,你可能会有机会自定义分配特殊的内存区域。

该问题源于我之前分享的文章《STM32开发辅助工具:STM Studio的调试与诊断指南》。有读者在文章发布后提出了以下问题:

如何在我希望的特定内存地址中定位到一个变量,而这一操作又该如何通过C语言代码实现?

一、再次探索STM Studio

在之前发布的STM Studio的介绍文章后,许多读者表现出了浓厚的兴趣,并迅速下载安装了这一工具进行尝试。

在这里,我将简要回顾一下STM Studio相关的核心概念:变量

STM Studio支持四种类型的变量管理:

由独立物理地址确定的相对变量。

统计变量,能够派生出绝对变量的极值、均值、标准差等统计指标。

表达式变量,它们是通过数学表达式计算得到的,表达式中可能包含绝对变量或统计变量再结合数学运算符(如+、-、*、/等),举例来说:(Variable1+Variable2)*Variable3。需要注意的是,由于表达式变量是在统计变量计算之后评估的,统计值的计算是不能适用于表达式变量的。

插件变量,它包含了可由用户自定义的各种配置信息。

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

image-20231226204036604
image-20231226204036604

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

J-Scope

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

image-20231226204039866
image-20231226204039866
image-20231226204050890
image-20231226204050890

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")));

这个地方进行分段:

image-20231226204103662
image-20231226204103662

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

image-20231226204106993
image-20231226204106993

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

以上就是良许教程网为各位朋友分享的Linu系统相关内容。想要了解更多Linux相关知识记得关注公众号“良许Linux”,或扫描下方二维码进行关注,更多干货等着你 !

137e00002230ad9f26e78-265x300
本文由 良许Linux教程网 发布,可自由转载、引用,但需署名作者且注明文章出处。如转载至微信公众号,请在文末添加作者公众号二维码。
良许

作者: 良许

良许,世界500强企业Linux开发工程师,公众号【良许Linux】的作者,全网拥有超30W粉丝。个人标签:创业者,CSDN学院讲师,副业达人,流量玩家,摄影爱好者。
上一篇
下一篇

发表评论

联系我们

联系我们

公众号:良许Linux

在线咨询: QQ交谈

邮箱: yychuyu@163.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部