Разъяснение используемой терминологии:
Для статического массива я имею в виду массив статически выделяемой памяти, например: int x [10].
Проблема
Мне нужно объявить статический массив с изменчивыми элементами.
Если я хорошо понимаю, как работает volatile квалификатор, он должен быть:
volatile uint8_t *x; // x is a pointer to volatile uint8_t
uint8_t *volatile x; // x is a volatile pointer to uint8_t
volatile uint8_t *volatile x; // x is a volatile pointer to volatile uint8_t
Хорошо, но теперь мне нужно сделать то же самое с статическим массивом .
Я пробовал с:
volatile uint8_t x[10]; // Only the pointer is decleared as volatile
uint8_t volatile x[10]; // Same as above
volatile uint8_t *x3[10]; // Casting problems and errors when I do ...
*x3[0] = 1; // ... something like this. Moreover, I do not know if this...
// ... statement declares the uint8_t element as volatile
Спасибо!
UPDATE
Хорошо, как отмечено в комментариях, которые я должен использовать:
volatile uint8_t x[10]
Как я мог понять, проблема не в объявлении, а в использовании этой переменной в моем коде. Я передаю этот элемент функции, прототип которой:
static void functionName(uint8_t *buffer, uint32_t size);
Я вызываю функцию следующим образом:
functionName(x, 10);
Компилятор сообщает: передача аргумента 1 аргумента 'functionName' отбрасывает квалификатор 'volatile' из целевого типа указателя
Я не могу изменить прототип функции, как я могу решить проблему?