对于以下结构对象
struct test
{
int a; //expect address location 0xabcd
int b; //expect address location 0xmnop
} test1;
期望为test1实例的变量a和变量b分配不同的存储位置。
我了解到,通过使用 #pragma地址
问题1:这是否也可以扩展到结构。
如果不是,
问题2:什么是更好的方法?
约束为:
修改1: 为了进一步说明,上面的结构包含指示某个缓冲区中位置的变量。 (最接近的类比是队列中的读/写索引) 但是,在这里,每个变量必须存储在单独的位置,以防止某些模块意外访问。
答案 0 :(得分:4)
根据定义 1),struct
的成员在内存中彼此分配。此外,在不同的内存区域中分配不同的struct成员根本没有任何意义。甚至在最奇特的嵌入式系统上也没有。
问题1:不,您不能也不应这样做。既不使用标准C语言,也不使用#pragmas之类的编译器扩展。
问题2:使用指针。
typedef struct
{
volatile uint32_t* a;
volatile uint32_t* b;
} test_t;
test_t test =
{
.a = (volatile uint32_t*)0x1234;
.b = (volatile uint32_t*)0x5678;
};
1)来自C17 6.7.2.1§6
...结构是由一系列成员组成的类型,其成员 存储是按有序顺序分配的,...