У меня есть глобальный volatile массив без знака volatile unsigned char buffer[10]
, в который данные записываются в прерывании. У меня есть функция, которая принимает неподписанный символ * и сохраняет это значение в аппаратном обеспечении (EEPROM) void storeArray(unsigned char *array)
, в этом примере первые три значения. Безопасно ли преобразовывать энергозависимый массив в энергонезависимый массив следующим образом?
store_array((unsigned char *) buffer);
Я прочитал следующее, что мне не совсем понятно, но которое касается меня:
6.7.3: 5 Если предпринята попытка обратиться к объекту, определенному с типом, определенным с помощью volatile, с использованием lvalue с типом, не определенным с помощью volatile, поведение не определено.
Влияет ли это на мой код?
Затем у меня возникает следующий вопрос: в массиве буферов есть только часть данных, которую я хочу сохранить (не могу это изменить), для этого примера, начиная с третьего значения. Законно ли делать следующее?
store_array((unsigned char *) buffer + 3);
Если да, как повлияет приведение, если 3
добавлен в массив? BR и спасибо!
ОБНОВЛЕНИЕ: @Cacahuete Frito связал очень похожий вопрос: Безопасен ли 'memcpy ((void *) dest, src, n)' с массивом 'volatile'?