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

2024-05-04 09:58:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图将python float通过UART发送到嵌入式c处理器,即NXP的MKE14。在python中,我使用Struct库生成一个32位的float并通过UART发送它。我检查了两个浮子推进和那里都是“IEEE-754”。你知道吗

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

我接收“经度”十进制:1085256688十六进制:0x40,0xAF,0xB3,0xF0

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

这一定是一些转换问题,我收到正确的数据包,但表示是完全不同的。你知道吗

两个系统上使用的代码都在附件中。你知道吗

Python code image

Embedded C code


Tags: 代码附件系统code处理器float数据包struct
2条回答

不能通过强制转换将整数位模式转换为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);

相关问题 更多 >