在flash

时间:2015-09-08 07:16:24

标签: c gcc embedded ld

我有一个嵌入式应用程序也有一个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

现在它抱怨数据是否大于该部分,所以我想它比以前更好,我仍然想听到另一个方法或为什么第一种方法不起作用,谢谢

0 个答案:

没有答案