如何创建一个数组的volatile
结构?每个结构体包含3个函数指针。
。这是
State_t * volatile states[10];
或
volatile State_t * states[10];
? ?
同样,结构体属性也应该定义为volatile
吗?
这是为了确保编译器不会清除函数指针。代码工作良好时,与GCC
编译。然而,数组中的第二个条目返回的是用Cortex-M3的ARM编译器编译的垃圾。
State_t *volatile states[10];
上面的意思是states
是一个指向State_t
类型对象的10
volatile指针的数组。这里的volatile
关键字限定了指针,而不是指向的值。
State_t volatile *states[10];
上面的意思是states
是一个指向volatile State_t
类型对象的10
指针数组。这里,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
实例。