回复【9楼】高天小圣:
---------------------------------
给你一个数据处理的参考,这里以发送一个数字类的字符串为例子:
如从电脑串口发送100.101,首先你需要在串口中断程序中正确接收这7字节的数据(原子的中断函数可以完成该任务),收到数据后记得在数据后面加结束符。
如果一次只发送一个这样的数据,那么可以在任务函数里面直接使用atof(USART_RX_BUF),处理完后,将USART_RX_BUF清空,准备下一次接收。
如果你想一次接收多个 这样的字符型数字数据,然后在任务函数里面统一处理,那么可以这样设置数据结构:
最好的方法是自己定义一个传输协议,比如,一次传输先发送2个字节的后续数据的大小的值(方便后面申请缓存,最好不要超过USART_RX_BUF大小,否则要使用另外一种处理方式),如32字节,紧接着发送数据,一共4个数据,约定数据格式是每个数据后面跟一个0
如这样排列:
“100.001”0“1234.501”0“5634.20”0“10.124”0
然后在你的数据解析函数里面利用内存管理申请32字节的空间 pdata指向该缓存空间,在串口中断里面接收一个字节的数据就往pdata里丢一个字节的数据
待这批数据接收完毕后,在数据解析函数里面对这个长数组里的多个数据依次将其提取出来并转换成浮点数,转换的时候先检测下这一个长数组里一共有多少个数据,对0计数,如得到共有4个数据,那么接下来就可以用内存管理申请4个浮点型长度的缓存float *flatadata,并清零缓存。
void dataprocess()
{
char i =0,DataNum = 0;
........
DataNum = 检测pdata里有几个数据;
do
{
*flatadata =(float)atof(pdata); //atof遇到0就结束了
flatadata++;
for(;;)
{
if(*pdata!=0)
pdata++;
else
{
pdata++;
break;
}
}
}while(i++<DataNum-1)
释放pdata的缓存;
对得到的floatdata里的浮点数据处理完毕后记得释放floatdata的缓存;
}
,
|