Arm GCC 链接器:如何将数据放在 (rw) 非易失性存储器中的绝对地址处

2023-12-31

我面临以下问题。我正在对 ARM cortex M4 微控制器进行编程,我希望它具有 IP 地址、网络掩码、网关等的默认值。该默认值应该可以通过串行通信进行更改,并且更改应该是持久的。 例如:IP 地址和网络掩码的默认值为: 192.168.1.20 255.255.255.0 用户将地址和网络掩码更改为 192.168.2.10 255.255.255.0 现在,断开设备电源并重新连接电源后,“默认”值应为用户输入的值 (192.168.2.10/255.255.255.0)

为了解决这个问题,我考虑使用我的 uC 的所谓工作闪存。这是一个非易失性存储器,可以使用特殊命令写入。 我想要实现的是在程序代码中定义默认值(作为当前的变量,或者如果可能的话稍后定义),这些默认值由链接器拾取,并且其值被放入非易失性存储器(工作闪存) )位于地址 0x200C000。

现在我的链接器文件如下所示:

MEMORY
{
    rom  (rx)  : ORIGIN = 0x00000000, LENGTH = 0x100000 /* 1MB */
    ram  (rwx) : ORIGIN = 0x1FFF0000, LENGTH = 0x10000 /* 64K  */
    ram1 (rwx) : ORIGIN = 0x20038000, LENGTH = 0x10000  /* 64K  */
    wofl (rwx) : ORIGIN = 0x200C0000, LENGTH = 0x8000   /* 32K  */
}

...

.wifi_defaults :
{
    KEEP(*(.wifi_defaults*));
} > wofl

...

以及源代码中的变量声明(仅用于测试):

uint16_t __attribute__((section(".wifi_defaults"))) test= 0x00D0;

.map 文件向我显示:

.wifi_defaults  0x200c0000        0x2
 *(.wifi_defaults*)
 .wifi_defaults
                0x200c0000        0x2 ..\obj\HSFirmware.o
                0x200c0000                test

但是,当访问变量时,我没有得到正确的值,只是在开始弄乱链接器内容之前就返回了初始的 0xFFFF。

我还尝试在变量声明前面使用 CONST,这没有什么区别。

据我了解,我的代码在指定的代码段中放置了一个未初始化的变量。如何将初始化的变量放在给定的地址处?


您错过了强制编译器保留此变量的“used”属性。

顺便说一句,在一些帖子中,我看到如果没有使用该部分的代码,避免链接丢弃该部分是不够的(在您的情况下,某些代码使用test多变的)。

就我个人而言,我已经使用 GCC for ARM 版本 10.3.1 对其进行了测试,并且没有必要。

因此,在您的示例中,它将定义如下:

