锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

小谈标志位 如何释放CPU

时间:2024-04-30 21:37:09


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




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









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



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


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




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


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







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


-电子元器件采购网(www.ruidan.com)是本土元器件目录分销商,采用“小批量、现货、样品”销售模式,致力于满足客户多型号、高质量、快速交付的采购需求。 自建高效智能仓储,拥有自营库存超过50,000种,提供一站式正品现货采购、个性化解决方案、选型替代等多元化服务。
锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章