浮动到嵌入式 c 浮动在 UART 上

float to embedded c float over UART

我正在尝试通过 UART 将 python 浮点数发送到嵌入式 c 处理器,即来自 NXP 的 MKE14。在 python 中,我正在使用 Struct 库制作一个 32 位浮点数并通过 UART 发送它。我检查了两个 float implementations 和 "IEEE-754".

我发送十进制:5.490715 十六进制:0x40、0xAF、0xB3、0xF0

我收到 "Longitude" 十进制:1085256688 十六进制:0x40、0xAF、0xB3、0xF0

浮动转换后十进制:1085256704 十六进制:0x40、0xAF、0xB4、0x00

一定是转换问题,我收到了正确的数据包,但表示完全不同。

两个系统上使用的代码在附件中。

Python code image

Embedded C code

您不能通过强制转换将整数位模式转换为 float。这只是将整数转换为最接近的浮点数,它 而不是 将这些位重新解释为 float。如果它像你想的那样工作,这:

const float x = 512;

会把x设置成7.175E-43,不太方便。

最好的方法可能是只复制位,所以替换

SUS_Data.Longitude = ((float)Longitude);

作者:

memcpy(&SUS_Data.Longitude, &Longitude, sizeof SUS_Data.Longitude);

获取指针并将其类型转换为浮点指针:

uint32 tmp = 1085256688;
float f;

f = *((float *) &tmp); // 5.490715

或使用联合:

union test {
  uint32_t u;
  float f;
};
union test tmp;
tmp.u = 1085256688; // tmp.f == 5.490715

你的情况:

SUS_Data.Longitude = *((float *) &Longitude);