我可以使用 Keil/armclang/armlink 在内存区域中放置一个变量吗?

Posted

技术标签:

【中文标题】我可以使用 Keil/armclang/armlink 在内存区域中放置一个变量吗?【英文标题】:Can I place a variable inside a memory region using Keil/armclang/armlink? 【发布时间】:2021-11-19 20:44:16 【问题描述】:

我有一个由 Keil 生成的链接器分散文件,看起来像这样:

LR_IROM1 0x08020000 0x001E0000  
  ER_IROM1 0x08020000 0x001E0000  
   *.o (RESET, +First)
   *(InRoot$$Sections)
   .ANY (+RO)
   .ANY (+XO)
  
  RW_IRAM1 0x20020000 0x00060000  
   .ANY (+RW +ZI)
  
  RW_IRAM2 0x20000000 0x00020000  
   .ANY (+RW +ZI)
  

理想情况下,出于各种原因,我想继续使用 IDE 配置的分散文件。但是,我看不出有任何方法可以让 Keil 添加额外的链接器部分。

天真地,我以为我可以使用类似的方式在 RW_IRAM2 区域中放置一个变量:

uint32_t in_ram2 __attribute__((section("RW_IRAM2")));

我也尝试过诸如“.RW_IRAM2”和“.RW_IRAM2.bss”之类的东西,但是变量总是在 IRAM1 区域中结束。查看文档后,我看不到任何不放弃的方法Keil 配置/创建的分散文件。我在这里遗漏了什么吗?

【问题讨论】:

【参考方案1】:

你可以像这样把它放在显式地址:

uint32_t in_ram2 __attribute__((section(".ARM.__at_0x20000000")));

【讨论】:

谢谢,但我已经意识到这一点。不幸的是,使用它有一些影响。如果链接器试图将其他变量放在同一位置(不幸的是,它目前还不够聪明,不这样做),它将给出错误,因此最好将其放置在配置区域之外。此外,如果您想放置多个变量,则需要小心选择地址以避免冲突 - 通常最好留给链接器。

以上是关于我可以使用 Keil/armclang/armlink 在内存区域中放置一个变量吗?的主要内容,如果未能解决你的问题,请参考以下文章

我可以在 ScriptEditor、SharePoint 中使用 Json 吗?

我可以使用啥图表来显示 Html 事件和操作

HTML5 本地存储 - 我可以为每个键存储多个值,如果不能,我可以使用啥替代方案?

我可以从 WPF 窗口获取 HDC 以便我可以使用 Gdi+ API 绘制它吗?

我可以使用 Rails 制作 phongap 应用吗

我可以使用啥库在 C# 中处理 VoIP 流?