Как мне объявить статический массив с изменчивыми элементами? - PullRequest
0 голосов
/ 27 июня 2018

Разъяснение используемой терминологии:

Для статического массива я имею в виду массив статически выделяемой памяти, например: 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' из целевого типа указателя

Я не могу изменить прототип функции, как я могу решить проблему?

1 Ответ

0 голосов
/ 27 июня 2018

То, что вам нужно сделать, чтобы объявить статический массив из 10 летучих элементов типа uint8_t, это просто:

volatile uint8_t x[10];

Имейте в виду, что это объявление массива, который не имеет ничего общего с указателями на этом шаге.

Примечание. Позже в вашем коде, если вы используете x, он может затухать до указателя на первый изменчивый элемент, но в этом случае этот указатель будет иметь постоянное значение, заданное на этапе связывания. Указанное значение явно изменчиво.

...