CN101290588B - 一种微嵌入式实时任务调度器及调度方法 - Google Patents

一种微嵌入式实时任务调度器及调度方法 Download PDF

Info

Publication number
CN101290588B
CN101290588B CN2008100694394A CN200810069439A CN101290588B CN 101290588 B CN101290588 B CN 101290588B CN 2008100694394 A CN2008100694394 A CN 2008100694394A CN 200810069439 A CN200810069439 A CN 200810069439A CN 101290588 B CN101290588 B CN 101290588B
Authority
CN
China
Prior art keywords
task
scheduling
status
ready
priority
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
CN2008100694394A
Other languages
English (en)
Other versions
CN101290588A (zh
Inventor
蒋建春
冯辉宗
岑明
丘宝梅
章亮飞
郭东进
苏敏
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Chongqing University of Post and Telecommunications
Original Assignee
Chongqing University of Post and Telecommunications
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Chongqing University of Post and Telecommunications filed Critical Chongqing University of Post and Telecommunications
Priority to CN2008100694394A priority Critical patent/CN101290588B/zh
Publication of CN101290588A publication Critical patent/CN101290588A/zh
Application granted granted Critical
Publication of CN101290588B publication Critical patent/CN101290588B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

本发明请求保护一种微嵌入式实时任务调度器及调度方法,涉及工业控制及智能仪器仪表相关领域。本发明在调度过程中,通过对任务控制块中任务状态字的设置来标志任务状态,调度器通过检测任务状态字来确定任务的调度,通过时钟和事件来驱动调度;采用精简内核代码、可剥夺式内核和中断相结合的方式来实现实时性要求;采用一个状态字实现就绪、挂起和延时计数多用途的方式减少任务执行代码,精简调度算法减少内核代码;在任务控制块中加入调度锁标志,用户可以根据具体需要在任务中进行加锁或解锁。解决了中低端智能仪器仪表传统的编程方式存在的问题以及对实时性、低功耗、小内核的要求,提高了编程效率和代码可移植性。

Description

一种微嵌入式实时任务调度器及调度方法
技术领域
本发明涉及工业控制网络及智能仪器仪表控制等相关领域。
背景技术
在工业控制领域和仪器仪表行业中,一些控制器和仪表正向数字化、网络化、智能化方向发展,中低端仪器仪表在软件开发过程中存在传统的超循环编程方式,具有效率低、带码可移植性和重用性差等缺点,因此,迫切要求采用具有任务调度功能的调度器或操作系统来改变以前顺序执行的超循环调用方式,以满足资源管理和系统的实时要求。
同时,常用的嵌入式操作系统由于内核大、任务调度处理过于复杂、实时性等方面不能很好地适用智能仪器仪表小内核、高实时、高可靠、低功耗的要求。常见的一些嵌入式操作系统如嵌入式linux由于其内核大、功能强等特点一般用于功能较复杂的场合,如多媒体控制器、手持设备、交换机等。ucos-ii操作系统多用于控制、通信等设备中,但其调度复杂,造成最小内核大。这些常见的嵌入式操作系统普遍存在核心调度器复杂、调度方式不灵活等不足。同时大多数嵌入式操作系统在使用时都需要交纳一定数额的费用,这对一些本身成本较低的控制设备来说是不能接受的。
发明内容
本发明所要解决的技术问题是:针对现有嵌入式操作系统普遍存在核心调度器复杂、最小内核较大,调度方式不灵活等缺陷,设计开发了一种实时性强、调度简单、内核小、成本低的嵌入式任务调度器,以及实时任务调度方法。
本发明设计的嵌入式任务调度器主要包括任务控制模块、任务调度算法模块、时钟驱动调度模块、事件机制控制模块等核心模块。
任务控制模块:定义任务调度相关的堆栈指针、任务状态、优先级、任务入口地址和任务加锁标志等任务属性以及任务就绪表,通过任务状态字描述任务的状态,描述延时节拍以及任务就绪表。
任务调度算法模块:规定任务各种状态切换的条件,任务调度触发方式。任务调度触发方式主要有六种:任务延时、事件等待、任务挂起、事件触发、任务激活、中断,每个任务必须调用除中断外的任何一个或一个以上的任务调度触发方式。通过这六种触发方式使任务调度变得简单快捷,提高了实时性,同时也精简了内核。
时钟驱动调度模块:采用时钟定时中断的方式实现任务的定时切换,根据任务优先级分配每个任务执行的先后顺序,调度函数查找就绪表中优先级最高的任务进入运行态。设定每个任务执行的周期,根据任务优先级来分配执行的先后顺序。每个时钟中断产生时,比较是否任务加锁,如果任务未加锁则进行一次调度,就绪表中处于就绪态的最高优先级任务获得CPU控制权,如果任务加锁,当该任务运行任务解锁时,才产生调度。这样既保证了每个任务得到执行,又可以根据具体需要设定每个任务执行的周期,提高了任务的实时性。
事件机制控制模块:定义任务事件的结构形式,实现任务事件在任务调度中的实现方式等。任务事件由一个结构体来定义,包括事件等待任务名称、事件状态标志、事件值指针、事件值长度等。事件机制控制包括等待事件和触发事件,等待事件设置任务为挂起状态,产生调度;激活事件设置等待任务状态为就绪态,产生调度。
同时该调度器还设置任务抢占机制,当中断产生时,调度程序根据就绪表中处于最高优先级任务的优先级和当前任务优先级的高低以及加锁标志来确定是否进行调度。如果当前任务的优先级低于就绪表中的就绪态任务优先级且加锁标志为无效,则进行调度。否则不进行调度。这样保证了系统运行的实时性和可靠性。
本发明还提出一种微嵌入式实时任务调度方法,该方法具体包括,首先创建任务,初始化任务控制模块;就绪表中最高优先级任务获得运行权,进入主函数的空循环等待时钟中断产生任务调度,任务调度算法模块的调度函数根据任务控制模块中的任务入口地址进入任务运行,当任务进入系统延时、任务挂起、事件等待之一时,运行任务让出CPU控制权进入挂起或等待状态;当任务系统延时结束、任务被其他任务激活或等待事件产生有效等情况之一发生时,任务控制模块控制任务由其他状态进入就绪状态;当中断服务程序结束,任务调度算法模块的调度函数先检查被中断任务是否加锁,如果加锁则直接返回任务;如果未加锁,调度函数检测就绪表中是否存在优先级更高的就绪任务,如果有优先级更高的就绪任务,调度函数将当前任务状态进行压栈保护,然后调用任务级任务切换函数进行任务调度,执行完任务调度后,恢复被中断任务状态,继续运行被中断任务。
调度产生的条件主要有以下六种:①当任务进入系统延时时,系统延时函数根据时钟驱动模块中的时钟节拍设置当前任务控制块中的状态标志,任务进入延时等待状态,然后调用任务调度算法模块中调度函数进行调度。②当任务控制模块中的事件等待函数进入等待事件产生时,事件等待函数中设置当前任务状态标志,任务进入挂起状态,然后调用调度函数进行调度。③当任务完成当前操作,暂时不执行其他操作时,调用挂起函数设置当前任务状态标志,任务进入挂起状态,然后调用调度函数进行调度。④当系统时钟中断延时完成时产生时钟中断,时钟驱动调度模块在时钟中断服务程序中将各个延时任务的状态标志大于1的减1,比较是否存在延时结束任务,如果存在,表示该任务的状态进入就绪态,比当前任务优先级更高的就绪任务,如果有,进行调度;在其他中断产生后,先运行中断服务程序,然后比较被中断任务是否加锁,如果未加锁,则进行调度。⑤当挂起任务等待的事件产生或被其他任务激活时,其状态变量被设置为就绪态,然后进行调度。⑥任务运行到某个时刻,需要激活被挂起任务时,事件机制控制模块调用激活任务函数,然后调用调度函数进行调度。
由于在任务控制模块、调度算法、调度机制等方面采用了更有效的实现方法,既保证系统运行的实时性和可靠性,又减小了调度器的内核大小,在保证系统要求的前提下使得调度器的成本远低于操作系统的成本。
本发明解决了工业现场设备和中低端仪器仪表对操作系统高实时、小内核、低成本的要求。和现行的常用嵌入式操作系统相比,该调度器可以方便的移植到各种8位、16位单片机上,创建任务方便,内核可以减少2KB以内,任务切换可以达到5us以内,能够满足这些设备的要求,并大大降低了硬件成本和软件成本。和传统的超循环方式编程相比,由于采用了调度器,不同功能的模块可以用不同任务来管理,在产品换代或系统更新时,可以快速方便地将原来的代码移植到新的系统或产品上。
附图说明
图1本发明调度器总体控制流程图
图2任务调度算法状态描述示意图
图3任务切换示意图
图4时钟中断任务切换流程图
具体实施方式
本发明针对微嵌入式实时任务调度器的多任务、实时性、小内核的要求,设计了调度器的核心数据结构、任务调度算法、事件机制、调度算法的时钟驱动调度。
1.多任务:针对多任务要求,本发明采用常见的4种任务状态:就绪状态、运行状态、等待状态和挂起状态。就绪状态描述的是等待运行的任务状态;运行态描述了任务正在运行的状态;等待状态描述了任务处于延时等待的状态;挂起态描述任务当前操作完成或正在等待事件产生的状态。在调度过程中,通过对任务控制块中任务状态字的设置来标志任务状态,调度器通过检测任务状态字来确定任务的调度。
2.实时性:针对实时性要求,本发明采用精简内核代码、可剥夺式内核和中断相结合的方式来实现实时性要求。精简内核使执行的时间减少,可剥夺内核保证了实时性较高的任务优先执行的要求,中断保证了硬件实时通信。通过设置实时性要求较高的任务为更高优先级,时钟中断产生时,比较当前任务和就绪态的其他任务的优先级,如果有更高优先级的任务处于就绪态,就进行任务切换。同时通过中断来响应外部信号。这样可满足工业控制器及仪器仪表的实时性的需要。
3.小内核:为了解决内核大小问题,本发明采用单任务队列,通过精简任务控制块,采用一个状态字描述就绪、挂起和延时节拍计数三种状态的方式减少任务执行代码,通过事件来实现任务间的基本通信,精简调度算法减少内核代码,以实现小内核的要求。
4.调度锁:针对一些任务要求执行过程中不能被其他任务中断,本发明在任务控制块中加入调度锁标志,在中断服务程序执行完成后,检查被中断任务是否加锁,如果加锁不进行调度,直接返回被中断任务。保证个别任务执行的高可靠性和高实时性。用户可以根据具体需要在任务中进行加锁或解锁,加锁和解锁在每个任务中必须是成对出现。在调用事件等待/触发函数、延时函数、任务挂起/激活函数之前必须解锁。
下面针对附图和具体实施方式对本发明的实施作进一步的说明。
该嵌入式实时任务调度器包括,任务控制模块、任务调度算法模块、时钟驱动调度模块、事件机制控制模块。任务控制模块定义任务调度相关的堆栈指针、任务状态、任务优先级、任务入口地址和任务加锁标志以及任务就绪表,通过任务状态字描述任务状态、延时节拍以及任务就绪表;任务调度算法模块:通过调度函数描述任务状态切换的各种条件,任务调度机制,每个任务调用除中断外的任何一个或几个触发方式,任务调度器才进行调度;时钟驱动调度模块:采用时钟定时中断的方式实现任务的定时切换,根据任务优先级分配每个任务执行的先后顺序,调度切换执行优先级最高的就绪任务;事件机制控制模块:定义任务事件的结构形式,实现任务事件在任务调度中的实现方式,根据任务就绪表中处于最高优先级任务的优先级和当前任务优先级的高低以及加锁标志,激活函数确定是否进行任务调度切换。
同时该调度器还设置任务抢占机制,当中断产生时,调度程序根据就绪表中处于最高优先级任务的优先级和当前任务优先级的高低以及加锁标志来确定是否进行调度。如果当前任务的优先级低于就绪表中的就绪态任务优先级且加锁标志为无效,则进行调度,否则不进行调度。这样保证了系统运行的实时性和可靠性。
该调度器主要通过任务控制模块、任务调度算法模块、时钟驱动调度模块、事件机制控制模块等核心模块实现。任务控制模块通过定义任务调度相关的堆栈指针、任务状态、优先级、任务入口地址和任务加锁标志等任务属性以及任务就绪表,通过这些参数来描述任务的状态、调度的条件。任务调度算法模块描述任务各种状态切换的条件,任务调度触发方式。时钟驱动调度模块设定每个任务执行的周期,通过时钟中断来产生任务切换的节拍,完成任务的定时调度,以保证调度器的实时性。事件机制控制模块定义任务事件的结构形式,实现任务事件在任务调度中的实现方式等。任务控制块和调度算法是调度器的核心,事件、时钟中断是触发调度的条件,为调度算法服务。
调度器总体控制流程图如附图1所示。首先创建任务,初始化任务控制模块;就绪表中最高优先级任务获得运行权,进入主函数的空循环等待时钟中断产生任务调度,调度函数根据任务控制模块中的任务入口地址进入任务运行,当任务调用系统延时、事件等待、挂起三个函数之一,事件机制控制模块控制任务由运行状态进入等待或挂起状态,调用任务调度算法模块中调度函数,让出CPU控制权。当出现时钟中断、事件触发、任务激活三种情况之一时,事件机制控制模块控制任务状态从挂起或等待状态变为就绪态,调用调度函数,任务获得CPU控制权。
任务延时:当前任务由于需要延时调用系统延时函数设置当前任务状态标志为延时节拍,使任务由运行态进入等待状态,然后进行任务调度;事件等待:由于当前任务通过调用事件等待函数等待某个未发生的事件,设罩当前任务状态标志为0而使任务进入挂起状态,然后进行任务调度;任务挂起通过设置当前任务的状态标志为0使当前运行任务从运行态进入挂起状态,然后进行任务调度;事件驱动函数是某个任务运行时触发某个事件有效时,调用事件触发函数设置事件状态标志为1和事件等待任务状态标志为1使等待该事件的任务从挂起状态直接进入就绪状态,然后进行任务调度;而激活任务函数是指某个任务运行到某个阶段需要启动一个挂起的任务执行时调用激活任务函数设置该挂起任务的状态标志为1来使该任务从挂起状态进入就绪态,然后进行任务调度。时钟中断可以使延时节拍依次减少,当减为1时,任务从等待状态进入就绪态;其他中断如果调用了事件驱动函数或任务激活函数,可以使事件等待任务从挂起状态进入就绪态;在被中断任务未加锁的情况下,中断都会调用调度函数。
整个任务调度就是通过任务延时、事件等待、任务挂起、事件触发、任务激活、中断这六种情况之一来实现任务状态的改变,从而实现调度的触发。
在本发明中采用了相应的数据结构、调度逻辑顺序和调度规则来具体实现。以下对该调度器中各控制模块的具体技术实施进行详细描述。
1.任务控制模块
任务控制模块,主要由一个结构体来管理任务执行相关的参数,每个任务在创建时复制一个相同的任务控制块结构体。任务控制块结构体由任务堆栈、任务入口地址、任务状态字、任务优先级和任务加锁标志5个部分组成。定义任务调度相关的堆栈指针、任务状态、优先级、任务入口地址和任务加锁标志等任务属性以及任务就绪表,通过任务状态字描述任务的状态,描述延时节拍以及任务就绪表。这样可以大大减小任务相关的参数,从而减小内核大小。
任务堆栈用于保护被中断或高优先级打断的现场数据,用一个长整型指针来指向堆栈空间的初始地址,初始化时指向任务堆栈空间的顶部。任务在切换时通过入口地址从堆栈空间压入或推出保护的任务数据。
任务入口地址是任务运行时的初始地址,是一个长整型指针,在任务创建时初始化指向任务函数名。
任务状态字,用来表示任务当前的状态和延迟的时间节拍数,用一个整型或长整型变量描述,0表示挂起状态,1表示就绪状态,大于1的值表示延时节拍数,在任务创建时初始化0。延时节拍根据时钟中断周期值计算出延时减1需要的中断次数。具体计算是:中断次数=1次延时节拍时间/系统时钟中断周期。比如状态标志大于1的数表示延时多少个毫秒,而时钟中断周期为200微毫秒,则时钟中断产生5次状态标志减1。任务状态标志通过任务延时、事件等待、事件触发、任务挂起、任务激活、时钟中断来进行设置,通过调度函数来进行判别。
任务优先级表示任务优先获得运行权的级别,保证实时性要求高的任务得到运行。根据操作系统允许的最大任务数来定义数据类型,如最多支持的任务数为64个,用一个8位数据描述。数字越小优先级越高,可以用任务号来表示。任务切换时,就绪列表中优先级最高的任务进入运行态。
调度锁主要作用是保证部分任务执行的实时性和可靠性,用一个无符号字符型变量表示。任务加锁标志表示中断处理完成后,根据被中断任务加锁标志值来确定是否进行调度,0表示未加锁,被中断任务可以被抢占,调用调度函数实现任务切换;1表示加锁,被中断任务不能被强占,中断完成后返回被中断任务。任务的加锁和解锁通过专门的函数来实现,任务中必须是成对出现,否则,可能造成系统只运行加锁任务。
在调度器任务控制模块中设置一个全局任务控制块数组来表示任务控制块列表,每个任务在创建时复制一个对应的任务控制块来描述任务的属性。创建任务就是调用任务创建函数把任务函数名赋给任务控制块数组中任务入口地址;为任务开辟堆栈空间,初始化该任务的任务堆栈;每个任务设置一个且仅有一个优先级,任务的优先级也可以用任务的ID号来表示;任务初始状态设置为就绪态;加锁标志初始状态为空,用户可根据具体情况在任务中调用加锁、解锁函数进行设置。
2.任务调度算法模块
任务调度算法模块规定描述任务状态切换的条件,任务调度触发方式,它具体表现在操作系统产生任务调度的执行条件中。任务调度触发方式主要有六种:事件等待、事件触发、中断、任务延时、任务挂起和任务激活,这六种方式中都包含了任务调度函数的调用,每个任务必须调用除中断外的任何一个或一个以上的任务调度触发方式来调用调度函数。
所有任务的状态字组成了整个操作系统的就绪表,采用一个变量实现了三种状态的描述,精简了调度器的内核。任务调度算法模块在这六种触发方式的作用下设置对应的任务状态标志,然后在就绪列表中找到优先级最高的任务,并把这个任务切换到运行状态。在任务控制块列表中使用任务在列表中的相对位置表示优先级的高低,并不需要实际的对任务优先级进行比较,这样可以节省调度时间。如图2所示为任务调度算法状态描述示意图。具体的方法如下:
(1)任务状态切换主要由任务延时、事件等待、任务挂起、事件触发、任务激活、中断服务程序等函数的调度组成。任务的状态由任务控制块中的任务状态字给出。
当系统产生中断时,不管是时钟中断还是其他中断,操作系统进入中断服务程序,如果是系统时钟中断,则检查各延时任务的状态标志是否大于1,如果大于1,则减1,如果减1后等于1,表示任务延时结束,延时任务进入就绪态。
当某个事件产生时,设置事件状态标志为1,事件触发函数通过该事件属性找到等待该事件对应的等待任务,将该任务的任务状态设置为1,事件等待任务进入就绪态。
当当前任务调用任务激活函数激活某个被挂起的任务时,置被激活任务状态标志为1,被激活任务从挂起状态进入就绪态。
当系统产生中断时,不管是时钟中断还是其他中断,操作系统进入中断服务程序,如果是系统时钟中断,则检查各延时任务的状态标志是否大于1,如果大于1,则减1,如果减1后等于1,表示任务延时结束,延时任务进入就绪态。
当某个事件产生时,事件触发函数通过该事件属性找到等待该事件对应的等待任务,将该任务的任务状态设置为1,事件等待任务进入就绪态。
当当前任务调用任务激活函数激活某个被挂起的任务时,置被激活任务状态标志为1,被激活任务从挂起状态进入就绪态。
如图3所示为任务切换示意图,描述了任务切换过程。具体切换过程包括,当前事件运行在任务延时、事件等待、任务挂起、事件触发、任务激活、五种任务状态之一时,或者中断产生且被中断任务未加锁时,进入任务调度。
然后,任务调度算法模块在就绪表从任务控制块队列的头部(即任务优先级为0的任务)开始依次检查任务就绪标志,如果任务状态标志≠1,表示当前任务为非就绪状态,继续检查下一个优先级的任务。如果任务状态标志为1,则找到最高优先级任务。
最后,调度函数比较当前最高优先级任务和当前运行任务是否相同,如果相同则退出调度,否则,先按照顺序保存当前任务状态到任务栈空间,再将CPU的堆栈指针指向需运行的任务栈顶,从栈空间将任务状态值,恢复程序计数器值,运行该任务。
内核采用可剥夺式内核,在其他中断服务程序完成后,调度函数先检查被中断任务是否加锁,如果加锁则直接返回任务;如果未加锁,调度函数检测就绪表中是否存在优先级更高的就绪任务,如果有,调度函数将当前任务状态进行压栈保护,然后调用任务级任务切换函数进行任务调度,执行完成后,恢复被中断任务状态。由于内核较小,控制任务不多,本调度器不允许中断嵌套。
3.时钟驱动调度模块
设定每个任务执行的周期,根据任务优先级来分配每个任务执行的先后顺序。每个时钟中断产生时,时钟中断服务程序比较是否任务加锁,每个任务的加锁和解锁是成对出现的,如果任务未加锁则进行一次调度,就绪表中处于就绪态的最高优先级任务获得CPU控制权,如果任务加锁,当该任务运行到任务解锁时,才产生调度。这样既保证了每个任务得到执行,又可以根据具体需要设定每个任务执行的周期,提高了任务的实时性和可靠性。
为了确保调度器的实时性,使每个任务都能得到实时调度,在时钟驱动调度模块中采用时钟定时中断的方式来实现任务的定时切换。时钟每产生一次中断就比较一次就绪表中的就绪任务的优先级任务,每次查找优先级最高的就绪任务,然后调度切换执行优先级最高的就绪任务。用户可以根据实时性要求设置时钟中断的周期。
同时,系统时钟节拍函数自动检查每个被延迟的任务,当任务的延时结束时,时钟驱动调度模块自动将任务状态设置为就绪状态并进行一次任务调度。时钟中断任务切换驱动调度过程见附图4,具体算法如下:
(1)时钟中断服务程序从任务控制块列表头部开始顺序检查各任务状态字,根据延时节拍周期计算需要的时钟节拍数,当延时周期满足要求后将所有延迟任务的任务状态字减1。
判断延时状态标志是否大于1,如不大于1,执行步骤(3);如大于1,延时状态标志减1,检查各个延时任务状态标志是否为1;
(2)当当前延迟任务的状态标志变为1时,表示任务进入就绪态,该任务延时结束,判断当前运行任务是否加锁;
(3)任务调度函数判断被中断任务是否加锁,如果加锁,时钟中断服务程序返回被中断任务继续运行;如果未加锁,检测就绪态任务优先级是否大于当前任务,如是,进入中断级调度,返回被中断任务进行一次任务调度。
4.事件机制控制模块
事件机制控制模块定义任务事件的结构形式,实现任务事件在任务调度中的实现方式及事件操作函数等。任务事件由一个结构体来定义,包括事件等待任务名称、事件状态标志、事件值指针、事件值长度等。每个与至少两个以上的任务事件相关联,其中一个任务等待事件,其它任务设置事件。事件的操作包括等待事件和触发事件,等待事件设置任务的状态标志为挂起状态,调用调度函数进行调度;触发事件设置等待任务状态为就绪态,调用调度函数进行调度。
该调度器采用事件机制来实现任务间的通信及调度驱动。事件结构模块中主要包括事件的关联任务、事件状态标志、事件值、事件值长度等。在事件初始化时必须配置事件的等待关联任务,用等待任务名初始化,事件状态标志表示该事件是否产生,定义事件状态标志为1表示产生事件,为0表示未产生事件。当任务运行过程中需要等待某个事件产生后才能继续运行该任务,任务通过事件等待函数等待一个事件的产生,通过检测事件状态标志的值来确定是否进行调度。如果事件状态标志为1,表示事件有效,则读取事件值,继续运行该任务;如果事件状态标志为0,表示事件没有产生,则置当前任务进入挂起状态,进行任务调度。如其他任务或中断触发该事件产生,则通过事件驱动函数设置该事件状态标志为1,同时设置等待事件任务状态为1,同时设置相应的事件值和长度,然后调用调度函数进行调度。等待事件任务根据优先级进入运行态后,通过事件获取相应的事件值,完成任务间的通信。

Claims (8)

1.一种微嵌入式实时任务调度器,包括,任务控制模块、任务调度算法模块、时钟驱动调度模块、事件机制控制模块,其特征在于,任务控制模块:用一个结构体定义任务调度相关的堆栈指针、任务状态、任务优先级、任务入口地址和任务加锁标志,通过任务状态字描述任务的就绪、挂起、延时节拍状态和任务就绪表;
任务调度算法模块:规定任务各种状态切换的条件及任务调度触发方式,每个任务必须调用除中断外的任何一个或一个以上的任务调度触发方式;
时钟驱动调度模块:采用时钟定时中断的方式实现任务的定时切换,根据任务优先级分配每个任务执行的先后顺序,调度函数查找就绪表中优先级最高的任务进入运行态;
事件机制控制模块:定义任务事件的结构形式,实现任务事件在任务调度中的实现方式;根据任务就绪表中处于最高优先级任务的优先级和当前任务优先级的高低来确定是否进行任务调度切换。
2.根据权利要求1所述的实时任务调度器,其特征在于,任务事件由包括事件等待任务名称、事件状态标志、事件值指针、事件值长度的一个结构体定义。
3.根据权利要求1所述的实时任务调度器,其特征在于,如果当前任务的优先级低于任务就绪表中的就绪态任务优先级且加锁标志为无效,则进行调度,否则不进行调度;如果每个任务处于除中断外的任何一个或几个触发方式,任务调度器才进行调度。
4.根据权利要求1所述的实时任务调度器,其特征在于,在任务控制模块中设置一个全局任务控制块数组来表示任务控制块列表,在创建任务时复制一个对应的任务控制块来描述任务的属性,调用任务创建函数把任务函数名赋给任务控制块数组中任务入口地址;为任务开辟堆栈空间;每个任务设置一个优先级;任务初始状态设置为就绪态;加锁标志初始状态为空。
5.根据权利要求1所述的实时任务调度器,其特征在于,所述任务调度触发方式包括:任务延时、事件等待、任务挂起、事件触发、任务激活、中断六种方式。
6.一种微嵌入式实时任务调度方法,其特征在于,初始化任务控制模块,创建任务;就绪表中最高优先级任务获得运行权,等待时钟中断产生任务调度;调度函数根据任务控制模块中的任务入口地址进入任务运行状态;当任务调用系统延时、事件等待、挂起三个函数之一,事件机制控制模块控制任务让出CPU控制权进入挂起或等待状态,然后启动就绪表中优先级最高的任务运行;当任务出现中断、事件触发、任务激活三种情况之一时,任务控制模块控制任务状态从等待或挂起状态变为就绪态;当中断服务程序结束,调度函数先检查被中断任务是否加锁;如果加锁则直接返回任务;如果未加锁,调度函数检测就绪表中是否存在优先级更高的任务,如果有,调度函数将当前任务状态进行压栈保护,调用任务切换函数进行任务调度;执行完任务调度后,继续运行被中断任务。
7.根据权利要求6所述的实时任务调度方法,其特征在于,所述系统延时函数设置该任务的状态标志为延时节拍,任务进入等待状态;所述事件等待函数设置该任务的任务状态标志为挂起状态;所述挂起函数请求挂起时,设置该任务的任务状态标志为挂起状态。
8.根据权利要求6所述的实时任务调度方法,其特征在于,任务状态由挂起或等待状态变为就绪状态的条件具体为满足以下三种情况之一,
①当时钟中断致使延时节拍减为1时,表示任务延时结束,状态标志进入就绪状态;
②当任务触发某个事件产生时,等待该事件的任务状态设置为就绪状态;
③当任务调用激活任务函数激活某个被挂起的任务,该任务状态标志就从挂起状态设置为就绪状态。
CN2008100694394A 2008-03-07 2008-03-07 一种微嵌入式实时任务调度器及调度方法 Expired - Fee Related CN101290588B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN2008100694394A CN101290588B (zh) 2008-03-07 2008-03-07 一种微嵌入式实时任务调度器及调度方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN2008100694394A CN101290588B (zh) 2008-03-07 2008-03-07 一种微嵌入式实时任务调度器及调度方法

Publications (2)

Publication Number Publication Date
CN101290588A CN101290588A (zh) 2008-10-22
CN101290588B true CN101290588B (zh) 2010-06-16

Family

ID=40034855

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2008100694394A Expired - Fee Related CN101290588B (zh) 2008-03-07 2008-03-07 一种微嵌入式实时任务调度器及调度方法

Country Status (1)

Country Link
CN (1) CN101290588B (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108990422A (zh) * 2017-03-31 2018-12-11 华为技术有限公司 一种锁分配的方法、装置和计算设备

Families Citing this family (41)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101770392B (zh) * 2008-12-30 2012-07-25 上海贝岭股份有限公司 一种基于μC/OS-Ⅱ的高速通信方法
CN102147748B (zh) * 2011-03-01 2013-04-10 汉柏科技有限公司 用户空间中断服务方法及系统
CN102110022B (zh) * 2011-03-22 2013-04-10 上海交通大学 基于优先级调度的传感器网络嵌入式操作系统
CN102541642B (zh) * 2011-12-30 2013-12-18 中国科学院软件研究所 一种增强实时性能的任务管理方法
CN103377078B (zh) * 2012-04-11 2017-04-12 广州地铁集团有限公司 车载atp实时任务调度方法及其任务调度系统
CN102866917B (zh) * 2012-09-27 2015-08-19 深圳市金宏威技术股份有限公司 一种基于Linux平台的冷火实时处理方法及系统
CN102938783A (zh) * 2012-10-30 2013-02-20 中兴通讯股份有限公司 一种Socket处理方法、装置和Web服务器
CN103886033B (zh) * 2014-03-05 2017-02-08 无锡香象生物科技有限公司 用于安全产业链的智能垂直搜索装置和方法
CN104021041B (zh) * 2014-06-12 2017-02-22 山西江河海融科技有限公司 一种多任务操作环境状态的计算机调度方法
CN106155806B (zh) * 2015-04-14 2020-08-11 腾讯科技(深圳)有限公司 一种多任务调度方法及服务器
CN104915256B (zh) * 2015-06-05 2019-03-26 惠州Tcl移动通信有限公司 一种任务的实时调度实现方法及其系统
CN105117288B (zh) * 2015-09-24 2019-09-13 上海斐讯数据通信技术有限公司 一种高精度时钟辅助任务执行的方法
CN106873545A (zh) * 2015-12-14 2017-06-20 重庆森坦科技有限公司 一种基于fpga的实时多任务调度系统
CN106878039A (zh) * 2015-12-14 2017-06-20 中兴通讯股份有限公司 一种版本任务调度管理方法及系统
CN105677464A (zh) * 2015-12-31 2016-06-15 江苏小牛电动科技有限公司 一种基于电动车中控系统的任务调度系统和方法
CN105700937A (zh) * 2016-01-04 2016-06-22 北京百度网讯科技有限公司 多线程任务处理方法和装置
CN106293919B (zh) * 2016-08-12 2019-06-11 中国航空工业集团公司西安飞行自动控制研究所 一种时间触发的嵌入式任务调度装置与方法
CN106296129A (zh) * 2016-08-16 2017-01-04 天脉聚源(北京)传媒科技有限公司 一种状态标识方法及装置
CN106559138B (zh) * 2016-11-22 2019-08-13 深圳市讯方技术股份有限公司 一种多任务切换方法及装置
CN107797857A (zh) * 2017-10-27 2018-03-13 郑州云海信息技术有限公司 一种任务执行方法、装置、设备和计算机可读存储介质
CN107991930A (zh) * 2017-12-15 2018-05-04 苏州咖博士咖啡系统科技有限公司 一种咖啡机系统软件控制方法
CN108009015B (zh) * 2018-01-10 2021-03-12 烟台大学文经学院 实时嵌入式操作系统的事件处理方法
CN108931526B (zh) * 2018-05-28 2021-02-09 中冶南方工程技术有限公司 基于多任务调度机制的带钢表面缺陷检测方法
CN108859759B (zh) * 2018-06-25 2021-02-09 武汉科技大学 电动汽车仪表系统及其调度方法
CN109308217A (zh) * 2018-07-17 2019-02-05 威富通科技有限公司 一种时效任务的数据存储方法及装置
CN109165086A (zh) * 2018-08-13 2019-01-08 深圳市特康生物工程有限公司 任务执行方法及单片机
CN109324885A (zh) * 2018-09-13 2019-02-12 厦门拓宝科技有限公司 一种应用于ups单片机控制的最小操作系统及基于最小操作系统的多任务管理方法
CN109582723B (zh) * 2018-11-30 2021-08-17 深圳市思迪信息技术股份有限公司 分布式etl数据采集方法及装置
CN109756565A (zh) * 2018-12-26 2019-05-14 成都科来软件有限公司 一种基于统计表的多任务数据推送方法
CN110321180A (zh) * 2019-04-17 2019-10-11 浙江工业大学 一种在软件设计中避免状态轮询的方法
CN110134504A (zh) * 2019-04-28 2019-08-16 北京控制工程研究所 一种基于有限状态机的操作系统需求层形式化建模方法及装置
US11106496B2 (en) 2019-05-28 2021-08-31 Microsoft Technology Licensing, Llc. Memory-efficient dynamic deferral of scheduled tasks
CN110457121B (zh) * 2019-07-26 2022-02-01 中国人民解放军军事科学院国防科技创新研究院 一种支持用户态任务动态调度的探针方法和装置
CN110794759B (zh) * 2019-10-29 2021-06-22 北京和利时智能技术有限公司 一种plc任务调度方法和装置
CN113467901A (zh) * 2020-03-31 2021-10-01 北京华为数字技术有限公司 一种任务调度的方法及相关设备
CN112130971A (zh) * 2020-08-17 2020-12-25 惠州市德赛西威汽车电子股份有限公司 一种基于收音机逻辑打断表的任务切换方法及收音机
CN112148535B (zh) * 2020-09-28 2023-09-01 深圳市风云实业有限公司 一种机架式设备双监控系统
CN112631762B (zh) * 2020-12-31 2023-10-27 东软睿驰汽车技术(沈阳)有限公司 一种车辆任务切换的方法和装置
CN114860403B (zh) * 2022-05-11 2023-07-07 科东(广州)软件科技有限公司 一种任务调度方法、装置、设备和存储介质
CN115328629A (zh) * 2022-08-11 2022-11-11 江苏卓易信息科技股份有限公司 裸金属上扩展uefi固件进行实时性嵌入式管理的方法
CN116974728B (zh) * 2023-09-20 2024-01-02 深圳市德兰明海新能源股份有限公司 单片机任务调度方法、单片机产品及存储介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1490722A (zh) * 2003-09-19 2004-04-21 清华大学 基于PowerPC处理器结构的分级任务切换方法
CN1737764A (zh) * 2005-09-12 2006-02-22 浙江大学 支持osek标准的嵌入式实时操作系统的任务调度方法
CN1794183A (zh) * 2006-01-17 2006-06-28 浙江大学 Java操作系统中实时任务调度的实现方法
US20070143761A1 (en) * 2005-12-15 2007-06-21 Yong Deng Task scheduler system and method for managing tasks in an embedded system without a real time operating system

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1490722A (zh) * 2003-09-19 2004-04-21 清华大学 基于PowerPC处理器结构的分级任务切换方法
CN1737764A (zh) * 2005-09-12 2006-02-22 浙江大学 支持osek标准的嵌入式实时操作系统的任务调度方法
US20070143761A1 (en) * 2005-12-15 2007-06-21 Yong Deng Task scheduler system and method for managing tasks in an embedded system without a real time operating system
CN1794183A (zh) * 2006-01-17 2006-06-28 浙江大学 Java操作系统中实时任务调度的实现方法

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108990422A (zh) * 2017-03-31 2018-12-11 华为技术有限公司 一种锁分配的方法、装置和计算设备
CN108990422B (zh) * 2017-03-31 2021-07-20 华为技术有限公司 一种锁分配的方法、装置和计算设备

Also Published As

Publication number Publication date
CN101290588A (zh) 2008-10-22

Similar Documents

Publication Publication Date Title
CN101290588B (zh) 一种微嵌入式实时任务调度器及调度方法
CN101751289B (zh) 一种嵌入式实时操作系统的混合调度方法
CN100541393C (zh) 管理计算机系统中电源的装置和方法
CN101452404B (zh) 一种嵌入式操作系统的任务调度装置及方法
CN103559045B (zh) 一种硬件实时操作系统
CN100535879C (zh) 一种嵌入式实时系统中断处理装置及方法
KR101258502B1 (ko) 멀티코어 아키텍처 내의 리소스 관리
CN101556545B (zh) 一种实现进程支持的方法、装置和多线程系统
CN103473138A (zh) 基于线程池的多任务队列调度方法
CN102216902A (zh) 确定性执行和同步包括执行系统任务的多个处理核心的信息处理系统的方法
CN102073545A (zh) 操作系统中防止用户界面卡屏的进程调度方法及装置
CN103761182A (zh) 一种死锁检测方法及装置
CN103279331A (zh) Android系统多任务并发处理方法及装置
CN103473129A (zh) 线程数目可伸缩的多任务队列调度系统及其实现方法
WO2014110702A1 (zh) 协同并发式消息总线、主动构件组装模型及构件拆分方法
CN104598426A (zh) 用于异构多核处理器系统的任务调度方法
CN108196950A (zh) 一种应用于窄带物联网的实时化操作系统及其方法
CN101470635A (zh) 一种多虚拟处理器同步调度的方法及计算机
CN106062716A (zh) 在单任务系统中实现多任务的方法、装置及单任务系统
CN105224886A (zh) 一种移动终端安全隔离方法、装置及移动终端
CN103346902A (zh) 数据采集调度的方法及系统
CN109324885A (zh) 一种应用于ups单片机控制的最小操作系统及基于最小操作系统的多任务管理方法
CN104597820A (zh) 一种扩展单片机硬件定时器的方法
CN101976206A (zh) 一种中断处理方法和装置
CN101349975A (zh) 实现中断底半部机制的方法及嵌入式系统

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
C17 Cessation of patent right
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20100616

Termination date: 20140307