由于目前的项目,需要在指定的地址声明一个结构体,该结构体为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直接的区域就可以正常运行了