指定地址声明结构体的方法,报错Unable to automatically place 解决方法

由于目前的项目,需要在指定的地址声明一个结构体,该结构体为const类型。这样以来在切换到其他的程序运行时,可以从这个地址取出该结构体已经声明好的内容,可以节省程序运行资源,并简化程序之间的数据交换。


首先在头文件中定义该结构体

typedef struct temp

{

....

}__attribute__ ((packed))Ttmp;


attribute packed附加属性可以让结构体数据以最小的对齐方式对齐,便于整理


声明结构体的方法


static const Ttmp tmpstr __attribute__ ((at(0xxxxxxxxx)) )= 

{

....

};

这样一来就在at后面的地址声明了一个有初始化内容的结构体


关于attribute的使用方法有很多文章说明


但是有的时候在这样声明完之后会报错

Unable to automatically place AT section .ARM. __AT_0xxxxxxxxx from xx.o with required base address 0xxxxxxxxx.Please manually place in the scatter file using the --no_autoat option.


在我这个工程当中,关于存储空间的分配如下图所示


在声明的时候,如果我把at后面的地址设定为0x2000A000及之后的话,则会报告上述错误。可以看出来在read write区域是不允许有变量初始化的

因此把该结构体声明在0x00-0x4000直接的区域就可以正常运行了

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值