Передача указателя на структуру с переменным членом в качестве аргумента функции - PullRequest
0 голосов
/ 01 октября 2019

Если у меня есть структура, в которой некоторые члены являются изменчивыми, но не все, и я передаю указатель на эту структуру в качестве аргумента функции, будет ли компилятор предотвращать оптимизацию для этих членов в функциях, или я должен объявить указательтак же изменчивы?

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?

1 Ответ

0 голосов
/ 01 октября 2019

Краткий ответ: нет необходимости добавлять volatile на hdlPtr.

Long Answer: Если hdlPtr не может быть изменен каким-либо неожиданным образом, нет необходимости объявлять его volatile. Учитывая, что он является локальным для функции, он не может быть изменен ничем иным, кроме uartInitialize. Учитывая, что вы объявили его 'const', он не может быть изменен самим uartInitialize.

...