首页 > 解决方案 > 我可以使用 Keil/armclang/armlink 在内存区域中放置一个变量吗?

问题描述

我有一个由 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 配置/创建。我在这里遗漏了什么吗?

标签: keillinker-scriptsarmclang

解决方案


您可以将它放在显式地址,如下所示:

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

推荐阅读