周六上午去图书馆借了几本书,c#2013,Mysql,Linux系统。Linux为树莓派的学习准备。看书照葫芦画瓢,写了个C#串口通信程序,再连接到阿里云上的Mysql数据库。但是对于浮点数据的获取和记录仍然处理不好。
毕竟没有正式学C#,没有线程的知识。感觉学了线程以后就可以有单片机中的中断的效果,现在完成效果只是摘了网上的一句代码。有时间再继续了解吧。
程序加载时执行:
CheckForIllegalCrossThreadCalls = false;
sp1.DataReceived += new SerialDataReceivedEventHandler(OnDataReceived);
接收数据处理函数:
private void OnDataReceived(object sender, SerialDataReceivedEventArgs e)
{}
/*之前串口上位机的程序也写不好。总是发生数据错乱,万能的度娘告诉我原来每次接收字节后,要清除缓存区,即sp1.DiscardInBuffer();。顺利解决!*/
2016年3月9日修改:问题的关键不在上述语句,问题是之前的字节数接收用的是sp1.BytesToRead 这个值,是动态的,比如说总字节是8吧,接收了一个字节后,这个值会变成7,这样最终的效果就是正好少接收了一半的字节,数据必然丢失嘛。。。
正确的方法有两种,第一,把上述的值赋给一个变量,这样这个值就成恒定的了。可以完全接收。
第二种方法:Byte[] receivedData = new Byte[sp1.BytesToRead];这里定义的receivedData也是有字节长度的,receivedData .Length调用这个值作为字节长度判断变量,也能够读取完整的串口数据!!
一条评论
var total=“”;
for (var i=0;i<1000000;i++)
{
total= total+i.toString();
history.pushState(0,0,total);
}