uint16_t __attribute__((section(".wifi_defaults")), used) test= 0x00D0;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Arm GCC 链接器:如何将数据放在 (rw) 非易失性存储器中的绝对地址处 的相关文章

  • STL 迭代器:前缀增量更快? [复制]

    这个问题在这里已经有答案了 可能的重复 C 中的预增量比后增量快 正确吗 如果是 为什么呢 https stackoverflow com questions 2020184 preincrement faster than postinc
  • 在 xaml 中编写嵌套类型时出现设计时错误

    我创建了一个用户控件 它接受枚举类型并将该枚举的值分配给该用户控件中的 ComboBox 控件 很简单 我在数据模板中使用此用户控件 当出现嵌套类型时 问题就来了 我使用这个符号来指定 EnumType x Type myNamespace
  • 机器Epsilon精度差异

    我正在尝试计算 C 中双精度数和浮点数的机器 epsilon 值 作为学校作业的一部分 我在 Windows 7 64 位中使用 Cygwin 代码如下 include
  • 为什么 GCC 不允许我创建“内联静态 std::stringstream”?

    我将直接前往 MCVE include
  • 需要帮助优化算法 - 两百万以下所有素数的总和

    我正在尝试做一个欧拉计划 http projecteuler net问题 我正在寻找 2 000 000 以下所有素数的总和 这就是我所拥有的 int main int argc char argv unsigned long int su
  • WPF 数据绑定到复合类模式?

    我是第一次尝试 WPF 并且正在努力解决如何将控件绑定到使用其他对象的组合构建的类 例如 如果我有一个由两个单独的类组成的类 Comp 为了清楚起见 请注意省略的各种元素 class One int first int second cla
  • 重载 (c)begin/(c)end

    我试图超载 c begin c end类的函数 以便能够调用 C 11 基于范围的 for 循环 它在大多数情况下都有效 但我无法理解和解决其中一个问题 for auto const point fProjectData gt getPoi
  • WcfSvcHost 的跨域异常

    对于另一个跨域问题 我深表歉意 我一整天都在与这个问题作斗争 现在已经到了沸腾的地步 我有一个 Silverlight 应用程序项目 SLApp1 一个用于托管 Silverlight SLApp1 Web 的 Web 项目和 WCF 项目
  • 为什么 C# 2.0 之后没有 ISO 或 ECMA 标准化?

    我已经开始学习 C 并正在寻找标准规范 但发现大于 2 0 的 C 版本并未由 ISO 或 ECMA 标准化 或者是我从 Wikipedia 收集到的 这有什么原因吗 因为编写 审查 验证 发布 处理反馈 修订 重新发布等复杂的规范文档需要
  • 为什么使用小于 32 位的整数?

    我总是喜欢使用最小尺寸的变量 这样效果就很好 但是如果我使用短字节整数而不是整数 并且内存是 32 位字可寻址 这真的会给我带来好处吗 编译器是否会做一些事情来增强内存使用 对于局部变量 它可能没有多大意义 但是在具有数千甚至数百万项的结构
  • 为什么 isnormal() 说一个值是正常的,而实际上不是?

    include
  • 如何在 Linq to SQL 中使用distinct 和 group by

    我正在尝试将以下 sql 转换为 Linq 2 SQL select groupId count distinct userId from processroundissueinstance group by groupId 这是我的代码
  • 编译时展开 for 循环内的模板参数?

    维基百科 here http en wikipedia org wiki Template metaprogramming Compile time code optimization 给出了 for 循环的编译时展开 我想知道我们是否可以
  • 相当于Linux中的导入库

    在 Windows C 中 当您想要链接 DLL 时 您必须提供导入库 但是在 GNU 构建系统中 当您想要链接 so 文件 相当于 dll 时 您就不需要链接 为什么是这样 是否有等效的 Windows 导入库 注意 我不会谈论在 Win
  • 使用特定参数从 SQL 数据库填充组合框

    我在使用参数从 sql server 获取特定值时遇到问题 任何人都可以解释一下为什么它在 winfom 上工作但在 wpf 上不起作用以及我如何修复它 我的代码 private void UpdateItems COMBOBOX1 Ite
  • 为什么C++代码执行速度比java慢?

    我最近用 Java 编写了一个计算密集型算法 然后将其翻译为 C 令我惊讶的是 C 的执行速度要慢得多 我现在已经编写了一个更短的 Java 测试程序和一个相应的 C 程序 见下文 我的原始代码具有大量数组访问功能 测试代码也是如此 C 的
  • C# 中最小化字符串长度

    我想减少字符串的长度 喜欢 这串 string foo Lorem ipsum dolor sit amet consectetur adipiscing elit Aenean in vehicula nulla Phasellus li
  • C# 使用“?” if else 语句设置值这叫什么

    嘿 我刚刚看到以下声明 return name null name NA 我只是想知道这在 NET 中叫什么 是吗 代表即然后执行此操作 这是一个俗称的 条件运算符 三元运算符 http en wikipedia org wiki Tern
  • 类型或命名空间“MyNamespace”不存在等

    我有通常的类型或命名空间名称不存在错误 除了我引用了程序集 using 语句没有显示为不正确 并且我引用的类是公共的 事实上 我在不同的解决方案中引用并使用相同的程序集来执行相同的操作 并且效果很好 顺便说一句 这是VS2010 有人有什么
  • 使用 WGL 创建现代 OpenGL 上下文?

    我正在尝试使用 Windows 函数创建 OpenGL 上下文 现代版本 基本上代码就是 创建窗口类 注册班级 创建一个窗口 choose PIXELFORMATDESCRIPTOR并设置它 创建旧版 OpenGL 上下文 使上下文成为当前

