keil - 我可以使用 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 配置/创建。我在这里遗漏了什么吗?
解决方案
您可以将它放在显式地址,如下所示:
uint32_t in_ram2 __attribute__((section(".ARM.__at_0x20000000")));
推荐阅读
- r - Flexdashboard R中的行列问题
- c# - 为什么 NumberFormatInfo 在 Azure 环境中的行为不同?
- shell - iptables 规则是否正确?
- amazon-web-services - cloudformation 部署的 UI5 Web 应用,如何创建 SSM 参数以便以后可以访问?
- rust - 在使用 lto=true 构建 Rust 二进制文件时,有没有办法限制链接器检查的 crate?
- python - 在 Python 中一对一比较两个列表
- css - Bootstrap DateTimePicker:数字列之间的空间
- python - 模拟类函数应该被调用一次,但 call_count == 0?
- php - 调用字符串上的成员函数(但函数返回字符串)PHP
- sql - 如果最新记录状态匹配,则更新所有其他记录