rookie8711 发表于 2011-4-19 22:02

关于串口传输float型数据的问题 求高手帮忙

我在网上看到说 可以转换成字符型 进行传输
也有例子,如下:
unsigned char buf;   //将float强制转换成char四个字进行串口传输
float f=39.4;
buf=((unsigned char *)&f);
buf=((unsigned char *)&f);
buf=((unsigned char *)&f);
buf=((unsigned char *)&f);
串口传输:
。。。。。。
for(cont=3;cont>=0;cont--)
{
ScicRegs.SCITXBUF=buf;
}


浮点数34.9,IEEE754标准十六进制显示是0x42 0x0B 0x99 0x9A,但是 我在串口助手上看到的却是:0x9A 0x0B 0x9A 0x0B

这到底是为什么呢 ? 帮帮忙

aresc 发表于 2011-4-20 19:10

本帖最后由 aresc 于 2011-4-20 19:21 编辑

估计是不支持字节偏移的访问,TI的DSP对内存对齐方式很严格,很多型号的DSP只支持字对齐方式寻址.

也就是说默认把你的地址线最低1位(16bit对齐)或最低2位(32位对齐)清零进行内存寻址.

rookie8711 发表于 2011-4-20 21:07

2# aresc


那你有做过DSPfloat的串口传输么是怎么弄的呢

aresc 发表于 2011-4-20 23:15

我没搞过,但对你这个问题可以用如下的方式解决:
float f = 39.4f;
int *pF = (int *)&f;
int value;

value = *pF; 如果int是32位的话,那么value = 0x420b999a或者0x9a990b42,然后每个字节你都可以移出来了.如果int是16位的,那么可能要取两次才能取完32位的浮点数,比如value1 = *pf, value2 = *(pf+1);

langcer 发表于 2011-4-26 00:10

呵呵,正好也在搞IEEE754浮点数在串口上的接收解读以及发送,在计算机和DSP中均已经实现,也参考了网上不少程序。你这个问题好像是因为计算机上unsigned char 是8位的,而DSP(我用的是2812)中unsigned char是 16位的. 浮点(4字节)只能转换为两个char数组,假设tempchar,然后
buf=tempchar&0x00ff;
buf=tempchar&0xff00>>8;
buf=tempchar&0x00ff;
buf=tempchar&0xff00>>8;

新人,欢迎高手拍砖。
页: [1]
查看完整版本: 关于串口传输float型数据的问题 求高手帮忙