地瓜patch 发表于 2025-7-4 22:42

将指针转换为双精度时,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

aozima 发表于 2025-7-4 23:37

看看是否报非对齐错误

- uint8_t 数据添加属性,确保其地址按8字节(double)对齐。
- 可以使用联合体,这样自动升级到最大对齐要求。
- 定义新double变量,然后按字节复制过去。
页: [1]
查看完整版本: 将指针转换为双精度时,MCU卡住