vic*_*tcu 65 c struct volatile
将结构类型变量的实例声明为volatile是否足够(如果其字段是以可重入代码访问的),还是必须将结构的特定字段声明为volatile?
换句话说,两者之间的语义差异(如果有的话)是什么:
typdef struct {
uint8_t bar;
} foo_t;
volatile foo_t foo_inst;
Run Code Online (Sandbox Code Playgroud)
和
typedef struct{
volatile uint8_t bar;
} foo_t;
foo_t foo_inst;
Run Code Online (Sandbox Code Playgroud)
我认识到将指针类型的变量声明为volatile(例如,volatile uint8_t*foo)只是告诉编译器foo指向的地址可能会改变,而不会声明foo指向的值.我不清楚类比是否适用于结构类型的变量.
R S*_*hko 72
在您的示例中,两者是相同的.但问题围绕着指针.
首先,volatile uint8_t *foo;告诉编译器指向的内存是volatile.如果要将指针本身标记为易失性,则需要执行此操作uint8_t * volatile foo;
这就是你将结构标记为易失性与标记单个字段之间的主要区别.如果你有:
typedef struct
{
uint8_t *field;
} foo;
volatile foo f;
Run Code Online (Sandbox Code Playgroud)
这将表现为:
typedef struct
{
uint8_t * volatile field;
} foo;
Run Code Online (Sandbox Code Playgroud)
而不是像:
typedef struct
{
volatile uint8_t *field;
} foo;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
29101 次 |
| 最近记录: |