一种嵌入式系统的多任务调度方法及系统的制作方法

文档序号:9200272阅读:413来源:国知局
一种嵌入式系统的多任务调度方法及系统的制作方法
【技术领域】
[0001] 本发明涉及任务调度技术领域,具体涉及一种嵌入式系统的多任务调度方法及系 统。
【背景技术】
[0002] LNG加气机电控系统中,嵌入式系统任务多,功能繁多,需要操作系统对多任务的 管理,但同时对实时性要求高,如果嵌入式系统加载操作系统进行软件功能开发,势必会降 低嵌入式系统的实时性,也增加了程序的复杂度。

【发明内容】

[0003] 本发明所要解决的技术问题是提供一种嵌入式系统的多任务调度方法及系统,在 不采用嵌入式操作系统的前提下,能够实现对多任务进行高效率的调度,实现抢占式的任 务切换。
[0004] 本发明解决上述技术问题的技术方案如下:
[0005] 一方面,提供了一种嵌入式系统的多任务调度方法,所述方法包括:
[0006] 按照实时性要求将嵌入式系统任务划分为强实时性任务、中实时性任务、弱实时 性任务和无实时性任务;
[0007] 对所述强实时性任务采用硬件中断的方式进行任务调度和抢占;
[0008] 对所述中实时性任务和弱实时性任务采用具有不同调度周期和不同中断优先级 的定时器中断的方式进行任务调度;
[0009] 对所述无实时性任务按照对应程序的执行顺序进行任务轮询。
[0010] 另一方面,提供了一种嵌入式系统的多任务调度系统,所述系统包括:
[0011] 任务划分模块,用于按照实时性要求将嵌入式系统任务划分为强实时性任务、中 实时性任务、弱实时性任务和无实时性任务;
[0012] 第一任务调度模块,用于对所述强实时性任务采用硬件中断的方式进行任务调度 和抢占;
[0013] 第二任务调度模块,用于对所述中实时性任务和弱实时性任务采用具有不同调度 周期和不同中断优先级的定时器中断的方式进行任务调度;
[0014] 第三任务调度模块,用于对所述无实时性任务按照对应程序的执行顺序进行任务 轮询。
[0015] 本发明提供的一种嵌入式系统的多任务调度方法及系统,将嵌入式系统中的任务 分为强实时性任务、中实时性任务、弱实时性任务和无实时性任务,对强实时性任务采用硬 件中断的方式进行任务调度,而对于中实时性任务和弱实时性任务则采用不同调度周期的 定时器中断的方式进行任务调度,将嵌入式系统中的任务分层设计,实现了不同实时性任 务的调度机制,在不采用嵌入式操作系统的前提下,能够实现对复杂的、多任务进行高效的 调度,且能够采用定时器刷新周期实现抢占式任务调度和切换,降低了程序的复杂性、增加 了代码的健壮性和可移植性。
【附图说明】
[0016] 图1为本发明实施例一的一种嵌入式系统的多任务调度方法流程图;
[0017] 图2为本发明实施例二的一种嵌入式系统的多任务调度系统示意图。
【具体实施方式】
[0018] 以下结合附图对本发明的原理和特征进行描述,所举实例只用于解释本发明,并 非用于限定本发明的范围。
[0019] 实施例一、一种嵌入式系统的多任务调度方法。下面结合图1对本实施例提供的 系统进行详细说明。
[0020] 参见图1,S101、按照实时性要求将嵌入式系统任务划分为强实时性任务、中实时 性任务、弱实时性任务和无实时性任务。
[0021] 具体的,在LNG加气机电控系统中,将嵌入式系统中的任务按照实时性要求分为 强实时性任务、中实时性任务、弱实时性任务和无实时性任务。其中,各种实时性任务包含 有多个任务,比如,嵌入式系统的任务中总共包含27个,强实时性任务有5个,中实时性任 务有10个,弱实时性任务有7个,无实时性任务有5个,可以参见表1。
[0022]表 1 [0023]
[0024]
[0025] S102、对强实时性任务采用硬件中断的方式进行任务调度。
[0026] 具体的,上述步骤SlOl对嵌入式系统中的任务按实时性要求进行了划分,其中, 强实时性任务包含多个任务,此步骤对强实时性任务中的任务建立优先级,组成强实时性 任务队列,随后按照任务的优先级采用硬件中断的方式进行任务调度和抢占,比如,采用如 上表1的外部中断或串口中断的方式进行强实时性任务的调度。
[0027] S103、对中实时性任务和弱实时性任务采用具有不同调度周期和不同中断优先级 的定时器中断的方式进行任务调度。
[0028] 具体的,本实施例对中实时性任务和对弱实时性任务的任务调度机制是相同的, 均是采用一定调度周期的定时器中断的方式进行任务调度,只是中实时性任务对应的定时 器和弱实时性任务对应的定时器的调度周期不同,且两个定时器中断的优先级不同。本实 施例中的中实时性任务/弱实时性任务包含有多个任务,对中实时性任务/弱实时性任务 设定调度周期,并指定中实时性任务/弱实时性任务中的各个任务的任务标识(比如,任务 的名称或任务的变量号)和任务延迟数,组成中实时性任务/弱实时性任务队列。需要说 明的是,中实时性任务队列对应的定时器中断的优先级高于弱实时性任务队列对应的定时 器中断。本实施例可以按照下述程序代码对中实时性任务和弱实时性任务进行初始化:
[0029]
[0030] 与中实时性任务/弱实时性任务对应的定时器中断对中实时性任务队列/弱实时 性任务队列进行周期刷新调度。比如,如上表1,采用定时器中断1对中实时性任务中的各 个任务进行调度,定时器中断1的调度周期为IOms ;采用定时器中断2对弱实时性任务中 的各个任务进行调度,定时器中断2的调度周期为100ms。
[0031] 在对中实时性任务队列和弱实时性任务队列进行任务调度的过程中,可以参见下 述程序代码:
[0032]
[0034] AllTask_Runl () ;//根据中实时性任务中断函数刷新结果,刷新运行中实时性任 务队列1里需要运行的任务AllTask_Run2〇 ;//根据弱实时性任务中断函数刷新结果,刷 新运行弱实时性任务队列2中需要运行的任务,将弱实时标志置I ;
[0035] 在定时器中断1对中实时性任务队列或定时器中断2对弱实时性任务队列进行调 度的过程中,定时器中断1或定时器中断2按照任务队列中的各个任务的任务延迟数或对 应程序的执行顺序进行周期刷新调度。以中实时性任务队列的调度为例,如表1,中实时性 任务队列中优先级为6的任务的延迟数为20 (定时器中断1的调度周期为IOms),而其它任 务的延迟数均为50,则定时器中断1进行周期刷新调度时,首先会刷新到延迟数为20的任 务,随后才刷新到延迟数为50的任务,因此,在中实时性任务队列中,先在刷新函数中执行 延迟数为20的任务,然后执行延迟数为50的任务。而对于延迟数均为50的各个任务,则 按照各任务在对应程序中的执行顺序进行执行。同样,弱实时性任务队列中的各个任务的 执行顺序与中实时性任务队列的执行顺序遵循相同的原则。
[0036] 另外,中实时性任务队列与弱实时性任务队列之间的任务执行顺序的具体实现过 程:以上述表1中的任务为例,若弱实时性任务队列中的优先级为16的任务已经在执行或 者即将执行(或者还在定时器中断2中没有返回),此时定时器中断1发生,由于定时器中 断1的中断优先级要高于定时器中断2的中断优先级,则程序执行定时器中断1,在定时器 中断1中,刷新到中实时性任务队列中的优先级为7的任务需要执行,而此时检测弱实时性 任务队列中有弱实时任务标志为1 (即有优先级为16的任务正在或者将要运行),则在定时 器中断1中执行优先级为7的中实时性任务,随后再跳出函数,去继续执行优先级为16的 弱实时性任务,以不同优先级的定时器中断的方式实现了中实时性任务与弱实时性任务之 间任务的抢占与恢复;若在此时检测弱实时性任务队列中没有弱实时任务标志为1,则中 实时性任务队列中的该任务跳出定时器1进行执行。S104、对无实时性任务按照对应程序 执行顺序进行任务轮询。
[0037] 具体的,由于无实时性任务没有实时性要求,则弱实时性任务队列中的各个任务 按照在对应程序中的顺序进行执行即可。
[0038] 实施例二、一种嵌入式系统的多任务调度系统。下面结合图2对本实施例提供的 系统进行详细说明。
[0039] 本实施例提供的系统包括任务划分模块201、第一任务调度模块202、第二任务调 度模块203和第三任务调度模块204,其中第二任务调度模块203还包括切换模块2031。 [0040] 任务划分模块201主要用于按照实时性要求将嵌入式系统任务划分为强实时性 任务、中实时性任务、弱实时性任务和无实时性任务。
[0041] 具体的,在LNG加气机电控系统中,任务划分模块201将嵌入式系统中的任务按照 实时性要求分为强实时性任务、中实时性任务、弱实时性任务和无实时性任务。
[0042] 第一任务调度模块202主要用于对强实时性任务采用硬件中
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1