箱体厂家
免费服务热线

Free service

hotline

010-00000000
箱体厂家
热门搜索:
技术资讯
当前位置:首页 > 技术资讯

还在用延时函数吗那你就out了

发布时间:2020-06-30 17:31:09 阅读: 来源:箱体厂家

就像每一个开始学习编程语言的人写的第一个程序都是“Hello World!”一样,几乎每一个学习单片机的同学接触到的第一个程序都是点灯程序,几乎每一本介绍单片机学习的教材也都是从这样一个程序开始,几乎每一个工程师学习一类新的单片机时也是从这个程序开始的。如下图所示,就是一个典型的单片机点灯程序的框架,LED以一秒为周期循环闪烁下去。还有很多以此程序拓展开来的,如流水灯,呼吸灯等等。

本文引用地址:延时函数结构简单,条理清晰,这个程序作为单片机初学者或者初学一类单片机来说,无疑是非常好的,但在实际使用过程中使用这样的程序框架,程序的执行效率肯定不会很高,程序99%以上的时间都在忙着空转。

那么,我们怎样才能将这些无用功节省掉,把浪费掉的时候收回来做一些有益的事情呢?下面是笔者的一些思路。

一、前后台程序

前后台模式的程序是大家最常用到的,也是最简单的嵌入式程序架构。它分为前台程序和后台程序。应用程序采用一个无限循环,在循环中调用相应和函数,来完成相应的操作,这部分程序可看作是后台行为。前台程序通过中断来实现,即中断服务程序。一般情况下,后台程序也叫任务级程序,前台程序也叫事件处理级程序。

前后台程序也可以与程序调度相结合,在程序运行时,后台程序检查每个任务是否具备运行条件,通过一定的调度算法来完成相应的操作。对于实时性要求特别严格的操作通常由中断来完成,仅在中断服务程序中标记事件的发生,不再做任何工作就退出中断,经过后台程序的调度,转由前台程序完成事件的处理,这样就不会造成在中断服务程序中处理费时的事件而影响后续和其他中断。

二、定时器和状态机

状态机是软件领域中的一个重要概念,在嵌入式裸机编程中,状态机的地位尤其重要。几乎所有的嵌入式任务都可以被看做状态机来处理。比如一个按键处理过程,可以看做一个状态机,一个细小的击键动作包含了:释放、抖动、闭合、抖动和重新释放等状态,每个状态对应不同的处理程序,状态切换可以通过每隔一段时间(定时器)去检查按键状态来实现。每个状态之间的时间间隔可以去处理其他任务,而不必采用延时函数函数来等待下一个状态的到来。

三、合作式调度器

调度器,一方面可以看作一个简单的操作系统,允许以周期性或(很少地)单次方式来调用任务。另一方面,从底层来看,调度器可以看作是一个由许多不同任务共享的定时器中断服务程序,多个不同的任务,可以使用同一个调度器来调度完成。调度器主要分了两大类:合作式调度器和抢占式调度器。

合作式调度器是一种单任务的系统结构,在任一时刻只有一个任务是活动的,直到这一任务运行完成之后,调度器控制调用下一个任务。在合作式调度器中,任务在特定的时刻被调度运行;当一个任务需要运行时,会被添加到等待队列;当CPU空闲时,运行等待队列中的下一个任务;任务一旦被执行,不被中断,直到任务执行完成;此后CPU交还调度器控制,去执行下一个任务。

一、抢占式调度器

抢占式调度器是一种多任务的系统结构,我们平常接触到的商用嵌入式操作系统如UCOS等一般属于抢占式调度系统。在抢占式调度器中,任务在特定的时刻被调度运行;当任务需要运行时,被添加到等待队列中;等待的任务运行一段固定的时间,如果没有完成,将被暂停并放回到等待队列中,然后下一个等待任务将运行一段固定的时间。

这类调度器相对复杂,通常作为一个独立的操作系统来处理,它可以对外部事件快速响应,可“并行地”处理多个不同任务。

本文简单介绍了几种不同的单片机程序框架,由于篇幅问题,不能一一详细解释,以后有机会将详细解释,并一一给出实例。

定工作服

菏泽职业装定制

潍坊制作西装