gpt4 book ai didi

c - 定义常量变量在闪存中的位置

转载 作者:太空宇宙 更新时间:2023-11-04 03:36:18 24 4
gpt4 key购买 nike

我有一个嵌入式应用程序,它也有一个引导加载程序,我的目标是能够在应用程序中获取引导加载程序的版本和其他信息,所有信息都是不变的,因此我想到将它们放在开头引导加载程序代码部分,因此应用程序可以轻松读取始终位于同一地址的数据。

到目前为止我已经定义了类似的东西

const char bootloader_info[4] = {0x01,0x02,0x03,0x04};

并在链接描述文件中定义

__bootloader_info = 0xD000  /*Where exactly should this line be placed?*/

但是变量结束放在数据部分...

我现在所做的是在链接描述文件中定义一个新部分并将其放在初始化代码之前,尽管它可以工作但我认为这不是正确的方法

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

现在如果数据大于该部分它会提示,所以我想它比以前更好,我仍然想听听另一种方法或者为什么第一种方法不起作用,谢谢

最佳答案

您必须按如下方式定义您的部分:

_versioninfo_start_address = 0x0000D000;

.versioninfo _versioninfo_start_address :
{
KEEP(*(.versioninfo)) ;
} > // place here the region where to this section has to be stored

然后你可以定义你的变量:

const char __attribute__((section (".versioninfo"))) bootloader_info[4] = {0x01,0x02,0x03,0x04}

关于c - 定义常量变量在闪存中的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32451487/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com