位置:51电子网 » 技术资料 » 其它综合

一种实时多任务系统软件设计方法

发布时间:2007/8/28 0:00:00 访问次数:533

    摘要:从进程和线程调度的角度出发,介绍了一种规范化的实时多任务系统软件设计方法,提出了“前向分支”的设计原则,给出了完整的系统模型。

    关键词:线程拆分 前向分支 实时多任务 单片机

在机电产品研制开发中,经常要涉及到基于嵌入式系统或基于单片机系统的程序设计。实时多任务是这类系统最基于的要求之一。在实践中通常采用以下两种解决方案:一是在商业化时操作系统的基础上进行二次开发;二是用户自动设计系统软件。前者设计工作量小,设计周期短,系统的设计质量也容易得到保证。但由于商业实时操作系统往往较多地考虑通用性,缺乏灵活性,对于一些特定的应用场合,其性能往往不能令人满意。同时,这种方案还存在着成本高,依赖于特定硬件等缺点。第二种方案可以从系统的实际要求和硬件的实际情况出发灵活地进行系统设计,易于满足一些特定场合的性能要求,成本也较低。但是,由于缺乏系统化、规范化的设计方法,缺少高层次抽象工具,使得系统的设计质量不容易得到保证,你严重地依赖于程序员的水平和经验。

本文针对上述第三种方案的高限,从进程和线程调度的角度出发,介绍了一种系统化、规范化和易于工程化实施的实时多任务系统软件设计方法,提出了“前向分支”的设计原则,并给出了完整的系统模型。

1 进程的划分

对复杂的系统需求进行模块化和层次化的划分是软件设计的基本方法。在实践中复杂的系统需求通常被划分为一些功能相对独立的任务模块,每个任务模块被视作一个进程(process)。系统中如有多个进程并发(concurrent)运行,该系统就是一个多任务的系统。在图1所示的例子中,n个任务模块构成了宏观上并发运行的一组进程(即Proc_1~Proc-n)。Proc_5和Proc_9是两个具有代表性的进程结构。Proc_5是断续进行的进程,表示了某一顺序逻辑控制的流程。Proc_9是LCD汉字显示程序,其结构是典型的多重循环。其功能是将数组aDisplay中所描述的24×24点阵中文字符串送至LCD显示屏。ADisplay的结构参几图3(e)。Proc_9的基本工作原理如下:当cDispiay不为0时,依次从aDlsplay中取出每个待显示汉字的点阵位置及其在LCD内部显存中的地址,根据这两个参数将一个汉字的点阵顺序发送到LCD内部显存中。直至全部汉字显示完,cDisplay减为0,Proc_9转入空档状态,等待新的显示请求。

系统程序的主要任务之一就是对进程进行调度,包括启动和终止进程、管理进程之间的通讯、处理进程之间的优先级等。但是如果按图1的结构顺序调度进程、以进程为基本单位分配CPU时间的话,显然存在严重的问题。例如在Proc_5中,当程序处于等待K1闭合的状态时,其它任何进程都无法得到服务,尤其当K1出现故障时,系统将处于“挂起”状态。如果一个进程过多地占据了CPU时间,其他进程将不能得到公平、均匀的服务,响应时间无法得到保证,系统效率会降低。总之,只有将CPU时间的分配单位减小,才能解决上述问题。

2 线程的拆分

线程(Thread)是CPU的基本执行单位。一个进程可以由一个或多个线程构成。如前所述,单一线程的进程可能会存在诸多问题,而将一进程拆分为多个线程是解决上述问题的有效手段。由图1的Proc_5和Proc_9可以看出,一个进程过多地占据CPU时间,是因为其中含有次数不确定的等待循环、纯延时和较为耗时的多重循环。其中,纯延时可以用软件延和中断定时两种方法实现,这两种方法在进程中又都可以归结为循环。因此,在拆分线程时应尽量遵循“前向分支”原则,使线程中不含有或少含有循环。

循环结构本质上是由一个分支判断和一个“反向

    摘要:从进程和线程调度的角度出发,介绍了一种规范化的实时多任务系统软件设计方法,提出了“前向分支”的设计原则,给出了完整的系统模型。

    关键词:线程拆分 前向分支 实时多任务 单片机

