在微控制器的程序中,某些区域必须位于特定的内存区中。它们在C源文件中声明为
static int Foo __attribute__((section(".ocm")));在链接器脚本中,这一节被放在适当的地址:
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输出是后处理的,必须从该过程中排除该部分。
如何说服链接器将符号包含在映射文件的特殊部分中?
发布于 2019-01-29 21:05:05
不幸的是,GNU链接器只列出了公共符号。如果变量被声明为static,因为它对于文件范围是私有的,那么它将不会在映射文件中列出。有必要更改代码以获取其在映射文件中的地址:
int Foo __attribute__((section(".ocm")));https://stackoverflow.com/questions/54421104
复制相似问题