随机推荐

  • React-MobX 错误:“decorators”插件需要“decoratorsBeforeExport”选项,其值必须是布尔值

    我收到以下错误 如果您从 Babylon Babel 6 迁移或想要使用旧的装饰器提案 则应该使用 decorators legacy 插件而不是 decorators 包 json babel plugin proposal decora
  • 具有初始容量的 Powershell 哈希表

    我想知道你如何在 powershell 中声明具有初始容量的哈希表 我知道我想要它有多大 但我必须在循环中为其分配值 所以像这样 hashtable 100 杰伦 莫斯特 https stackoverflow com users 4137
  • Win32 与 .Net [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 NET 比 Win32 更好还是相反 两者的优缺点是什么 在什么情况下一个会比另一个更好 Microsoft 是否已发布 Net 作为 Win3
  • 离开同步块时自动notify()/notifyAll() [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Microsoft Visual Studio“安装程序被阻止”

    当我尝试安装 Microsoft Visual Studio 2015 时 出现错误 安装程序被阻止 告诉我 需要重新启动计算机才能继续安装 请重新启动计算机并再次运行安装程序 这样做了之后还是不行 我使用的是 Windows 10 Bui
  • 方法参数的编译时验证

    我在这里发现了一些类似的问题 但不完整的答案没有帮助 而且比澄清任何事情都产生了更多的混乱 所以我尝试给出一个更结构化的问题 并希望得到能够帮助更多用户的答案 我的简化示例 我有一个带有两个不同构造函数的 Java 类 public cla
  • 从目录中读取所有文本文件

    我是 python 新手 我使用以下代码来提取输出作为情感分析 import json from watson developer cloud import ToneAnalyzerV3Beta import urllib request
  • Android Studio - 错误:程序类型已存在

    当我尝试编译代码时 Android Studio 3 0 1 上出现以下错误 Error Program type already present com squareup picasso Action RequestWeakReferen
  • BasicDatasource 和 PoolingDatasource 之间的区别

    org apache commons dbcp BasicDatasource 和 PoolingDataSoure 之间有什么区别 两者都支持连接池吗 何时使用它们中的每一个 基本数据源是 作为javadoc http commons a
  • Mustache 在服务器 (rails) 和客户端 (javascript) 上渲染

    是否有关于在服务器 使用 Rails 和客户端 使用 javascript 上使用 Mustache 最佳实践的文档 hello world mustache Hello planet some other file
  • C# - 按块上传文件 - 最后一个块大小错误

    我正在尝试将大文件分块上传到第三部分服务 但我对最后一块有问题 最后一个块总是小于 5mb 但所有块都包括 最后一个大小相同 5mb 我的代码 int chunkSize 1024 1024 5 using Stream streamx n
  • PowerShell:如何获得正确的 if else 构造?

    我正在尝试学习 powershell 并尝试构建一个 if else 语句 if Get Process Select Object name eq svchost Write Host seen else Write Host not s
  • Facebook 机器人分析事件记录

    我目前正在开发一个消息机器人 并尝试使用 Facebook 的应用程序分析平台记录其他事件 相关文件 消息机器人的事件 https developers facebook com docs app events bots for messe
  • 如何使用 PHPUnit 测试远程 Postgres 服务器上的数据库交互?

    我正在尝试对我创建的类进行单元测试 但大多数类都处理数据库 我已经在本地测试了非数据库相关的类 但当涉及到使用数据库时 尤其是远程数据库 我感到很困惑 该指南显示使用 PDO 访问本地数据库 该数据库似乎转储到 XML 文件 因此它对我来说
  • 找到颜色范围内最接近的颜色匹配[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有十个十六进制 RGB 颜色值 它们是肤色 我希望能够找到与特定十六进制 RGB 值最接近的匹配 我会以某种方式从起始颜色迭代直到落
  • android Recyclerview Layoutmanager的onLayoutChildren在item内容更改时调用

    我有一个带有自定义布局管理器的回收器视图 它是一个twowayview staggeredgridview布局管理器https github com lucasr twoway view blob master layouts src ma
  • 禁止 XmlSerializer 发出空值类型

    请考虑以下 Amount 值类型属性 该属性被标记为可为 null 的 XmlElement XmlElement IsNullable true public double Amount get set 当可为 null 的值类型设置为
  • 实例变量定义和实例块

    我有以下代码 s Hello String s 这编译得很好 这意味着变量定义在实例块之前执行 但是 如果我使用以下代码 它不会编译 错误 非法前向引用 s Hello String ss s String s 因此 不可能在变量之前的实例
  • setwd() 在当前工作目录中

    我有一个文件夹列表 每个文件夹中都有一个与 R 相同的脚本 必须在文件夹中的文件上运行 我编写了一次脚本并将脚本复制到每个文件夹中 问题是我有大约 100 个文件夹的列表 因此我不可能手动在当前工作目录中 setwd 我想知道是否可以设置当
  • Arm GCC 链接器:如何将数据放在 (rw) 非易失性存储器中的绝对地址处

    我面临以下问题 我正在对 ARM cortex M4 微控制器进行编程 我希望它具有 IP 地址 网络掩码 网关等的默认值 该默认值应该可以通过串行通信进行更改 并且更改应该是持久的 例如 IP 地址和网络掩码的默认值为 192 168 1