Lou*_*ete 1 c embedded floating-point stm32 cortex-m
以前的类似问题没有回答我的问题:
我需要将 a 保存double到 STM32L476 微控制器上的闪存中。闪存控制器在 64 位块中工作,来自 ST 的 HAL API 使用uint64_t参数来写入数据。为此,我需要将 double 变量中的位转换为一个或多个uint64_ts。
我尝试了以下,这是 UB:
uint64_t flash_write_val = *(uint64_t*)&double_value;
Run Code Online (Sandbox Code Playgroud)
但是,我收到有关违反严格别名规则的编译器警告。如果不调用 UB,我将如何做到这一点?它不需要超级便携。它只能在 Cortex M4F 内核上有效。
我在想这个:
union uint64_double {
uint64_t flash_friendly;
double math_friendly;
};
Run Code Online (Sandbox Code Playgroud)
这是一个好方法,还是我还在用脚射击?
只是memcpy用来复制你想要的字节。
memcpy(&flash_write_val, &double_val, sizeof(double_val));
Run Code Online (Sandbox Code Playgroud)