我有一个全局易失性无符号char数组volatile unsigned char buffer[10],在Interupt中将数据写入该数组。我有一个函数,该函数采用无符号char *并将该值存储到硬件(EEPROM)中void storeArray(unsigned char *array),在本例中为前三个值。像这样将易失性数组转换为非易失性数组是否安全?
store_array((unsigned char *) buffer);
Run Code Online (Sandbox Code Playgroud)
我阅读了以下内容,虽然我不太了解,但与我有关:
6.7.3:5如果尝试通过使用具有非挥发性限定类型的左值引用具有挥发性限定类型定义的对象,则该行为是不确定的。
这会影响我的代码吗?
然后我有一个后续问题:缓冲区数组只有一部分要存储的数据(不能更改),对于本示例,该数据以第三个值开头。做以下事情合法吗?
store_array((unsigned char *) buffer + 3);
Run Code Online (Sandbox Code Playgroud)
如果是的话,如果将演员表3添加到数组中,将如何影响演员表?BR,谢谢!
编辑:@Cacahuete Frito链接了一个非常类似的问题:`memcpy((void *)dest,src,n)`与`volatile`数组安全吗?