将指针转换为双精度时,MCU卡住
我定义一个数组:uint8_t dat = {0xcd, 0xcc, 0xcc, 0xcc, 0xcc, 0xdc, 0x5e, 0x40};表示内存中的一个 double 类型变量数据,其值为 123.45。以下代码:int main(int argc, char *argv[]){ uint8_t dat[] = {0xcd, 0xcc, 0xcc, 0xcc, 0xcc, 0xdc, 0x5e, 0x40}; double test = *((double*)dat); printf("%.3f\r\n", test); return 0;}输出结果为:123.450但在 STM32F103RCT6 上运行时,以下代码会卡住:double test = *((double*)dat);
而使用 float 类型则不会卡住:float test = *((float*)dat);
如何在 STM32F103 上正确地将内存转换为 double 类型?用的是 STM32CubeIDE
看看是否报非对齐错误
- uint8_t 数据添加属性,确保其地址按8字节(double)对齐。
- 可以使用联合体,这样自动升级到最大对齐要求。
- 定义新double变量,然后按字节复制过去。
页:
[1]