我可以使用 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 吗?
HTML5 本地存储 - 我可以为每个键存储多个值,如果不能,我可以使用啥替代方案?