float32_t to uint16_t array



我在TI C2000微控制器上有一些问题,它不支持uint8_t。

我需要发送一个浮点值超过CAN和tx缓冲区是长度为8的uint16_t数组,其中每个值应该在uint8_t的范围内。我通常在支持uint8_t的微控制器上做的是直接使用memcpy,但在这里这不起作用。

所以我尝试的是:

canComVars.txMsgData[0] = addr;
uint16_t tmp[2];
memcpy(&tmp[0], &data_f , sizeof(float32_t)/sizeof(uint16_t)); //data_f --> float32_t
canComVars.txMsgData[1] = (tmp[1]>>8) & 0x00FF;
canComVars.txMsgData[2] = (tmp[1]) & 0x00FF;
canComVars.txMsgData[3] = (tmp[0]>>8) & 0x00FF;
canComVars.txMsgData[4] = (tmp[0]) & 0x00FF;

我尝试在uint16_t数组中首先转换浮点数,然后我可以使用位移操作符。但不知何故,这仍然是错误的,给了我错误的值。我也尝试过直接在float值上使用bitshift,但这会导致编译器错误。

有什么想法,怎么做?

memcpy期望字节数复制。您提供了uint16_t元素的数量,这是两个。试试这个:

float32_t data_f=3.14;
unsigned char tmp[4]; 
memcpy(tmp, &data_f, 4);
canComVars.txMsgData[1] = tmp[3];
canComVars.txMsgData[2] = tmp[2];
canComVars.txMsgData[3] = tmp[1];
canComVars.txMsgData[4] = tmp[0];

最新更新