我有一个嵌入式应用程序也有一个bootloader,我的目标是能够在应用程序中获取引导程序的版本和其他信息,所有信息都是不变的,因此我想把它们放在开头的引导加载程序代码部分,因此应用程序可以轻松读取总是位于同一地址的数据。
到目前为止,我已经定义了类似
的内容const char bootloader_info[4] = {0x01,0x02,0x03,0x04};
并在链接描述文件中定义
__bootloader_info = 0xD000 /*Where exactly should this line be placed?*/
但是变量的末尾位于数据部分......
我现在所做的是在链接描述文件中定义一个新的部分并将它放在init代码之前,虽然它有效但我觉得它不是正确的方法
const char __attribute__((section (".versioninfo"))) bootloader_info[4] = {0x01,0x02,0x03,0x04};
versioninfo (rx) : ORIGIN = 0xD000, LENGTH = 0x0000
rom (rx) : ORIGIN = 0xD000, LENGTH = 0x27B0
-------
.text :
{
. = ALIGN(2);
KEEP(*(.versioninfo)) /*info gets added at the beginning of .text*/
KEEP(*(.init .init.*))
KEEP...
使用gcc工具链实现这一目标的正确方法是什么?为什么第一种方法不起作用?
修改
我没有定义一个部分,我实际上不知道那是什么。要定义一个部分,它是这样的:
.versioninfo :
{
KEEP(*(.versioninfo))
} > versioninfo
现在它抱怨数据是否大于该部分,所以我想它比以前更好,我仍然想听到另一个方法或为什么第一种方法不起作用,谢谢