关于串口传输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:21 编辑
估计是不支持字节偏移的访问,TI的DSP对内存对齐方式很严格,很多型号的DSP只支持字对齐方式寻址.
也就是说默认把你的地址线最低1位(16bit对齐)或最低2位(32位对齐)清零进行内存寻址. 2# aresc
那你有做过DSPfloat的串口传输么是怎么弄的呢 我没搞过,但对你这个问题可以用如下的方式解决:
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); 呵呵,正好也在搞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]