本文介绍gcc编译环境下为变量指定绝对地址。
MCU项目开发过程中,有时需要为变量指定绝对地址(ROM或RAM中),如软件版本号。gcc提供了相应的关键字,配合loader文件即可实现在指定地址存放变量。
1.变量定义
gcc提供了__attribute__((section("section_name")),来指定数据存放在哪个section。如我们定义软件版本号:
static const char SoftwareVersion[] __attribute__((section(".software_version"))) = {"V1.0.0.1"};
这里,我们将存放软件版本号的数组存放在"software_version"段。
2.loader文件修改
在上面我们已经指定变量存放在某个段,这里是"software_version"段。我们需要在loader文件中定义这个段。
方法1:
1)在"MEMORY"中,增加“SOFTWARE_VERSION”项:
/* Memories definition */
MEMORY
{
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 64K
FLASH (rx) : ORIGIN = 0x8000000, LENGTH = 512K
SOFTWARE_VERSION (rx) : ORIGIN = 0x8007ff0, LENGTH = 16
}
这里指定