将指针传递给具有 volatile 成员的结构作为函数参数
Passing a pointer to a struct with a volatile member as a function argument
如果我有一个结构,其中一些成员是易变的,但不是全部,我将一个指针作为函数参数传递给这个结构,编译器会阻止对函数内的那些成员进行优化,还是我必须声明指针也是易变的?
typedef struct {
volatile uint16_t reg1;
volatile uint16_t reg2;
const uint32_t speed;
uint8_t error;
}uart;
void uartInitialize(uart *const hdlPtr);
//void uartInitialize(volatile uart *const hdlPtr); is this required?
简答:无需在 hdlPtr 上添加 volatile。
长答案:除非可以以某种意想不到的方式更改 hdlPtr,否则无需将其声明为易变的。鉴于它是函数的局部变量,它不能被 uartInitialize 以外的任何东西改变。鉴于您声明了它 'const',它不能被 uartInitialize 本身更改。
如果我有一个结构,其中一些成员是易变的,但不是全部,我将一个指针作为函数参数传递给这个结构,编译器会阻止对函数内的那些成员进行优化,还是我必须声明指针也是易变的?
typedef struct {
volatile uint16_t reg1;
volatile uint16_t reg2;
const uint32_t speed;
uint8_t error;
}uart;
void uartInitialize(uart *const hdlPtr);
//void uartInitialize(volatile uart *const hdlPtr); is this required?
简答:无需在 hdlPtr 上添加 volatile。
长答案:除非可以以某种意想不到的方式更改 hdlPtr,否则无需将其声明为易变的。鉴于它是函数的局部变量,它不能被 uartInitialize 以外的任何东西改变。鉴于您声明了它 'const',它不能被 uartInitialize 本身更改。