51单片机多任务编程设计及应用

2016-05-30 09:32李鹏
科技风 2016年16期
关键词:多任务列表中断

李鹏

摘 要:在51单片机上实现多任务处理主要借鉴现代操作系统的分时处理方法,有几种不同的实现策略。本文将基于此背景,讨论51单片机多任务编程的设计和应用,详细阐述其实现策略。

关键词:51单片机;多任务编程;操作系统

单片机技术经历几十年的发展逐步走向成熟,被广泛应用于各行业。51单片机指兼容Intel8031系统的单片机系统,在智能控制领域有广泛的引用[ 1 ]。

一、多任务执行原理

51单片机的多任务执行机制主要借鉴现代操作系统的分时处理方法。事实上,多任务执行并非多个任务同时运行,而是CPU在不同的任务之间不停的切换,每次执行一个任务的一小部分,之后迅速切换至下一个任务,并执行这个任务的一小部分,然后在切换至另一个任务,以此循环往复。

从宏观上来看,就好像多个任务在同时执行。系统通过合理的调度,将CPU的运行时间合理分配给各个任务,每个任务轮流占用一小部分时间。这就是现代操作系统分时机制的原理[ 3 ], 也是51单片机多任务执行的基本方法。

二、实现策略

51单片机多任务执行机制针对不同的应用场景和不同的单片机型号,在具体实现上有所区别,但从根本上来说都是以现代操作系统分时理论为基础来实现的。下面将详细讲解具体如何使用时间片分配机制来实现51单片机的多任务执行。

基于时间片分配机制来实现51单片机多任务执行主要涉及三项内容。一是待执行程序,以列表形式组织,二是运算资源,也就是CPU,三是调度器,用于统筹安排待执行程序的执行顺序,合理给各待执行程序分配运算资源。具体的运行机制如下。

首先,在初始化阶段,待执行任务被组织为列表,然后调度器根据具体情况为各个任务分配不同数量的时间片。

然后在调度器的组织下,各个任务依次占用CPU,占用时间为各自对应数量的时间片。

通常来说,根据具体情况不同,各任务占用的时间片数目有所区别,但总数量都不会很多,CPU只执行任务的一小部分,然后迅速切换至下一个任务。

当CPU遍历整个任务列表把所有任务的指定时间片都执行完毕之后,系统通过调度器从新为列表内的任务分配新的时间片数量,然后开始新一轮的运行。

三、涉及的问题及解决方法

在采用分时机制来实现多任务运行时,涉及的问题主要包括。

(一)常规任务

通常来说,系统需要执行的任务分为两类,一类是立刻开始执行的任务,这类任务我们称为实时任务;另一类任务需要触发条件,只有在满足特定的条件时,这类任务才会被执行,这种任务我们称为常规任务。

实时任务可以直接安排进入上文的所谈到的待执行任务列表内,CPU依次执行各实时任务。而常规任务需要一定设置。具体方法是为每一个常规任务设置一个空过程,在CPU运行至常规任务时,进行一次判断。假如不满足常规任务的执行条件,则执行空过程,CPU跳转至下一个任务;若满足常规任务的执行条件,则屏蔽空过程,CPU执行常规任务。

(二)延时等待

在执行任务时,会涉及数据读取,外部通讯等各种情况,就必然会有延时和等待的情况出现。假如不对延时等待进行调度,CPU有可能一直延时或等待,无法继续运行。针对延时等待的处理方法如下。

设计一个专门的任务来代表延时和等待,这个任务具有特定的时间片数目。每当CPU遇到延时等待情况时,调度器将CPU自动切换至这个特定的任务,CPU在这个任务内执行(等待)固定的时间片数目,然后跳转至下一个任务。

比如,我们假设这个特定的代表延时等待的任务为任务7,为其分配1个时间片,整个任务列表包含20个任务,任务6在执行的过程中需要等待外部设备的响应。

在这个假设内,当CPU运行至任务6后,在执行任务的过程中遭遇等待,此时CPU直接切换至任务7,并空运转(等待)1个时间片,之后迅速切换至任务8,继续运行。当CPU运行至任务6时,假如任务6还是需要等待,则又迅速切换至任务7,空运转(等待)1个时间片,然后继续执行其它任务。

通过将延时和等待设计为一个特定的任务,可以更方便的管理延时和等待问题。在具体的实现过程中,可以采用预先插入代表等待的空任务,也可以在遭遇延时和等待时,让调度器动态生成代表等待的空任务并插入列表。空任务占用的时间片也可以设置为0,这样可以最大化CPU的运行效率。

(三)中断处理

在具体的应用中,主要涉及的中断通常来说包含两类,一类是外部中断,即来自于外部设备的中断,比如外部设备向CPU提出需求[6];另一类是内部任务的中断,即一些待执行任务提出的CPU需求[7]。对于这两种中断,可以采用一种方法来统一处理。

在传统的实现方法下,当任务运行过程遭遇中断时,调度器会将整个CPU的控制权交给中断程序,直到中断程序退出。在这种机制下,一旦普通任务遭遇中断,CPU的控制权就丧失,待执行任务列表内所有任务的执行状况完全取决于中断程序何时退出,这将大大影响多任务执行的效率。

为在遭遇中断时依然保持较高的多任务执行效率,需要改良传统中断机制。具体的实现方法是在待执行任务列表内添加一个代表中断的任务A,并为其分配特点数量的时间片。任务A是中断程序的引用,每当遭遇中断时,将CPU自动切换至任务A,运行对应数量的时间片,然后切换至列表内的下一个任务。 开始下一次执行至任务A时,又继续执行一定数量时间片的中断程序。

综上所述,针对常规任务、延时等待、中断处理等问题,通过在待执行任务列表内设置对应的任务,均可以很好的解决这些问题。通过以上的方法,可以很好的实现51单片机的多任务运行,提高51单片机的运行效率,扩展51单片机的使用场景。

参考文獻:

[1] 陈淑芳. 基于51单片机的教学实验系统的设计与开发[D].中国海洋大学,2011.

[2] 赵月静,陈继荣,张永弟.单片机原理及应用课程创新实践教学改革[J].实验技术与管理,2013(01): 176-179.

猜你喜欢
多任务列表中断
学习运用列表法
扩列吧
基于中心化自动加权多任务学习的早期轻度认知障碍诊断
跟踪导练(二)(5)
千里移防,卫勤保障不中断
基于判别性局部联合稀疏模型的多任务跟踪
基于多任务异步处理的电力系统序网络拓扑分析
列表画树状图各有所长
不含3-圈的1-平面图的列表边染色与列表全染色
未知环境下基于粒子群优化的多任务联盟生成