c - STM32将带符号的short写入EEPROM

标签 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 。所以我的问题是,如何书写和阅读签名短文?

最佳答案

不幸的是,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/

相关文章:

c++ - 引用如何出现在可从 C 代码调用的函数的签名中?

c - 嵌入式系统上的外部文件资源(C语言加FAT)

stm32 - 如何在STM32F4中使用备份SRAM作为EEPROM

c - 使用 DMA 读取 SPI (SSP) 总线上的 EEPROM

applet - `Signature.init()` 是否重写持久内存?

c编程理解strace -o t.txt ./a.out

C、从一次 scanf 中读取多个数字

c - 在 C 中使用 YACC 对 LISP 子集进行操作

eclipse - GDB 和 OpenOCD - 调试结束后重置或恢复

c - STM32 - DWT 周期计数与我的预测不同