《嵌入式应用软件任务划分的原那么.docx》由会员分享,可在线阅读,更多相关《嵌入式应用软件任务划分的原那么.docx(10页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、嵌入式应用软件任务划分的原那么caojing导语:在基于实时操纵系统RTOS,RealTimeOperatingSystem的单片机应用软件设计中,“任务是一个很重要的概念。在基于实时操纵系统RTOS,RealTimeOperatingSystem的单片机应用软件设计中,“任务是一个很重要的概念。有专家指出,把一个应用系统分为多少个任务且定义每一个任务各负责什么事情,这是一门艺术。对于任务的划分,并没有一个人人都要遵守的规那么,不同的人来设计一个同样规格要求的系统,会有不同的方案。然而,到目前为止,很难看到有关论文对任务划分的方法有比拟具体而系统的介绍。本文将深化研究划分任务的方法,并在此根底
2、上,从实用的角度给出编写基于RTX51Tiny实时操纵系统的应用软件的指导方针。1任务的概念和应用软件开发经过在嵌入式实时多任务系统开发中,用C语言代码表示的任务是一个无限的循环程序。任务不能有返回,不能有退出出口,但是任务可以被杀死,包括被别的任务杀死或者自杀。任务的概念与操纵系统中的进程概念一样,一个任务是独立的执行进程,可以与其他的并发任务竞争CPU时间。基于RTOS的单片机应用软件开发经过:首先是根据系统设计方案明确应用软件的功能,然后结合RTOS的并发特性或者准并发特性,对应用软件要实现的功能进展大小适当的划分,也就是把应用软件的功能按照一定的原那么划分为假设干个任务模块,并对各个任
3、务间的通讯和时延进展仔细确实认。2任务划分的原那么任务划分有3个原那么,分别介绍如下。2.1原那么1原那么1是将同一个外设的访问放在一个任务中。对每个独立的硬件例如串行通讯端口进展操纵的驱动程序段放在一个任务中。也就是讲,要想对某个设备资源进展操纵,只有依靠执行相应的任务来实现。这样无论何时切换任务,都不会对任何独立的“外设造成影响。这样做可以防止嵌入式操纵系统的特殊问题资源冲突和重入问题,而且利于系统维护与晋级。各个任务之间要实现通讯,可以调用os_send_signal函数及全局变量来实现。所谓“资源冲突,就是任务A在访问某个资源时,恰好发生了任务切换由任务A切换到任务B,任务B也访问这个
4、资源且改变了它的状态,这样当再次执行任务A时,就可能发生冲突或者带来不确定性。而所谓“重入,是指假设任务A在运行某个函数,发生任务切换后,任务B也运行这个函数,这样就会破坏任务A执行这个函数时的现场,进而可能导致任务A执行函数时结果不正确。这种问题尤其轻易出如今串行接口器件的操纵中,例如串口,串行的A/D、D/A器件等。2.2原那么2原那么2是要通过任务分割进步系统的实时性。在嵌入式多任务实时系统中,任务是指一个程序分段。这个程序分段被操纵系统当作一个根本单元来调度。典型地,每个任务都是一个无限的循环。RTOS本质上就是嵌入的实时内核,它负责治理各个任务,或讲是为每个任务分配CPU时间,并且负
5、责任务之间的通讯。实时内核可分为可剥夺型和不可剥夺型两类。因此,按照所使用内核的不同,嵌入式实时系统也可分为两类:使用不可剥夺型内核的嵌入式实时系统和使用可剥夺型内核的嵌入式实时系统。2.2.1长任务的定义在RTOS中,长任务就是指整个任务的执行时间较长,超出了RTOS中其他某一个或者某几个任务的实时要求容限,而对整个RTOS的实时性构成威胁的那些任务。需要留意的是,长任务与复杂任务不能混淆,复杂任务的执行时间不一定长,简单任务也可能会构成长任务。2.2.2长任务对RTOS的影响当使用可剥夺型实时内核时,长任务由于执行的时间较长,因此更轻易被高优先级的任务打断;一旦高优先级的任务进入了停当状态
6、,当前任务的CPU使用权就被剥夺了,或讲任务被挂起了,那个高优先级的任务立即得到了CPU的控制权。这样会出现两个问题:一是长任务可能在一次执行的经过中被频繁打断,长时间得不到一次完好的执行;二是长任务被打断时,可能要保存大量的现场信息,其目的是为了保证在高优先级任务执行完返回后,长任务能得以继续执行。然而,这样做要占用一定的系统资源,同时保存现场本身也是要占用CPU时间的,因此,实时性也会下降。当使用不可剥夺型实时内核时,长任务对RTOS的影响更为明显,由于在这种内核中,任务的响应时间取决于最长的任务执行时间。也就是讲,由于长任务的存在,任务的响应时间要变长。其结果是CPU长时间停留在长任务中
7、,其他任务得不到实时的响应,甚至根本得不到执行,系统的实时性势必要下降。总之,无论是使用可剥夺型内核,还是使用不可剥夺型内核,长任务都会对RTOS构成严重的威胁。2.2.3长任务问题的解决方法解决长任务问题最有效的途径是进展任务分割。所谓“任务分割是指将影响系统实时性的长任务分割成假设干个小任务。这样单个任务的执行时间变短,系统的任务响应时间变短,实时性得以进步。1对任务的分析与计算当然,长任务的分割必须结合系统中所使用的内核,以及各任务对实时性的要求等情况,进展必要的分析与计算,才能保证分割的公道性和有效性,详细的步骤如下。分析系统共有多少个任务,这些任务对实时性的要求有多高,求出各个任务所
8、要求的最低执行频率f1,f2,fn。计算目前各任务的实际执行时间t1,t2,tn确定系统中的长任务。假如maxt1,t2,tnmin1/f1,1/f2,1/fn,那么此系统中不存在长任务。假如maxt1,t2,tnmin1/f1,1/f2,1/fn,那么存在长任务,而且执行时间为maxt1,t2,tn的那个任务就是要找的长任务。分析此长任务是否需要分割,分析一下是什么原因导致执行的时间过长,这个时间是否可以通经过序的优化来缩短?假如能,那么不需要进展任务分割;否那么,要对这个长任务进展分割。2施行长任务分割常用的任务分割的方法有以下两种:将长任务按功能分为假设干个小模块,每一个模块构成一个小任
9、务,每个小任务实现一种相对独立的功能,且要保证执行时间t3基于RTX51Tiny的应用软件设计指导RTX51是一个德国KeilSoftware公司开发的用于8051系列单片机的多任务实时操纵系统。RTX51有2个不同的版本。1完全版RTX51Full完全版RTX51Full允许4个优先级的任务时间片轮转调度和抢先式的任务切换,可以并行地利用中断功能。信号和信息可以通过邮箱系统在任务之间相互传递,可以从一个存储池中分配和释放内存,可以强迫一个任务等待中断、超时以及从另一个任务或者中断发出的信号或者信息。2小型版RTX51Tiny小型版RTX51Tiny是RTX51的一个子集,它可以很轻易地在没有
10、任何外部存储器的单片8051系统上运行。RTX51Tiny仅支持时间片轮转任务切换和使用信号进展任务切换,不支持抢先式的任务切换,可以并行地利用中断功能,可以强迫一个任务等待中断、超时以及从另一个任务或者中断发出的信号,不能进展信息处理,也不支持存储器分配或者释放。RTX51Tiny是一种不可剥夺型实时操纵系统内核。基于RTX51Tiny实时操纵系统的单片机应用软件设计,首先应该根据RTX51Tiny操纵系统的准并发特性,对应用软件要实现的功能进展大小适当的划分按照上述3个原那么划分为假设干个任务模块,并对各个任务间的通讯和时延进展仔细确实认。编写基于RTX51Tiny的应用软件的指导方针如下
11、:包含头文件rtx51tny.h在应用程序中。不要写C语言主函数main。RTX51Tiny操纵系统内核中已经有它自己的主函数main。应用程序应该至少包括1个任务函数taskfunction。RTX51Tiny应用程序必须中断使能EA=1,由于RTX51Tiny操纵系统使用了定时器T0中断。应用程序至少调用1个RTX51Tiny系统函数如os_wait;否那么,链接器将不会把RTX51Tiny的系统库包含到应用程序中。任务task0是应用程序中第一个执行的函数。在任务task0中,必须调用os_create_task函数来运行其他任务。任务task函数不必退出或者返回。任务task必须使用一
12、个while1构造或者其他类似的构造。任务task函数不带参数,也没有返回值。使用系统函数os_delete_task挂起halt一个运行的任务。中断效劳程序的编写方式,与不使用RTX51Tiny操纵系统下的编写方式一样。编译和链接应用程序有2种途径,一种是使用集成开发环境Vision2IDE,另一种是使用命令行工具CommandLineTools。一般采用德国KeilSoftware公司提供的集成开发环境Vision2IDE。利用KeilSoftware公司提供的集成开发环境Vision2IDE,创立RTX51Tiny应用程序的开场的步骤如下:运行KeilSoftware公司的集成开发环境V
13、ision2IDE。运行菜单命令ProjectOptionsforTargetTarget1,翻开Target对话框,并在对话框中选择Target选项卡。从Operatingsystem下拉列表框中选择RTX51Tiny,如图1所示。本文给出了划分任务的3个原那么,分别是“对同一个外设的访问放在一个任务中、“通过任务分割进步系统的实时性和“软件工程中的解耦原那么用于任务的划分。理论证实,这些任务划分的原那么是行之有效的。另外,从实用的角度给出了编写基于RTX51Tiny实时操纵系统应用软件的指导方针。实际上,RTX51Tiny实时操纵系统对目的系统的硬件需求是很低的,随着半导体技术的开展,可以运行嵌入式实时操纵系统的单片机芯片是很轻易采购得到的。人们越来越清楚地认识到,在嵌入式系统设计中引入实时操纵系统的必要性5。在很多嵌入式系统中,不但要求系统可以及时响应随机发生的外部事件,并对其作出快速处理,通常还需要同时执行多个任务,并对每个任务作出实时响应。理论证实,对于这样的应用,采用嵌入式实时操纵系统作为应用软件的设计平台和运行平台是一个良好的选择。0