打印

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

[复制链接]
5590|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
rookie8711|  楼主 | 2011-4-19 22:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我在网上看到说 可以转换成字符型 进行传输
也有例子,如下:
unsigned char buf[4];   //将float强制转换成char  四个字进行串口传输
float f=39.4;
buf[0]=((unsigned char *)&f)[0];
buf[1]=((unsigned char *)&f)[1];
buf[2]=((unsigned char *)&f)[2];
buf[3]=((unsigned char *)&f)[3];
串口传输:
。。。。。。
for(cont=3;cont>=0;cont--)
{
ScicRegs.SCITXBUF=buf[cont];
}


浮点数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);

使用特权

评论回复
5
langcer| | 2011-4-26 00:10 | 只看该作者
呵呵,正好也在搞IEEE754浮点数在串口上的接收解读以及发送,在计算机和DSP中均已经实现,也参考了网上不少程序。你这个问题好像是因为计算机上unsigned char 是8位的,而DSP(我用的是2812)中unsigned char是 16位的. 浮点(4字节)只能转换为两个char数组,假设tempchar[2],然后
buf[0]=tempchar[0]&0x00ff;
buf[1]=tempchar[0]&0xff00>>8;
buf[2]=tempchar[1]&0x00ff;
buf[3]=tempchar[1]&0xff00>>8;

新人,欢迎高手拍砖。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

35

帖子

1

粉丝