单片机程序开发心得(仅是个人理解)

      想必大家在开发程序过程中会遇到一些处理任务实时性的问题,如果事件很少且简单,那整个处理起来那还好;如果事件很多的话,可能以后还要扩展一些新的功能,没有一个好的架构和处理任务思路的话,程序开发起来还是很难受的。如果架构合理,思路清晰,写程序不但心情愉悦还效率高,有成就感,增加自信心,事情会越做越好。

        第一个,说说程序架构

       这里说的是不带操作系统的开发,大家基本上都是在while(1)里轮询处理任务1 、任务2 、. . .,程序根本上是这样处理没错的。这样做的缺点是如果思路不清晰或函数间的调用不合理的话,会在while(1)中有很多的函数,程序看起来就很繁琐,当然这对于优秀的程序员来说这都不是事。

       我要说的另外一种架构是在while(1)中分时去调用需要处理的函数,这里用的是函数指针的方式处理的,每5ms处理一次需要处理的任务,通过函数指针调用需要执行的函数,还能按照顺序去执行,这样处理任务就很便利,代码不臃肿。

       其实这两种在根本上处理都一样,在同一时间内都只能做一件事情。要想实时性高的话,代码中是不能有阻塞的,delay函数几乎是不用的,这样才能让实时性发挥的更好。由于时间紧迫,具体架构实现以后添加上来。架构只是其辅助的作用,关键还是要看处理任务的思路,接下来说说处理任务的思路。

        第二个,说说处理任务思路

      我们在写程序中会遇到指示灯按照固定频率闪烁的功能,在或者灯一直灭或一直亮灯情况。相信大家都是在中断里处理闪烁频率的,这样才能保证闪烁频率的一致性。我做事情的思想是如果这个事情做一遍,其状态如果一直保持不变的话,那这个事情以后就不要在做了。比如就说指示灯一直亮的问题,如果在定时器里判断if(led == 常亮)那程序就会定时一直执行led_on(灯亮函数),虽说这样做程序照样执行,我认为这样没必要。我的做法是led灯常亮和长灭的程序不写在定时器里,定时器里只处理led灯闪烁的情况,这样让程序去做真正需要做的事情岂不是更好些。那关于常亮和长灭的问题怎么处理,其实在逻辑控制中,在需要led灯亮的开始出调用一次让led灯亮的函数就可以了,这样led灯就会一直保持亮的状态。说道这里就引出了一个叫发送命令和执行命令的概念,发送命令只执行一次即可,执行命令需要在程序运行中一直执行,直到任务完成。然后让程序拿出更多的时间去处理更紧急的任务,以保证实时性。

      在处理任务的过程中会有很多的状态,我们用枚举定义不同的状态,根据事件的逻辑关系,切换处理任务的状态,顺序去执行,按照时间轴的逻辑去处理,不要突变态,这样程序的稳定性会更好。

未完,待续. . .

 

展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客
应支付0元
点击重新获取
扫码支付

支付成功即可阅读