C语言 STM32将签名短写到EEPROM中



我使用带有模拟EEPROM的STM32F0 MCU。EEPROM 将数据作为EE_WriteVariable(uint16_t VirtAddress, uint16_t Data)并作为EE_ReadVariable(uint16_t VirtAddress, uint16_t* Data)返回,但我的数据int16_t。所以我的问题是,我如何写和读签名短?

不幸的是,当涉及到硬件相关的编程(如EEPROM仿真(时,C语言是愚蠢的。因此,您可以使用的唯一可靠解决方案是:

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; // BAD.

有关原因的更多信息,可在此处找到:什么是严格的别名规则?

根据应用说明 数据以 16 位字的形式存储在内存中,因此uint16_t.这是您在模拟EEPROM中的存储必须具有的基础数据类型。无论您存储什么,它都必须具有此类型。

int16_t保证具有与uint16_t相同的大小。使用类型 uint16_t 的中间变量。

相关内容

  • 没有找到相关文章

最新更新