首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在链接器映射文件中获取变量地址

在链接器映射文件中获取变量地址
EN

Stack Overflow用户
提问于 2019-01-29 20:30:21
回答 1查看 559关注 0票数 0

在微控制器的程序中,某些区域必须位于特定的内存区中。它们在C源文件中声明为

代码语言:javascript
复制
static int Foo __attribute__((section(".ocm")));

在链接器脚本中,这一节被放在适当的地址:

代码语言:javascript
复制
MEMORY {
  ram_0 : ORIGIN = 0, LENGTH = 0x100000
  ram_1 : ORIGIN = 0xFFFF0000, LENGTH = 0xFE00
}

SECTION {
.text : {
  //     here are the normal sections
  } > ram_0

.ocm (NOLOAD) : {
    __ocm_start = .;
    *(.ocm)
    __osm_end = .;
  } > ram_1
}

使用该配置,所有符号都包含在映射文件中。但是缺少变量Foo。可以应用NOLOAD属性,因为在该部分中没有初始化的变量。这是必要的,因为ELF输出是后处理的,必须从该过程中排除该部分。

如何说服链接器将符号包含在映射文件的特殊部分中?

EN

回答 1

Stack Overflow用户

发布于 2019-01-29 21:05:05

不幸的是,GNU链接器只列出了公共符号。如果变量被声明为static,因为它对于文件范围是私有的,那么它将不会在映射文件中列出。有必要更改代码以获取其在映射文件中的地址:

代码语言:javascript
复制
int Foo __attribute__((section(".ocm")));
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54421104

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档