专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

小谈标志位 如何释放CPU

作者:huqin   来源:本站原创   点击数:  更新时间:2014年04月01日   【字体:


许久没有发了,分享下最近的感悟。如有错误的地方往指正,互相学习,哈哈。废话不多说,入正题,今天就Modbus说一下。
        对于modbus相信大家并不陌生,我不知道大家怎么写的,我也希望大家有好 写法提供参考,那是不胜感激的。在此感谢这段时间大家的帮助,如孙工,韩工,等等。本次讲解就是在孙工的基础上建立的,硬件是用的STM8S系列,
这里直说串口接收中断与定时器中断,




以前是这么写的,用到了一个定时器,一个UART串口,咱先不说stm8   如果用在STC芯片上,那可是很昂贵的,本身就三个定时器,一个UART用,还需要一个定时器辅助,就剩下可怜的一个定时器了。这只是个通讯啊大哥,其他的工作科怎么做。反复的看,反复的改,是不是可以这样啊,work();这个函数拿出来,再写一个函数,在这个函数里面包含着它,建立属于它的标志位,于是出来下边这个版本,









我们分析下这样的好处,首先用了标志位后可以与其他函数共享定时器,节约了资源,接下里是省去了 开关定时器的繁琐步骤。效率自然就上去了。接着往下看,在485通讯时是否遇到过返回数组不全的问题,(接收的前段数据时正确的),我遇到过,在STM8 上边,为什么呢,愿意在于DE端的控制上,还未发送完成就关闭的发送使能,程序如下未改正前。



发现问题后你可能会这么改。如下


哈哈,成功返回所有数据,高枕无忧了。是吗?我咋么觉得这个延时这么碍眼啊,配合简单的任务可能不会出问题,如果1S通讯10次的话你还能笑出来吗?
那会你应该考虑怎么改良一下那,继续往下看 ,再用标志位,




仔细看的会发现  DE端的控制跟work()写在一块了,给发送完成提供了充足的时间,又把CPU腾出来干别的事情,一举两得吧,哈哈,这样通讯50/s次表示无压力,再往下说,是不是遇到过调试通讯无返回的情况,是不是还不知道问题出来那一块,好吧,我们不如加点指示的东西,学习下人家TCPIP,加一个通讯指示灯,怎么加呢,是不是会这样。


这里就不写用延时手段或者是再各定时器的写法了,以上这个写法通讯时会起到指示作用,也很节约CPU,但是他接收错误数据时也会指示,作用不是很好,再看一下放在哪里好呢,恩  下边这里,







 好了   就到这里,有什么不对 地方麻烦指正,这里先谢谢。 纯属个人见解献丑了

关闭窗口

相关文章