我是GNU编译器的新手.
我有一个C源代码文件,其中包含一些结构和变量,我需要在特定位置放置某些变量.
所以,我编写了一个链接器脚本文件,并__ attribute__("SECTION") 在C源代码中使用了 at变量声明.
我正在使用GNU编译器(cygwin)来编译源代码并使用-objcopy选项创建.hex文件,但我没有得到如何在编译时链接我的链接器脚本文件以相应地重定位变量.
我附加了链接描述文件和C源文件以供参考.
请帮助我将链接器脚本文件链接到我的源代码,同时使用GNU创建.hex文件.
/*linker script file*/
/*defining memory regions*/
MEMORY
{
base_table_ram : org = 0x00700000, len = 0x00000100 /*base table area for BASE table*/
mem2 : org =0x00800200, len = 0x00000300 /* other structure variables*/
}
/*Sections directive definitions*/
SECTIONS
{
BASE_TABLE : { } > base_table_ram
GROUP :
{
.text : { } { *(SEG_HEADER) }
.data : { } { *(SEG_HEADER) }
.bss : { } { *(SEG_HEADER) }
} > mem2
}
Run Code Online (Sandbox Code Playgroud)
C源代码:
const UINT8 un8_Offset_1 __attribute__((section("BASE_TABLE"))) = 0x1A;
const UINT8 un8_Offset_2 __attribute__((section("BASE_TABLE"))) = 0x2A;
const UINT8 un8_Offset_3 __attribute__((section("BASE_TABLE"))) = 0x3A;
const UINT8 un8_Offset_4 __attribute__((section("BASE_TABLE"))) = 0x4A;
const UINT8 un8_Offset_5 __attribute__((section("BASE_TABLE"))) = 0x5A;
const UINT8 un8_Offset_6 __attribute__((section("SEG_HEADER"))) = 0x6A;
Run Code Online (Sandbox Code Playgroud)
我的目的是将"BASE_TABLE"部分的变量放在链接器脚本文件定义的地址和上面链接器脚本文件中定义的"SEG_HEADER"的剩余变量中.
但是在编译之后,当我查看.hex文件时,不同的节变量位于不同的十六进制记录中,位于0x00的地址,而不是链接描述文件中给出的那个.
请帮我链接链接器脚本文件到源代码.
是否有任何命令行选项来链接链接器脚本文件,如果有任何请求提供有关如何使用选项的信息.
提前致谢,
SureshDN.