在机电产品研制开发中,经常要涉及到基于嵌入式系统或基于单片机系统的程序设计。实时多任务是这类系统最基于的要求之一。在实践中通常采用以下两种解决方案:一是在商业化时操作系统的基础上进行二次开发;二是用户自动设计系统软件。前者设计工作量小,设计周期短,系统的设计质量也容易得到保证。但由于商业实时操作系统往往较多地考虑通用性,缺乏灵活性,对于一些特定的应用场合,其性能往往不能令人满意。同时,这种方案还存在着成本高,依赖于特定硬件等缺点。第二种方案可以从系统的实际要求和硬件的实际情况出发灵活地进行系统设计,易于满足一些特定场合的性能要求,成本也较低。但是,由于缺乏系统化、规范化的设计方法,缺少高层次抽象工具,使得系统的设计质量不容易得到保证,你严重地依赖于程序员的水平和经验。

本文针对上述第三种方案的高限,从进程和线程调度的角度出发,介绍了一种系统化、规范化和易于工程化实施的实时多任务系统软件设计方法,提出了“前向分支”的设计原则,并给出了完整的系统模型。

1 进程的划分

对复杂的系统需求进行模块化和层次化的划分是软件设计的基本方法。在实践中复杂的系统需求通常被划分为一些功能相对独立的任务模块,每个任务模块被视作一个进程(process)。系统中如有多个进程并发(concurrent)运行,该系统就是一个多任务的系统。在图1所示的例子中,n个任务模块构成了宏观上并发运行的一组进程(即Proc_1~Proc-n)。Proc_5和Proc_9是两个具有代表性的进程结构。Proc_5是断续进行的进程,表示了某一顺序逻辑控制的流程。Proc_9是LCD汉字显示程序,其结构是典型的多重循环。其功能是将数组aDisplay中所描述的24×24点阵中文字符串送至LCD显示屏。ADisplay的结构参几图3(e)。Proc_9的基本工作原理如下:当cDispiay不为0时,依次从aDlsplay中取出每个待显示汉字的点阵位置及其在LCD内部显存中的地址,根据这两个参数将一个汉字的点阵顺序发送到LCD内部显存中。直至全部汉字显示完,cDisplay减为0,Proc_9转入空档状态,等待新的显示请求。

系统程序的主要任务之一就是对进程进行调度,包括启动和终止进程、管理进程之间的通讯、处理进程之间的优先级等。但是如果按图1的结构顺序调度进程、以进程为基本单位分配CPU时间的话,显然存在严重的问题。例如在Proc_5中,当程序处于等待K1闭合的状态时,其它任何进程都无法得到服务,尤其当K1出现故障时,系统将处于“挂起”状态。如果一个进程过多地占据了CPU时间,其他进程将不能得到公平、均匀的服务,响应时间无法得到保证,系统效率会降低。总之,只有将CPU时间的分配单位减小,才能解决上述问题。

2 线程的拆分

线程(Thread)是CPU的基本执行单位。一个进程可以由一个或多个线程构成。如前所述,单一线程的进程可能会存在诸多问题,而将一进程拆分为多个线程是解决上述问题的有效手段。由图1的Proc_5和Proc_9可以看出,一个进程过多地占据CPU时间,是因为其中含有次数不确定的等待循环、纯延时和较为耗时的多重循环。其中,纯延时可以用软件延和中断定时两种方法实现,这两种方法在进程中又都可以归结为循环。因此,在拆分线程时应尽量遵循“前向分支”原则,使线程中不含有或少含有循环。

循环结构本质上是由一个分支判断和一个“反向

相关IC型号

Warning: Undefined variable $stockkeys in G:\website_51dzw\www.51dzw.com\code\tech\view.php on line 152

热门点击

 

推荐技术资料

罗盘误差及补偿
    造成罗盘误差的主要因素有传感器误差、其他磁材料干扰等。... [详细]
版权所有:51dzw.COM
深圳服务热线:13692101218  13751165337
粤ICP备09112631号-6(miitbeian.gov.cn)
公网安备44030402000607
深圳市碧威特网络技术有限公司
付款方式