我使用带有模拟 EEPROM 的 STM32F0 MCU。 EEPROM 取数据为EE_WriteVariable(uint16_t VirtAddress, uint16_t Data)
并将它们返回为 EE_ReadVariable(uint16_t VirtAddress, uint16_t* Data)
但我的数据是int16_t
。所以我的问题是,如何书写和阅读签名短文?
最佳答案
不幸的是,C 语言在涉及硬件相关编程(例如 EEPROM 仿真)时表现得很愚蠢。因此,您可以使用的唯一可靠的解决方案是:
uint16_t u16;
EE_ReadVariable(VirtAddress, &u16);
int16_t i16;
i16 = (int16_t)u16;
或者:
memcpy(&i16, &u16, 2);
任何其他事情都是不安全和危险的。特别是,您不能执行以下操作:
EE_ReadVariable(VirtAddress, (uint16_t*)&i16); // BAD
你也不能这样做i16 = *(int16_t*)&u16;//不好
.
有关原因的更多信息,可以在这里找到:What is the strict aliasing rule?
关于c - STM32将带符号的short写入EEPROM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51766846/