您的位置:首页 > 其它

COM 组件设计与应用(四)

2010-12-10 11:54 232 查看
今天对方突然提出要用闪烁led来指示串口数据的接收与发送,看来他们是看我闲着没事给我找点事做了,也好省的我无聊。
在串口初始化的时候就加了两个线程分别处理接收与发送状态的led显示。我的做法很傻,接收与发送各有两个事件:开始与结束。接下来就是处理死循环了,线程嵌套两个死循环,听起来有些恐怖啊。第一个循环中先等待开始事件,等到之后就是等一小段时间的结束事件,等不到就亮一下led再熄灭。直到等到结束事件灭led,break第二个循环,再等下次的开始事件。
方法虽然苯点,但是看起来应该没有什么问题啊。
哪知天不随人愿,当开始发送的时候,可以正常闪烁led,但是当关掉串口发送程序时问题出现了--led还一个劲的闪。检查了下程序,没有问题。无奈只有打印信息了。很奇怪有结束事件产生,但是循环好象死在那里了。原因是很简单,只是我太理想话了:串口的发送与接收数据的速度虽然比起别的设备要慢一些,但是也不至于象我想的那样。在一次led的亮灭还没有处理完时,串口已经开始了下一次发送,也就有了开始事件。所以发送结束后,led一直在闪。
郁闷!虽然不合理但是依然要修改程序,一个开始事件led只闪一次。

PS:今天在做测试的时候,发现当一个劲的用串口发送数据,led灯竟然一直亮,直到发送结束。对其进行了一些改进:因为不管怎么样串口数据的发送与接受都是一次一个byte,所以将开始事件放在每次正确发送或接受一个byte数据之前,而不是整个字符串发送或接受函数开始的时候,这样每等到一个开始事件,led等就闪一次(由于开始事件比较频繁,所以led熄灭后要sleep一下)。这样看来也比较合理一些。本文出自 “bluefish” 博客,请务必保留此出处http://bluefish.blog.51cto.com/214870/58098
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: