做82335和上位机串口通讯,发送单精度浮点数,ccs中定义位float类型,想着DSP内部每4个连续字节存储一个浮点数,于是就按一下程序发送:
int i;
char *temp;
float testData=123.456;
float *curd=&testData;
temp=(char *)curd;
for(i=0;i<4;i++)
{ scic_xmit((int)(*temp));
temp++;
}
上面收到的数据不对。经过测试发现是直接读取连续4个字节这种方式出错。问:82335是按照4个连续字节存一个浮点数吗?刚才翻了翻以前的帖子介绍说内部的浮点有效数据只有24位。到底是怎么回事呢?
谢谢您的帮助
mangui zhang:
C2000的数据类型是比较复杂的 还有转换数据类型时是不是出问题了
请看 下图说明
做82335和上位机串口通讯,发送单精度浮点数,ccs中定义位float类型,想着DSP内部每4个连续字节存储一个浮点数,于是就按一下程序发送:
int i;
char *temp;
float testData=123.456;
float *curd=&testData;
temp=(char *)curd;
for(i=0;i<4;i++)
{ scic_xmit((int)(*temp));
temp++;
}
上面收到的数据不对。经过测试发现是直接读取连续4个字节这种方式出错。问:82335是按照4个连续字节存一个浮点数吗?刚才翻了翻以前的帖子介绍说内部的浮点有效数据只有24位。到底是怎么回事呢?
谢谢您的帮助
Yi Yang8:
回复 mangui zhang:
谢谢您和回复。先前的确没想到int 和 char 类型数据长度不一样。而且float 每个存储单元为16bits.修改了一下程序:
int i; Uint16 *temp; float testData=123.456; float *curd=&testData; temp=(Uint16 *)curd; for(i=0;i<2;i++) { scic_xmit((*temp)>>8); scic_xmit(*temp); temp++; }
接收端的数据仍然是错误的,我就很郁闷了。
思路很简单:temp取得testData的地址,然后发送4次。请您帮我看看,问题出在哪里?谢谢啊
做82335和上位机串口通讯,发送单精度浮点数,ccs中定义位float类型,想着DSP内部每4个连续字节存储一个浮点数,于是就按一下程序发送:
int i;
char *temp;
float testData=123.456;
float *curd=&testData;
temp=(char *)curd;
for(i=0;i<4;i++)
{ scic_xmit((int)(*temp));
temp++;
}
上面收到的数据不对。经过测试发现是直接读取连续4个字节这种方式出错。问:82335是按照4个连续字节存一个浮点数吗?刚才翻了翻以前的帖子介绍说内部的浮点有效数据只有24位。到底是怎么回事呢?
谢谢您的帮助
rookiecalf:
回复 Yi Yang8:
比对一下,发送端与接收端的四个字节数据,看看是不是字节在接收端的组合顺序有问题