Достаточно ли объявить экземпляр переменной со структурным типом как volatile (если к ее полям обращаются в коде с повторным входом), или нужно объявить определенные поля структуры как volatile?
По-разному, каковы семантические различия (если таковые имеются) между:
typdef struct {
uint8_t bar;
} foo_t;
volatile foo_t foo_inst;
и
typedef struct{
volatile uint8_t bar;
} foo_t;
foo_t foo_inst;
Я признаю, что объявление переменной с указателем как volatile (например, volatile uint8_t * foo) просто сообщает компилятору, что адрес, на который указывает foo, может измениться, не делая никаких заявлений о значениях, на которые указывает foo. Мне неясно, справедлива ли аналогия для структурно-типизированных переменных.