如何创建volatile结构函数指针的固定数组

时间:2014-03-16 11:05:00

标签: c struct arm volatile cortex-m3

如何创建volatile结构数组?每个结构包含3个函数指针。

即。是吗

State_t * volatile states[10];

volatile State_t * states[10];

...

此外,结构属性是否也应定义为volatile

这是为了确保编译器不会清除函数指针。使用GCC编译时,代码工作正常。但是,数组中的第二个条目返回使用ARM编译器为Cortex-M3编译的垃圾。

1 个答案:

答案 0 :(得分:1)

State_t *volatile states[10];

上述方法states10指向State_t类型对象的{1}}易失性指针的数组。这里的volatile关键字限定了指针,而不是指向的值。

State_t volatile *states[10];

上述方法states是指向10类型对象的volatile State_t指针数组。这里,volatile关键字不是指针,而是指向的值。以上也可以写成

volatile State_t *states[10];

要回答问题的后半部分,如果您将结构变量限定为volatile,则其所有成员都为volatile。但是,volatile限定不是结构定义的一部分。

volatile struct states {
    // stuff

} state_a;

struct states state_b;

此处state_a符合volatile条件,但state_b不合格。因此,除非在与结构定义相同的语句中创建states实例,否则需要将每个volatile实例显式限定为states