搜索
bottom↓
回复: 18

关于C2000发送float型数据的求教~~急!急!急!

[复制链接]

出0入0汤圆

发表于 2013-3-28 23:03:59 | 显示全部楼层 |阅读模式
关于C2000发送float型数据的求教~~急!急!急!

各位坛友,最近我在看怎么用C2000发送float型数据,想实现的功能是这样的:

上位机(串口助手)以unsigned char 的形式发四个数据,C2000接收到,
并存入数组中,然后转换回float,再发送到上位机。

关于如何转换,搜索了不少资料,发现最好的方法应该是直接用IEEE745的标准:

将float转换成char:
void FloatToByte(float floatNum,unsigned char* byteArry)
{
     char* pchar=(char*)&floatNum;
     for(int i=0;i<sizeof(float);i++)
     {
      *byteArry=*pchar;
      pchar++;
      byteArry++;
     }
}

将unsigned char转换成float:
float ByteToFloat(unsigned char* byteArry)
{
   return *((float*)byteArry);
}

这两个函数都是网上的高人写的,应该没有问题。但是我在用launch pad调试的时候,遇到了很奇怪的问题:

如果我先给出一个数,例如12.12,先用floattobyte 函数转换成 uchar,
再用bytetofloat 将保存有uchar 的数组转换回 float,最后发送这个float,结果是对的;

但是,如果我先设置一个数组,uchar【4】,将从上位机接收到的数据存入这个数组,
再用bytetofloat函数转成float,则不论我怎么发,发什么数据,始终显示的是+0.000.

非常郁闷啊!这是为什么呢?可能的原因是  C2000的uchar格式是16位吗?还是这个函数我用错了?急求指点!
谢谢大家!!!!另外在坛子里貌似还没看见有人问这类问题,希望大家能多多指点~~
真是调的郁闷啊!!!!!!!求救啊!!!!!!!!!!!!!!!!!!!!1

出0入0汤圆

 楼主| 发表于 2013-3-28 23:04:39 | 显示全部楼层
忘了悬赏了,不过大家解答的好我一定会给莫元的,谢谢大家!

出0入0汤圆

发表于 2013-3-28 23:21:04 | 显示全部楼层
接收上位机数据时正常的吗?还是发送给上位机的数据有问题?这个能判定吗

出0入0汤圆

 楼主| 发表于 2013-3-28 23:37:53 | 显示全部楼层
lyl2022 发表于 2013-3-28 23:21
接收上位机数据时正常的吗?还是发送给上位机的数据有问题?这个能判定吗 ...

正常的,我试过先接收,再发送出来上位机的数据,证实是对的。
发送如果按uchar来发,也是对的,问题就是,在C2000里合成一个float发,
就会一直是0.0000,晕啊

出0入0汤圆

发表于 2013-3-28 23:42:10 | 显示全部楼层
应该是合成FLOAT的时候出的问题吧,合成的时候用的上面的程序?

出0入0汤圆

 楼主| 发表于 2013-3-28 23:46:49 | 显示全部楼层
lyl2022 发表于 2013-3-28 23:42
应该是合成FLOAT的时候出的问题吧,合成的时候用的上面的程序?

对,而且最奇怪的是如果我在程序内部先调用floattobyte,将一个float转换成四个uchar,再调用这个bytetofloat转成
float 的话,是对的
但是先接收再存进去再转换,就错了。纠结啊。
谢谢你啦!

出0入0汤圆

发表于 2013-3-28 23:47:23 | 显示全部楼层
合成的float能用仿真器看吗?LZ 买的哪家板子啊

出0入0汤圆

 楼主| 发表于 2013-3-28 23:52:16 | 显示全部楼层
TI 官方的launchpad  C2000。。。。。这个还真没仔细看,回头我看看~~~谢谢啦!很晚了,晚安,明天再看了

出0入0汤圆

发表于 2013-3-31 16:55:59 | 显示全部楼层
用联合转换发送. 注意大小端和收发次序.
char不可能是16位的. C语言标准规定.

出0入0汤圆

 楼主| 发表于 2013-3-31 20:06:52 | 显示全部楼层
monkerman 发表于 2013-3-31 16:55
用联合转换发送. 注意大小端和收发次序.
char不可能是16位的. C语言标准规定.
...

问题是,DSP的char规定好像确实是16位啊。。。。联合发送是什么啊?可以帮忙贴一下程序吗?谢谢你啦!!

出20入25汤圆

发表于 2013-3-31 20:44:04 | 显示全部楼层
用联合就可以了,不用转换

出0入0汤圆

 楼主| 发表于 2013-3-31 21:32:52 | 显示全部楼层
chenchaoting 发表于 2013-3-31 20:44
用联合就可以了,不用转换

大哥。。。你说的是设置一个union共同体么。。。。求贴程序啊。。。。

出20入25汤圆

发表于 2013-3-31 22:48:02 | 显示全部楼层
程序现在没有,你看,FLOAT型是占用4个字节,CHAR是一个字节,你发送四个字节,在处理器中将这四个当一个FLOAT读就行了,什么都不用管,注意地址的大小端,你最好看看数据是怎么存的,对,就是UNION

出0入0汤圆

 楼主| 发表于 2013-3-31 23:15:52 | 显示全部楼层
chenchaoting 发表于 2013-3-31 22:48
程序现在没有,你看,FLOAT型是占用4个字节,CHAR是一个字节,你发送四个字节,在处理器中将这四个当一个FL ...

恩,好的。我试试,谢谢啦!

出0入0汤圆

发表于 2013-4-1 08:37:54 | 显示全部楼层
yue621 发表于 2013-3-31 20:06
问题是,DSP的char规定好像确实是16位啊。。。。联合发送是什么啊?可以帮忙贴一下程序吗?谢谢你啦!!{ ...

哎哟我去哟...........看了下手册. 尼玛真是 16bits. 抱歉是我错了. 他说支持 ISO和ANSI-C标准.......好吧. 标准也没说 char 就是 8 位只说是一个字节. 差点误导你了.
联合的话, 你直接搜一下吧. 很简单. 网上有, 坛子里也有.

出0入0汤圆

 楼主| 发表于 2013-4-1 10:13:11 | 显示全部楼层
monkerman 发表于 2013-4-1 08:37
哎哟我去哟...........看了下手册. 尼玛真是 16bits. 抱歉是我错了. 他说支持 ISO和ANSI-C标准.......好 ...

恩,好的,谢谢啦!!!!!!

出0入0汤圆

发表于 2013-8-15 00:23:10 | 显示全部楼层
这个问题lz解决了没?

出0入0汤圆

发表于 2013-8-15 10:10:20 | 显示全部楼层
楼主,使用库函数完成吧:sprintf(buffer, "%2.2f", (float)A);
这个函数把浮点数A转换成格式化的浮点数(你可以定义格式),存放在buffer数组中,以'\n'字符结尾。

出0入0汤圆

发表于 2013-8-24 13:22:56 | 显示全部楼层
类似的问题我也遇到过,就是char是16位的原因
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-3 09:11

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表