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

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

3天内不再提示

我们为什么要将变量、数组存储到特定的地址?

strongerHuang 来源:strongerHuang 作者:strongerHuang 2020-11-01 11:15 次阅读

变量是程序中重要的一部分,产品中很多业务代码都是变量起到了关键作用。

传感器采集的数据、通信中传输的数据、算法中的数据等这些数据都需要借助变量这个东西来实现。

我们为什么要将变量、数组(例如表或函数)存储到特定的地址?

因为有些特殊的数据可能需要指定地址,比如加密的密钥、校验和等这些数据可能需要存储在指定内存。

1

变量查看工具

在描述将变量储存在指定内存地址之前,我们先来描述一下查看变量的工具(通过工具可以查看变量的值)

1.STMStudio

之前给大家分享过《STM Studio调试和诊断工具讲解》。

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

STMStudio可管理四种变量:

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

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

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

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

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

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

2.J-Scope

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

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

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

2

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

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

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

这个地方进行分段:

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

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

责任编辑:lq

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

    关注

    1

    文章

    1634

    浏览量

    49122
  • 变量
    +关注

    关注

    0

    文章

    613

    浏览量

    28365
  • 数组
    +关注

    关注

    1

    文章

    417

    浏览量

    25943

原文标题:Keil MDK如何将变量存储在指定内存地址

文章出处:【微信号:strongerHuang,微信公众号:strongerHuang】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    数组的下标为什么可以是负数

    a[3],数组名 a 作为数组首元素地址,下标 3 表示从这个地址开始向后移动 3 个元素,至于具体是几个字节,得看什么元素。 所以 a[3] 完全等价于 *(a + 3),甚至把代
    的头像 发表于 12-20 11:18 82次阅读

    labview字符串数组转化为数值数组

    常重要的。LabVIEW支持多种数据类型,包括数值、字符串、数组、簇等。在本例中,我们将关注字符串数组和数值数组。 字符串数组 :由一系列字
    的头像 发表于 09-04 17:47 2299次阅读

    将格式化数据存储char数组的最简单方法是什么?

    os_printf将文本格式化为 UART 输出的函数。 将格式化数据存储 char 数组的最简单方法是什么?
    发表于 07-11 08:01

    西门子博途:通过片断访问对变量区域进行寻址的步骤

    可以选择包含所声明变量特定地址区域。可以访问宽为 1 位、8 位、16 位或 32 位的区域。
    的头像 发表于 04-28 09:24 2102次阅读

    STM32F103RC变量初始化问题求解

    定义长度为7的短整型数组:u16 ArryTest[7]; 再定义一个短整形变量 u16 Test0 = 0; 编译后,如果Test0的地址被编译
    发表于 04-10 07:35

    鸿蒙TypeScript入门学习第11天【Array(数组)】

    数组对象是使用单独的变量名来存储一系列的值。 数组非常常用。
    的头像 发表于 04-09 14:38 1153次阅读
    鸿蒙TypeScript入门学习第11天【Array(<b class='flag-5'>数组</b>)】

    STM32函数地址赋值给变量后结果会自动加1是怎么回事?

    最近在做LiteOS系统的移植,需要将任务地址(函数地址)赋值给任务堆栈,但是在过程中发现,被赋值的变量会比实际的函数地址多1。比如有函数
    发表于 04-03 06:04

    鸿蒙TypeScript入门学习第4天:【TS变量声明】

    变量是一种使用方便的占位符,用于引用计算机内存地址我们可以把变量看做存储数据的容器。
    的头像 发表于 03-29 14:49 1411次阅读

    C语言变量应用详解

    变量其实只不过是程序可操作的存储区的名称。C 中每个变量都有特定的类型,类型决定了变量存储的大小
    发表于 03-18 11:18 401次阅读
    C语言<b class='flag-5'>变量</b>应用详解

    数组控制每个通道的数据存储

    这个程序有个问题一直不明白,就是最下面的那个循环中,外面那个电流数组可以控制下那真假中数据 的存储
    发表于 03-13 18:36

    数组和链表在内存中的区别 数组和链表的优缺点

    数组和链表在内存中的区别 数组和链表的优缺点  数组和链表是常见的数据结构,用于组织和存储数据。它们在内存中的存储方式以及优缺点方面存在一些
    的头像 发表于 02-21 11:30 1032次阅读

    TC277如何指定该全局数组变量存储地址的对齐方式?

    定义全局数组变量,如何指定该全局数组变量存储地址的对齐方式
    发表于 02-19 07:37

    单片机变量存储大小由什么决定?

    最近看到群友在讨论【单片机变量存储大小由什么决定?】的话题。
    的头像 发表于 01-26 10:11 676次阅读
    单片机<b class='flag-5'>变量</b><b class='flag-5'>存储</b>大小由什么决定?

    PHP中数组的使用方法!

    PHP中数组的使用方法! PHP是一种广泛使用的网络编程语言,它的数组功能非常强大且灵活。数组是一种数据结构,它允许我们在单个变量
    的头像 发表于 01-12 15:11 546次阅读

    stm32变量能存进flash中吗

    当涉及变量存储在Flash中时,我们通常指的是将变量存储在STM32微控制器的闪存器件中。在
    的头像 发表于 12-28 15:33 2112次阅读