首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

关于利用MFC串口编程的几点迷惑求解

2012-12-15 
关于利用MFC串口编程的几点疑惑求解1、串口编程,异步和同步的选择各自有什么优点?2、异步读串口的时候(此时

关于利用MFC串口编程的几点疑惑求解
1、串口编程,异步和同步的选择各自有什么优点?
2、异步读串口的时候(此时没有利用多线程编程),为什么单步调试的时候可以实现,加入死循环就卡住了,换了同步的也是同样情况。
3、利用多线程编程时,也是这种情况,执行一次可以实现成功读取,假如死循环就不行了,又死了
4、利用多线程实现异步编程时在子线程中调用readfile函数,每次读取的时候是一个一个读取,还是一串一串读取好,一串一串读取,每次读取数据的长度都不一样(这里我在调试的时候,调试软件是周期发送数据,是否有影响)
5、今天在打开串口、设置串口后,还发生了串口号突然就变成0X000000的情况,是否和线程时间片到了有关呢?
由于单位保密查的比较紧,把程序拷出来不方便,先这样吧,刚学vc++不久,求教!
[最优解释]
1.
异步读是能省点时间,缺点是同步有点难;同步读是浪费点时间(对于大多数应用不影响),优点是同步简单,
2.
2和3的情况要加入超时设置,当在一定时间没有收到数据或没有收完数据后就超进退出,等待下一次的读数据.
4.因为现在是WINDOW系统,硬件接收到的数据都放在缓冲区里(可以看作类似同步硬件读限数据,同步通知你已有数据了),所以你收数据时要先读限缓冲区里的数据字节数,然后按缓冲区里的数据字节数来一次读完.
5.
串口的设置一次就可以了,不需要多次设置,在设置后再运行线程,不然先运行线程再设置串口可能会出问题
[其他解释]
异步就是灵活,可以方便控制,同步简单些
循环需要有检测的机会,不能一直死循环
[其他解释]
打开串口在主线程中即可。
建议开线程读串口,即可以一个一个读,也可以一串一串读,只需要配置好超时就行。
串口传输不保证协议帧(自己定的那串数据)的完整性,需要通过你们自己协商的数据格式来判断(一般是帧头,帧尾,校验位等)

[其他解释]
3.你代码有很大问题
4.所以需要自定义通信协议来确保安全性和准确性
5.串口打开冲突,是不是打开了已经使用的串口?
[其他解释]
非常感谢各位的回复,今天我再试了下,其实是在用memset清空每次接受的字符数组的时候,和数组初始化时的大小不一致,造成的,感觉编程出现这种低级错误还是很沮丧的!
我第一次在这儿发帖,还有这么多人给我回复,很感激你们,串口传输部分我已经编好了,后面我会继续努力的!谢谢大家
[其他解释]
有空我再把这次编程的心得体会写出来,大家一起交流

热点排行