CN102750149B - 调度表的实现方法及系统 - Google Patents
调度表的实现方法及系统 Download PDFInfo
- Publication number
- CN102750149B CN102750149B CN201210195282.6A CN201210195282A CN102750149B CN 102750149 B CN102750149 B CN 102750149B CN 201210195282 A CN201210195282 A CN 201210195282A CN 102750149 B CN102750149 B CN 102750149B
- Authority
- CN
- China
- Prior art keywords
- dispatch
- dispatch list
- list
- target
- pointed
- 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.)
- Active - Reinstated
Links
Landscapes
- Computer And Data Communications (AREA)
- Storage Device Security (AREA)
Abstract
本发明涉及一种调度表的实现方法及系统,所述方法包括:提供一具有驱动计数器的时钟模块,所述驱动计数器上设有顺序时间链;将目标调度表加入到所述顺序时间链中以启动所述目标调度表;以及对所述顺序时间链中的处理点进行处理,本发明不仅可以降低调度表中断处理的频率,而且不需要遍历驱动计数器上的整个调度表的链表,提高了调度表的处理效率。
Description
技术领域
本发明涉及一种调度表的实现方法及系统。
背景技术
在描述本发明的背景技术之前,先对本发明中将要涉及到术语作如下解释:
●AUTOSAR(AutomotiveOpenSystemsArchitecture):汽车开放系统架构
●OSEKOS(OffeneSystemeundderenSchnittstellenfürdieElektronikinKraftfahrzeugen、OpenSystemsandtheirInterfacesfortheElectronicsinMotorVehicles):针对汽车电子的开发系统及其接口。
●STM(SystemTimerModule):系统时钟模块。
●调度表(ScheduleTable):每一个调度表都有一个持续时间,在运行期间,操作系统依次对调度表上的截止点进行处理。截止点(ExpiryPoint)上的处理包括激活任务(Task)和对某些任务设置事件(Event)。
●调度表驱动计数器(DrivenCounter):每一个驱动器都可以关联若干调度表。通过驱动计数器来驱动关联在其上的调度表的处理。
●顺序时间链:关联在驱动计数器上的调度表的链表。该链表上的调度表根据下一个需要处理的截止点的时间先后顺序依次排序。
●以下调度表中的四种点这里可以归纳为处理点。
●初始截止点:调度表的第一个截止点
●最后截止点:调度表的最后一个截止点
●起始点:调度表的进入运行态的启动时间点,表示了调度表时间轴上的起始点。
●终止点:调度表时间轴结束的终止点
在汽车电子应用领域,某些汽车电子的控制器系统需要使用到嵌入式实时操作系统软件,以提供多任务的应用软件运行环境。AUTOSAROS(AutomotiveOpenSystemsArchitectureOperatingSystem)定义了一套支持分布式的、功能驱动的汽车电子软件开发方法和电子控制单元上的软件架构标准化方案,以便应用于不同的汽车平台,提高软件复用,降低开发成本。AUTOSAROS为实时应用提供了所有基本服务,即中断处理、调度、系统时间和时钟同步、本地消息处理,以及错误检测机制等。AUTOSAROS是AUTOSAR体系架构中对嵌入式实时操作系统提出的规范,基于OSEKOS并对其在安全保护以及时间触发的网络同步等功能进行了扩展,更好的满足汽车电子应用领域的需求。
在AUTOSAROS规范(AUTOSARSpecificationofOperatingSystemVersion4.0,November30th,2009)中,提出了调度表的概念,为AUTOSAR操作系统提供了基于时间的调度方式。如图1所述,调度表的具体定义如下:
1)调度表的结构
●每一个调度表都至少有一个截止点。
●每一个截止点都应该包含一组(可以为空)需要被激活的任务。
●每一个截止点都应该包含一组(可以为空)需要被设置的事件。
●每一个截止点都应该包含距调度表开始的偏移。
2)调度表的截止点
●每一个截止点都应该激活至少一个任务或者设置一个事件。
●调度表中的每一个截止点都应该具有一个唯一的偏移值。
●第一个截止点的初始偏移量应该为0或者在驱动计数器的OsCounterMinCycle..OsCounterMaxAllowedValue范围之间。
●相邻截止点之间的延迟应该在OsCounterMinCycle..OsCounterMaxAllowedValue范围之间。
3)调度表的处理
●操作系统应该按照偏移量递增的顺序从初始截止点到最终截止点依次处理调度表中的每一个截止点。
●操作系统允许同时处理多个调度表。
●操作系统的调度表应该被一个驱动计数器驱动。
●在任一时刻操作系统至少应该能够处理驱动计数器上的一个调度表。
●操作系统应该在设置事件之前激活所有任务。
与任务一样,调度表也有各种运行的状态,如图2所示,其状态转换具体如下:
SCHEDULETABLE_STOPPED:停止状态,在操作系统启动时,调度表的默认初始状态,或者当调用停止调度表的处理功能函数后,调度表的状态被设置为停止状态,或者是调度表在处理完成后将转变为停止状态。
SCHEDULETABLE_RUNNING:运行状态,此时操作系统正在处理调度表上面的截止点。该状态在调用启动调度表的处理功能函数后,调度表将处于该状态;或者是处于next状态的调度表在当前调度表处理完成后将转换为运行状态。
SHCEDULETABLE_NEXT:next状态,该状态只有在调用切换当前处理调度表功能函数后才能将一个调度表的状态设置为该状态。处于next状态的调度表,在当前调度表处理完成后,将转换为运行态。
4)可循环调度表的处理
根据调度表是否循环处理,调度表分为重复处理(Repeating)调度表与单处理(SingleShot)调度表:
单处理:调度表按顺序依次处理每一个截止点,并在处理完后停止。
重复处理:调度表依次处理每一个截止点,并在处理完最后一个截止点后又返回处理第一个截止点。
●调度表应该被配置为单处理或重复处理。
●如果调度表是单处理模式的,操作系统应该在处理完最后一个截止点并经过最后的一个延迟(FinalDelay)后停止对该调度表的处理。
●对于重复执行的调度表,最后一个延迟应该在驱动计数器的OsCounterMinCycle..OsCounterMaxAllowedValue范围之间。
5)调度表处理的控制
●操作系统提供了StartScheduleTableAbs()服务
绝对时间启动调度表是指以一个绝对时间值(start)启动调度表,该调度表将在驱动计数器的时间值与该绝对时间值相等时启动该调度表的处理,即其初始截止点的处理时间为(start+InitialOffset)。
●操作系统提供了StartScheduleTableRel()服务
相对时间启动调度表是指以一个相对于驱动计数器当前时间的偏移值(offset)启动调度表的处理,启动后的调度表的初始截止点将在驱动计数器经过(offset+InitialOffset)时间后得到处理。
●操作系统提供了StopScheduleTable()服务
停止调度表的处理是指操作系统不再进一步的处理调度表上的截止点,即使调度表中还有没有处理的截止点。停止调度表的处理后,调度表将转为停止状态;如果重新启动调度表,系统也不会接着上次的截止点运行,而是从头开始运行。
●操作系统提供了NextScheduleTable()服务
切换当前处理调度表是指为当前正在处理的调度表(st_from)设置后续处理调度表(st_to)。该后续调度表必须与当前调度表由同一个驱动计数器驱动;该调度表将在当前调度表(当前周期)处理结束后开始处理。
●操作系统提供了GetScheduleTableStatus()服务
获取调度表的运行状态是根据指定的调度表ID,获取其当前的运行状态。
在现有的调度表实现方法中,驱动计数器是由系统时钟分频后所产生的周期性中断驱动的,每当产生一次中断,在中断处理程序中驱动计数器的计数值就会加一,并且在每一次的中断处理中都会遍历驱动计数器所关联的调度表,逐个比较判断是否需要处理该调度表。由于每一次计数都会产生中断,并且在中断处理中会遍历驱动计数器上所关联的全部调度表,这样的实现方法会大大地增加系统的负荷,降低系统的运行效率。
发明内容
本发明的目的在于提供一种调度表的实现方法及系统,能够降低调度表中断处理的频率,并且不需要遍历驱动计数器上的整个调度表的链表,从而提高了调度表的处理效率。
为解决上述问题,本发明提供一种调度表的实现方法,包括:
提供一具有驱动计数器的时钟模块,所述驱动计数器上设有顺序时间链;
将目标调度表加入到所述顺序时间链中以启动所述目标调度表;以及
对所述顺序时间链中的处理点进行处理。进一步的,在上述方法中,对所述顺序时间链中的处理点进行处理的步骤之前或之后还包括:
将所述目标调度表从所述顺序时间链中删除以停止所述目标调度表。
进一步的,在上述方法中,所述处理点包括初始点、截止点和终止点。
进一步的,在上述方法中,将目标调度表加入到所述顺序时间链中以启动所述目标调度表的步骤包括:
获取待启动的目标调度表;
根据启动服务方式计算所述目标调度表的到期时间;
根据所述到期时间将所述目标调度表插入所述顺序时间链;
将所述时钟模块的比较器寄存器的值设置为所述顺序时间链中的第一个调度表的到期时间,并将所述时钟模块的计数通道的控制寄存器设置为打开状态。
进一步的,在上述方法中,将所述目标调度表插入所述顺序时间链的步骤包括:
判断所述驱动计数器上的顺序时间链是否为空,
若为空,则修改所述顺序时间链中驱动计数器所指向的第一个和最后一个调度表为目标调度表,然后设置目标调度表所指向的前一个和下一个调度表为空;
若不为空,则判断目标调度表的到期时间是否要比顺序时间链中最后一个调度表的到期时间迟;
若比顺序时间链中最后一个调度表的到期时间迟,则修改目标调度表所指向的前一个调度表为驱动计数器所指向的最后一个调度表,并将驱动驱动计数器所指向的最后一个调度表设置为目标调度表,然后设置目标调度表所指向的下一个调度表为空;
若不比顺序时间链中最后一个调度表的到期时间迟,则判断目标调度表的到期时间是否不比驱动计数器所指向的第一个调度表的到期时间晚;
若不比驱动计数器所指向的第一个调度表的到期时间晚,则设置目标调度表所指向的下一个调度表为驱动计数器所指向的第一个调度表,并将目标调度表所指向的前一个调度表设置为空,然后将驱动计数器所指向的第一个调度表修改为目标调度表;
若比驱动计数器所指向的第一个调度表的到期时间晚,则判断目标调度表的到期时间是否不比顺序时间链中的第二个调度表的到期时间晚;
若不比顺序时间链中的第二个调度表的到期时间晚,则设置目标调度表所指向的下一个调度表为原顺序时间链中的第二个调度表,并设置目标调度表所指向的前一个调度表为原顺序时间链中的第一个调度表,并修改原顺序时间链中第二个调度表所指向的前一个调度表为目标调度表,以及修改顺序时间链中第一个调度表所指向的下一个调度表为目标调度表;
若比顺序时间链中的第二个调度表的到期时间晚,则将目标调度表依次与顺序时间链中的第三至最后一个调度表进行比较,直到将目标调度表插入到顺序时间链中合适的位置。
进一步的,在上述方法中,所述启动服务方式包括相对时间启动和绝对时间启动。
进一步的,在上述方法中,当所述启动服务方式为相对时间启动时,设置一相对启动时间,所述目标调度表的到期时间为所述时钟模块的驱动计数器的当前计数值与所述相对启动时间之和。
进一步的,在上述方法中,当所述启动服务方式为绝对时间启动时,设置一绝对启动时间,所述目标调度表的到期时间为所述绝对启动时间。
进一步的,在上述方法中,对所述顺序时间链中的处理点进行处理的步骤包括:
当所述驱动计数器的当前计数值与时钟模块的比较器寄存器的值相等时,将所述顺序时间链中的第一个调度表作为目标调度表,将所述目标调度表上的到期处理点进行处理并更新所顺序时间链;
判断更新后的顺序时间链的第一个调度表是否为空,
若为空,则将时钟模块的计数通道的控制寄存器设置为关闭状态;
若不为空,则判断所述驱动计数器的当前计数值与所述更新后的所述顺序时间链中第一个调度表的值是否相等;
若相等,则重复执行将所述顺序时间链中的第一个调度表作为目标调度表,将所述目标调度表上的到期处理点进行处理并更新所顺序时间链的步骤;
若不相等,则将时钟模块的比较器寄存器的值设置为更新后的顺序时间链中的第一个调度表的到期时间。
进一步的,在上述方法中,将所述顺序时间链中的第一个调度表作为目标调度表,对所述目标调度表上的到期处理点进行处理并更新所顺序时间链的步骤包括:
将所述目标调度表从所述顺序时间链中摘下;
判断所述调度表的状态是否为运行态,
若不是运行态,则对所述目标调度表的起始点进行处理;
若是运行态,则判断所述目标调度表的当前截止点的索引值是否与该目标调度表的截止点的个数相等,若相等,则对所述目标调度表的终止点进行处理;若不相等,则对所述目标调度表的当前截止点进行处理。
进一步的,在上述方法中,将所述目标调度表从所述顺序时间链中摘下的步骤包括:
若目标调度表是所述顺序时间链中唯一的调度表,则将所述驱动计数器指向第一个和最后一个调度表都设置为空;
若目标调度表是所述顺序时间链中第一个调度表但不是最后一个调度表,则将所述驱动计数器所指向的第一个调度表设置为目标调度表所指向的下一个调度表,并将目标调度表所指向的下一个调度表指向前一个调度表的指针设置为空;
若目标调度表不是所述顺序时间链中的第一个调度表但是最后一个调度表,则将目标调度表所指向的前一个调度表指向下一个调度表设置为空,并将所述驱动计数器所指向的最后一个调度表设置为目标调度表所指向的前一个调度表;
若目标调度表既不是所述顺序时间链中第一个调度表也不是最后一个调度表,则将目标调度表所指向的前一个调度表所指向的下一个调度表设置为目标调度表所指向的下一个调度表,并将目标调度表所指向的下一个调度表所指向的前一个调度表设置为目标调度表所指向的前一个调度表。
进一步的,在上述方法中,对当前截止点进行处理的步骤包括:
处理所述当前截止点,并将所述当前截止点的索引值加一;
判断目标调度表的当前截止点的索引值是否与所述目标调度表的截止点的个数相等,
若不相等,则设置所述目标调度表的到期时间为当前截止点的下一个截止点的到期时间,然后执行将所述目标调度表插入所述顺序时间链的步骤;
若相等,则判断所述目标调度表是否是可重复执行,
若可重复执行,则将所述当前截止点的索引值重置为零,并将所述目标调度表的到期时间设置第一个截止点的到期时间,然后执行将所述目标调度表插入所述顺序时间链的步骤;
若不可重复执行,则判断当前截止点是否也是终止点,若不是终止点,则将所述目标调度表的到期时间设置为终止点的到期时间,并执行将所述目标调度表插入所述顺序时间链的步骤;若是终止点,则执行所述对终止点进行处理的步骤。
进一步的,在上述方法中,对所述目标调度表的起始点进行处理的步骤包括:
将所述目标调度表的状态设置为运行态,判断当前截止点是否为起始点;
若是起始点,则执行对当前截止点进行处理的步骤;
若不是起始点,则将目标调度表的到期时间设置为当前截止点的到期时间,然后执行将所述目标调度表插入所述顺序时间链的步骤。
进一步的,在上述方法中,对所述目标调度表的终止点进行处理的步骤包括:
将所述目标调度表的状态设置为停止态,并将目标调度表的属性复位;
判断目标调度表的下一个调度表是否为空,若为空,则从所述将顺序时间链中的第一个调度表上的到期处理点进行处理并更新所述驱动计数器上的顺序时间链的步骤返回;若不为空,则修改所述目标调度表的下一个调度表为新的第一个调度表,并重复所述对所述目标调度表的起始点进行处理的步骤。
进一步的,在上述方法中,将所述目标调度表从所述顺序时间链中删除以停止所述目标调度表的步骤包括:
获取待停止的目标调度表;
将所述目标调度表的状态设置为停止状态,并将所述目标调度表的各种属性复位;
将所述目标调度表从所述顺序时间链中摘下;
判断当前顺序时间链是否为空,若是,则将所述时钟模块的计数通道的控制寄存器设置为关闭状态,若否,则将所述时钟模块的比较器寄存器的值设置为所述顺序时间链中的第一个调度表的到期时间。
根据本发明的另一面,提供一种调度表的实现系统,包括:
时钟模块,用于提供具有顺序时间链的驱动计数器;
启动模块,用于将目标调度表加入所述顺序时间链中以启动所述目标调度表;以及
处理模块,用于对所述顺序时间链中的处理点进行处理。
进一步的,在上述系统中,还包括停止模块,用于将所述目标调度表从所述顺序时间链中删除以停止所述目标调度表。
进一步的,在上述系统中,所述处理点包括初始点、截止点和终止点。
进一步的,在上述系统中,所述启动模块包括:
获取单元,用于获取待启动的目标调度表;
时间单元,用于根据启动服务方式计算所述目标调度表的到期时间;
插入单元,用于根据所述到期时间将所述目标调度表插入所述顺序时间链;
时钟模块的比较器寄存器,用于记录所述顺序时间链中的第一个调度表的到期时间;
时钟模块的计数通道的控制寄存器,用于打开或关闭时钟模块的计数通道。
进一步的,在上述系统中,,所述插入单元,用于判断所述驱动计数器上的顺序时间链是否为空,
若为空,则修改所述顺序时间链中驱动计数器所指向的第一个和最后一个调度表为目标调度表,然后设置目标调度表所指向的前一个和下一个调度表为空;
若不为空,则判断目标调度表的到期时间是否要比顺序时间链中最后一个调度表的到期时间迟;
若比顺序时间链中最后一个调度表的到期时间迟,则修改目标调度表所指向的前一个调度表为驱动计数器所指向的最后一个调度表,并将驱动驱动计数器所指向的最后一个调度表设置为目标调度表,然后设置目标调度表所指向的下一个调度表为空;
若不比顺序时间链中最后一个调度表的到期时间迟,则判断目标调度表的到期时间是否不比驱动计数器所指向的第一个调度表的到期时间晚;
若不比驱动计数器所指向的第一个调度表的到期时间晚,则设置目标调度表所指向的下一个调度表为驱动计数器所指向的第一个调度表,并将目标调度表所指向的前一个调度表设置为空,然后将驱动计数器所指向的第一个调度表修改为目标调度表;
若比驱动计数器所指向的第一个调度表的到期时间晚,则判断目标调度表的到期时间是否不比顺序时间链中的第二个调度表的到期时间晚;
若不比顺序时间链中的第二个调度表的到期时间晚,则设置目标调度表所指向的下一个调度表为原顺序时间链中的第二个调度表,并设置目标调度表所指向的前一个调度表为原顺序时间链中的第一个调度表,并修改原顺序时间链中第二个调度表所指向的前一个调度表为目标调度表,以及修改顺序时间链中第一个调度表所指向的下一个调度表为目标调度表;
若比顺序时间链中的第二个调度表的到期时间晚,则将目标调度表依次与顺序时间链中的第三至最后一个调度表进行比较,直到将目标调度表插入到顺序时间链中合适的位置。
进一步的,在上述系统中,所述处理模块包括:
处理单元,用于当所述驱动计数器的当前计数值与时钟模块的比较器寄存器的值相等时,将所述顺序时间链中的第一个调度表作为目标调度表,将所述目标调度表上的到期处理点进行处理并更新所顺序时间链;
判断单元,用于判断更新后的顺序时间链的第一个调度表是否为空,若为空,则将时钟模块的计数通道的控制寄存器设置为关闭状态;若不为空,则判断所述驱动计数器的当前计数值与所述更新后的所述顺序时间链中第一个调度表的值是否相等,若相等,则通知所述处理单元进行处理;若不相等,则将时钟模块的比较器寄存器的值设置为更新后的顺序时间链中的第一个调度表的到期时间。
进一步的,在上述系统中,所述处理单元包括:
摘下子单元,用于将所述目标调度表从所述顺序时间链中摘下;
运行态子单元,用于判断所述目标调度表的状态是否为运行态;
起始点处理子单元,用于当所述运行态子单元判断为不是运行态时,对所述目标调度表的起始点进行处理;
截止点个数子单元,用于当所述运行态子单元判断为是运行态时,判断目标调度表的当前截止点的索引值是否与该目标调度表的截止点的个数相等;
终止点处理子单元,用于所述当截止点个数子单元判断为相等时,对所述目标调度表的终止点进行处理;
截止点处理子单元,用于所述当截止点个数子单元判断为不相等时,对所述目标调度表的当前截止点进行处理。
进一步的,在上述系统中,所述摘下子单元,用于若目标调度表是所述顺序时间链中唯一的调度表,则将所述驱动计数器指向第一个和最后一个调度表都设置为空;若目标调度表是所述顺序时间链中第一个调度表并且不是最后一个调度表,则将所述驱动计数器所指向的第一个调度表设置为目标调度表所指向的下一个调度表,并将目标调度表所指向的下一个调度表指向前一个调度表的指针设置为空;若目标调度表不是所述顺序时间链中的第一个调度表并且是最后一个调度表,则将目标调度表所指向的前一个调度表指向下一个调度表设置为空,并将所述驱动计数器所指向的最后一个调度表设置为目标调度表所指向的前一个调度表;若目标调度表既不是所述顺序时间链中第一个调度表也不是最后一个调度表,则将目标调度表所指向的前一个调度表所指向的下一个调度表设置为目标调度表所指向的下一个调度表,并将目标调度表所指向的下一个调度表所指向的前一个调度表设置为目标调度表所指向的前一个调度表。
进一步的,在上述系统中,所述截止点处理子单元,用于处理所述当前截止点,并将所述当前截止点的索引值加一;判断目标调度表的当前截止点的索引值是否与所述目标调度表的截止点的个数相等,若不相等,则设置所述目标调度表的到期时间为当前截止点的下一个截止点的到期时间,然后通知所述插入单元进行处理;若相等,则判断所述目标调度表是否是可重复执行,若可重复执行,则将所述当前截止点的索引值重置为零,并将所述目标调度表的到期时间设置第一个截止点的到期时间,然后通知所述插入单元进行处理;若不可重复执行,则判断当前截止点是否也是终止点,若不是终止点,则将所述目标调度表的到期时间设置为终止点的到期时间,并通知所述插入单元进行处理;若是终止点,则通知所述终止点处理子单元进行处理。
进一步的,在上述系统中,所述起始点处理子单元,用于将所述目标调度表的状态设置为运行态,判断当前截止点是否为起始点,若是起始点,则通知所述截止点处理子单元进行处理;
若不是起始点,则将目标调度表的到期时间设置为当前截止点的到期时间,然后通知所述插入单元进行处理。
进一步的,在上述系统中,所述终止点处理子单元,用于将所述目标调度表的状态设置为停止态,并将目标调度表的属性复位;判断目标调度表的下一个调度表是否为空,若为空,则通知所述处理单元停止处理;若不为空,则修改所述目标调度表的下一个调度表为新的第一个调度表,并通知所述起始点处理子单元进行处理。
进一步的,在上述系统中,停止模块,用于获取待停止的目标调度表;将所述目标调度表的状态设置为停止状态,并将所述目标调度表的各种属性复位;通知所述摘下子单元进行处理;判断当前顺序时间链是否为空,若是,则将所述时钟模块的计数通道的控制寄存器设置为关闭状态,若否,则将所述时钟模块的比较器寄存器的值设置为所述顺序时间链中的第一个调度表的到期时间。
与现有技术相比,本发明通过将目标调度表加入时钟模块的驱动计数器上的顺序时间链的适当位置以启动所述目标调度表,并对所述顺序时间链中的处理点进行处理,可以利用调度表所运行的硬件平台如MPC5634平台所提供的系统时钟模块(STM)来实现调度表的驱动计数器的功能,并以顺序时间链的方式将关联在该驱动计数器上的调度表按照下一个截止点(ExpiryPoint)处理时间的先后顺序排列起来,不仅可以降低调度表中断处理的频率,而且不需要遍历驱动计数器上的整个调度表的链表,提高了调度表的处理效率。
附图说明
图1是本发明一实施例的调度表示意图;
图2是本发明一实施例的调度表的状态转换示意图;
图3是本发明一实施例的调度表的实现方法流程图;
图4是本发明一实施例的调度表的数据结构示意图;
图5是本发明一实施例的驱动计数器上的顺序时间链的数据结构示意图;
图6是本发明一实施例的系统时钟模块结构示意图;
图7是本发明一实施例的步骤S1的流程图;
图8是本发明一实施例的步骤S13的流程图;
图9是本发明一实施例的步骤S2的流程图;
图10是本发明一实施例的步骤S22的流程图;
图11是本发明一实施例的步骤S22的具体流程图;
图12是本发明一实施例的步骤S221的流程图;
图13是本发明一实施例的步骤S3的流程图;
图14是本发明一实施例的调度表的实现系统模块示意图。
具体实施方式
为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。
如图3所示,本发明提供一种调度表的实现方法如嵌入式操作系统调度表的实现方法,所述方法包括:
步骤S1,将目标调度表加入时钟模块的驱动计数器上的顺序时间链的适当位置以启动所述目标调度表。
其中,为了与其它调度表区分,这里将当前要处理的调度表称为目标调度表,调度表(ScheduleTable)是AUTOSAR在OSEKOS(OpenSystemsandtheirInterfacesfortheElectronicsinMotorVehicles)基础上引入的一种调度策略,功能上与OSEKTime中的Dispatch表相似,为AUTOSAR操作系统提供了基于时间的调度方式。
调度表的数据结构主要包括了相关待处理的截止点的信息、调度表的特征属性信息以及用于维护顺序时间链的指针,如图4所示,在调度表的数据结构中主要需要注意与计数值相关的属性,这些属性对于调整系统时钟模块(STM),维护驱动计数器上相关联的调度表的顺序时间链都有重要作用:
(1)expiryValue:下一个处理点到期(处理)时间。当驱动调度表的驱动计数器的时间值与该到期时间值相同时,将触发处理点的处理。在处理点处理完成后,更新该值为下一个处理点的触发时间。
(2)curExpiryIndex:调度表当前处理截止点索引。在调度表截止点被触发时,操作系统根据该索引值,从调度表配置结构中的截止点队列中找到当前应该被处理的截止点,并进行相应的处理。该值的有效范围为0-exp_point_cnt,当索引值与截止点个数减一(exp_point_cnt-1)相等时则表明当前截止点是最后一个截止点。
(3)next:驱动计数器上的调度表的顺序时间链中的指向下一个调度表指针。
(4)schedNext:当前调度表处理结束后(处于STOPPED状态),下一个要处理的调度表指针,该元素仅在调用了切换处理调度表时才不为空,否则为空。
(5)prev:驱动计数器上的调度表的顺序时间链中的指向前一个调度表的指针。
(6)status:记录当前调度表的状态。
(7)duration:调度表持续时间(周期),持续时间是调度表从0时刻到下一个周期开始的时间间隔。注意,调度表的持续时间并不等于最后一个截止点的触发时间,而是在最后一个截止点与调度表结束之前存在一个被称为FinalDelay的时间间隔,duration的取值范围由用户指定,但如果调度表采用了同步方式,则其值应该与同步驱动计数器的周期值相同。
(8)repeated:调度表重复方式,该值配置为bool型(或者整型),TRUE表示调度表重复运行(调度),FALSE表示调度表是单次运行(调度)。
(9)expire_point_cnt:调度表中截止点的数目。
(10)finalDelay:调度表最后一个截止点到调度表结束时的时间间隔。
(11)offset:截止点的偏移量。为了方便调度表的处理,将该值设置为两个截止点的时间间隔,也即截止点的延迟,特别的,对于初始截止点(第一个截止点),该值等于其偏移量。
在驱动计数器的数据结构中主要包括了用来维护关联在驱动计数器上的调度表的顺序时间链的头指针。
驱动计数器依赖于底层系统时钟模块和相关的计数通道,如图4所示,该数据结构的主要作用是用于动态维护被启动的调度表的顺序时间链:
(1)next_counter:关联在驱动计数器上的调度表的顺序时间链的头指针,其指向顺序时间链中的第一个调度表。
(2)prev_counter:指向顺序时间链中的最后一个调度表的指针。
(3)Maxallowedvalue:Counter允许的最大计数值,当驱动计数器的时间值到达最大计数值时,计数值归零。
如图5所示,驱动计数器上的顺序时间链是通过驱动计数器的数据结构上的next_counter和prev_counter指针以及调度表结构中的next和prev指针链接起来的,其中链表中调度表是按照expiryValue的值从小到大的顺序组织起来的,并且在链表中头部的调度表的prev指针为空,表示该调度表位于链表的头部,位于链表尾部的调度表的next指针为空,表示该调度表位于链表的尾部。
所有调度表都由一个静态数组scheduleTables来保存,scheduleTables静态数组记录了系统中所有的调度表的数组,数组中的每一个元素是一个具体的可以被操作系统处理的调度表,全局变量由操作系统根据用户配置的调度表数目初始化。
整个驱动计数器都是基于系统时钟模块来完成的,如图6所示,MPC5634的系统时钟模块有多个计数通道,图6中仅示意性只画出了一个计数通道,系统时钟模块统一用系统时钟的1-256倍分频做时钟源,系统时钟模块中的驱动计数器是以递增的方式计数,每个有自己的比较寄存器,当驱动计数器计数到比较寄存器的值时,可以产生对应的中断,而且比较寄存器的值是可以在系统时钟模块的工作过程中动态修改的。图6中的中断寄存器用于标记该计数通道是否产生中断,而控制寄存器用于存储计数通道1是否打开的状态,在实现中选用系统时钟模块的一个通道作为计数通道,在系统运行过程中,只有当前系统已经有被启动的调度表时计数通道才是打开的。
启动调度表是通过服务StatusTypeStartScheduleTableRel(ScheduleTableTypestb,TickTypeoffset)或服务StatusTypeStartScheduleTableAbs(ScheduleTableTypestb,TickTypestart)来完成的,具体的,当启动一个调度表时,需要判断当前系统中有没有已经被启动的调度表,如果有则需要打开驱动计数器所对应的系统时钟模块的计数通道,计算调度表到期时间,并根据该到期时间的大小将调度表插入到驱动计数器上的顺序时间链中,如果到期时间比顺序时间链中的所有其它调度表到期时间值都小,则将该调度表放在顺序时间链的头部,并将系统时钟模块的计数通道的比较寄存器设置为该调度表的到期时间。
优选的,可用变量drivenCtr表示驱动计数器的对象,如图7所示,所述步骤S1具体包括:
步骤S11,获取待启动的目标调度表,具体的,可根据传入函数的目标调度表的IDstb,在调度表的静态数组scheduleTables中找到对应的目标调度表,并得到指向该目标调度表的指针。
步骤S12,根据启动服务方式计算所述目标调度表的到期时间,具体的,所述启动服务方式包括相对时间启动和绝对时间启动,根据不同的启动服务方式计算相应目标调度表的启动时间,当所述启动服务方式为相对时间启动时,即为StartScheduleTableRel()启动服务方式时,进行相对时间启动,设置一相对启动时间,所述目标调度表的到期时间值为所述时钟模块的驱动计数器的当前计数值与所述相对启动时间之和,即通过读取系统时钟模块的计数寄存器(STM_CNT)来获得当前驱动计数器的计数值,将相对启动时间的偏移量加到当前的计数值上可以得到启动该目标调度表的时间,接下来设置目标调度表的expiryValue为启动该目标调度表的时间;当所述启动服务方式为绝对时间启动时,即StartScheduleTableAbs()启动服务方式时,设置一绝对启动时间,所述目标调度表的到期时间为所述绝对启动时间,即进行绝对时间启动,直接将目标调度表的expiryValue设置为传入给函数的目标调度表的启动时间;
步骤S13,根据所述到期时间值将所述目标调度表插入所述顺序时间链,具体的,本步骤中调用timeLinkInsert()函数,并将目标调度表的指针作为参数传入,经过该函数的处理,时间链上的调度表都按照到期时间的先后顺序组织;
其中,本发明所公开的调度表的实现方法可以基于硬件平台MPC5634(飞思卡尔Freescale的32位单片机)来完成的,以满足AUTOSAR规范对于汽车电子嵌入式操作系统的特殊功能要求,MPC5634是一种用于汽车电子领域的嵌入式微处理器,通过利用硬件平台MPC5634所提供的系统时钟模块(systemtimermodule,简称STM)来实现调度表的驱动计数器的功能,从而驱动调度表的运行,并且通过顺序时间链的方式将关联在该驱动计数器上的调度表按照下一个截止点(ExpiryPoint)到期时间的先后顺序排列起来,因此下一个即将被处理的截止点(ExpiryPoint)一定是关联在驱动计数器上的第一个调度表上的截止点,当启动、停止或处理到时的调度表时,都需要对驱动计数器上的顺序时间链进行重新调整,从而维持顺序时间链中待处理调度表的先后顺序,即每当启动一个调度表或者处理完当前的截止点后都需要对链表上的调度表重新按下一个截止点(ExpiryPoint)处理时间的先后顺序进行排序,同时在后续步骤中将系统时钟模块(STM)的计数通道的比较寄存器的值设置为下一个即将要被处理的截止点(ExpiryPoint)的计数值,以便当系统时钟模块(STM)的计数通道的驱动计数器的值与其比较寄存器中的值相等时则产生中断触发对下一个截止点的处理;
较佳的,当在启动目标调度表或在对目标调度表的中断处理过程中,都会出现将目标调度表插入到顺序时间链合适位置的情况,因此在这里通过函数timeLinkInsert(OsScheduleTableRefstbPtr)来将stbPtr所指向的目标调度表插入到顺序时间链的合适位置实现步骤S13,其中变量stbPtr为指向需要被插入到顺序时间链中的目标调度表的指针,变量drivenCtr为驱动计数器的对象,如图8所示,所述步骤S13具体包括:
步骤S131,判断所述驱动计数器上的顺序时间链是否为空,若为空,则执行步骤S132,若不为空,则执行步骤S133;
步骤S132,将所述顺序时间链中驱动计数器所指向的第一个和最后一个调度表修改为目标调度表,然后设置目标调度表所指向的前一个和下一个调度表为空,即通过修改驱动计数器所指向的第一个和最后一个调度表为目标调度表来将目标调度表插入到顺序时间链中,然后设置目标调度表所指向的前一个和下一个调度表为空,表明顺序时间链中只有这一个目标调度表;
步骤S133,判断目标调度表的到期时间是否要比顺序时间链中最后一个调度表的到期时间迟,若比顺序时间链中最后一个调度表的到期时间迟,则执行步骤S134,若不比顺序时间链中最后一个调度表的到期时间迟,则执行步骤S135;
步骤S134,修改目标调度表所指向的前一个调度表为驱动计数器所指向的最后一个调度表,并将驱动计数器所指向的最后一个调度表设置为目标调度表,然后设置目标调度表所指向的下一个调度表为空,这样就将目标调度表插入到链的末尾;
步骤S135,判断目标调度表的到期时间是否不比驱动计数器所指向的第一个调度表的到期时间晚,若不比驱动计数器所指向的第一个调度表的到期时间晚,则执行步骤S136,若比驱动计数器所指向的第一个调度表的到期时间晚,则执行步骤S137;
步骤S136,设置目标调度表所指向的下一个调度表为驱动计数器所指向的第一个调度表,并将目标调度表所指向的前一个调度表设置为空,然后将驱动计数器所指向的第一个调度表修改为目标调度表,这样就将目标调度表插在了链的头部;
步骤S137,判断目标调度表的到期时间是否不比顺序时间链中的第二个调度表的到期时间晚,若不比顺序时间链中的第二个调度表的到期时间晚,则执行步骤S138,若比顺序时间链中的第二个调度表的到期时间晚,则执行步骤S139;
步骤S138,设置目标调度表所指向的下一个调度表为原顺序时间链中的第二个调度表,并设置目标调度表所指向的前一个调度表为原顺序时间链中的第一个调度表,并修改原顺序时间链中第二个调度表所指向的前一个调度表为目标调度表,以及修改顺序时间链中第一个调度表所指向的下一个调度表为目标调度表,这样就将目标调度表插入到顺序时间链中合适的位置;
步骤S139,将目标调度表依次与顺序时间链中的第三至最后一个调度表进行比较,直到将目标调度表插入到顺序时间链中合适的位置,即类似于上述的处理流程依次与顺序时间链中的调度表进行比较,直到将目标调度表插入到顺序时间链中合适的位置。
步骤S14,将所述时钟模块的比较器寄存器的值设置为所述顺序时间链中的第一个调度表的到期时间,并将所述时钟模块的计数通道的控制寄存器设置为打开状态以打开所述时钟模块的计数通道,具体的,由于插入了新启动的调度表,所以链上即将被处理的调度表的到期时间可能改变,因此这里将系统时钟模块的计数通道的比较寄存器(CMPn)设置为顺序时间链中第一个调度表的到期时间值,并设置计数通道的控制寄存器(CDRn)的CEN位为1,从而开启该计数通道。
步骤S2,对所述顺序时间链中的处理点进行处理。
具体的,整个调度表的工作都是由驱动计数器底层的系统时钟模块所产生的计数中断来驱动的,所以计数中断的处理是整个调度表机制的核心,它相当于调度表机制的发动机;
当系统运行时,系统时钟模块的驱动计数器的计数值会不断递增,当驱动计数器的计数值与计数通道的比较寄存器所设置的值相等时则产生计数中断。这就表明当前系统中有某个调度表到时需要处理,在计数中断的处理过程中,首先需要从驱动计数器上所关联的顺序时间链中获得头部的调度表,因为该调度表位于顺序时间链的头部,因此它一定是该计数中断中需要被处理的调度表;
在处理调度表的过程中主要包括以下几种情形:
(1)调度表起始点的处理有两种情况:
起始点不是调度表的初始截止点,在这种情况下,需要置调度表的状态为运行态,并预置初始截止点的处理时间。
起始点也是调度表的初始截止点,在这种情况下,需要置调度表的状态为运行态,并对初始截止点进行相应的处理。
(2)调度表截止点的处理
对当前截止点进行处理,如果当前截止点是最后一个截止点则判断调度表是否是可重复执行的。如果是则直接预置该调度表的初始截止点的处理时间。否则进行终止点的判断及处理。如果当前截止点也是终止点,那么直接进行终止点的处理,否则预置终止点的处理时间。如果当前截止点不是最后一个截止点则预置下一个截止点的处理时间。
(3)调度表终止点的处理
当处理调度表终止点的时候,当前调度表肯定是单次运行模式的,因为可重复执行的调度表在处理完最后一个截止点的时候就直接预置了初始截止点的处理时间,不需要再处理终止点。而单次运行的调度表需要在终止点处停止调度表。
调度表的终止点有两种情况:终止点不是调度表的最后截止点和终止点也是调度表的最后截止点。在处理终止点的时候需要将当前调度表的状态置为停止态,并将该调度表从驱动计数器上的顺序时间链的头部摘下。然后判断是否需要进行调度表的切换处理。如果需要则对目标调度表的起始点进行相应的处理。
对于以上各种情况,如果在处理完当前处理点后预置了目标调度表下一个处理点的时间,那么则需要根据顺序时间链中调度表下一个处理点的时间先后顺序将目标调度表插入到顺序时间链中的适当位置。
由于可能存在在某一时刻有多个调度表需要处理的情况,因此在处理完当前调度表后,还需要重新从驱动计数器上的顺序时间链中获取头部调度表,再判断该调度表是否到时需要处理。如果发现该调度表不需要处理则该次计数中断的处理已经完成。因为顺序时间链中该调度表之后的调度表肯定未到时。
较佳的,步骤S2涉及调度表中断处理的算法操作,当系统时钟模块的计数值与计数通道的比较寄存器中的值相等的时候则会产生中断,表明当前系统有调度表到期需要处理,可设置变量stbPtr指向目标调度表的指针,设置变量drivenCtr驱动计数器的对象,设置变量expiryValue当前系统时钟模块驱动计数器的计数值,如图9所示,步骤S2具体包括:
步骤S21,首先获得驱动计数器所指向的第一个调度表的指针stbPtr,并得到其到期时间expiryValue,此时的调度表到期时间即为系统时钟模块驱动计数器的当前计数值;
步骤S22,当所述驱动计数器的当前计数值与时钟模块的比较器寄存器的值相等时,将所述顺序时间链中的第一个调度表作为目标调度表,将所述目标调度表上的到期处理点进行处理并更新所顺序时间链,具体的,当目标调度表到期时,需要对其进行相应的处理,这是通过调用函数os_stb_process(ScheduleTableTypestbPtr),并传入目标调度表的指针stbPtr来实现的,所述处理点包括初始点、截止点和终止点,因此整个调度表的处理包括初始点的处理、截止点的处理和终止点的处理几种情况,在实际情况中,这几种点的处理可能发生重合,可以设置变量stbPtr作为指向目标调度表的指针,此时所指向的目标调度表实际上是顺序时间链中的首个调度表,优选的,如图10和11所示步骤S22可具体包括:
步骤S221,将所述目标调度表从所述顺序时间链中摘下,具体的,在停止调度表和在对调度表的中断处理过程中,都会出现将目标调度表从顺序时间链中删除的情况,这里可调用timeLinkDelete(OsScheduleTableRefstbPtr)函数将stbPtr所指向的目标调度表从顺序时间链中摘下,可设置变量stbPtr作为指向需要从顺序时间链中删除的目标调度表的指针,设置drivenCtr作为驱动计数器的对象,较佳的,如图10和11所示,步骤S221具体包括:
步骤S2211,若目标调度表是所述顺序时间链中唯一的调度表,此时目标调度表既是驱动计数器所指向的第一个也是最后一个调度表,则将所述驱动计数器指向第一个和最后一个调度表都设置为空;
步骤S2212,若目标调度表是所述顺序时间链中第一个调度表并且不是最后一个调度表,则将所述驱动计数器所指向的第一个调度表设置为目标调度表所指向的下一个调度表,并将目标调度表所指向的下一个调度表指向前一个调度表的指针设置为空;
步骤S2213,若目标调度表不是所述顺序时间链中的第一个调度表并且是最后一个调度表,则将目标调度表所指向的前一个调度表指向下一个调度表设置为空,并将所述驱动计数器所指向的最后一个调度表设置为目标调度表所指向的前一个调度表;
步骤S2214,若目标调度表既不是所述顺序时间链中第一个调度表也不是最后一个调度表,则将目标调度表所指向的前一个调度表所指向的下一个调度表设置为目标调度表所指向的下一个调度表,并将目标调度表所指向的下一个调度表所指向的前一个调度表设置为目标调度表所指向的前一个调度表。
优选的,如图12所示,步骤S221具体包括:
步骤S51,判断目标调度表是否是所述顺序时间链中的第一个调度表,若是所述顺序时间链中的第一个调度表,则执行步骤S52,若不是所述顺序时间链中的第一个调度表,则执行步骤S53;
步骤S52,修改所述驱动计数器所指向的第一个调度表为所述目标调度表所指向的下一个调度表;
步骤S54,判断目标调度表所指向的下一调度表是否为空,若为空,则执行步骤S55,若为空,则执行步骤S56;
步骤S55,将所述驱动计数器指向的最后一个调度表设置为空,并结束;
步骤S56,将所述目标调度表所指向的下一个调度表所指向的前一个调度表设置为空,并结束;
步骤S53,将所述目标调度表所指向的前一个调度表所指向的下一个调度表设置为目标调度表所指向的下一个调度表;
步骤S57,判断所述目标调度表所指向的下一个调度表是否为空,若为空,则执行步骤S58,若不为空,则执行步骤S59;
步骤S58,将驱动计数器所指向的最后一个调度表设置为目标调度表所指向的前一个调度表,并结束;
步骤S59,将目标调度表所指向的前一个调度表所指向的下一个调度表设置为目标调度表所指向的下一个调度表,并结束。
步骤S222,判断所述目标调度表的状态是否为运行态,若不是运行态,则执行步骤S223,若是运行态,则执行步骤S224;
步骤S223,对所述目标调度表的起始点进行处理,即如果不是运行态,则表明目标调度表是处于停止态,这就表示该目标调度表的起始点到期,需要处理该起始点;
较佳的,如图10和图11所示所述步骤S223包括:
步骤S2231,将所述目标调度表的状态设置为运行态,
步骤S2232,判断当前截止点是否为起始点,具体可根据目标调度表初始截止点的偏移量进行判断,若是起始点,则执行步骤S226,即如果偏移量为0,则表明当前起始点也是初始截止点,因此执行S226,转为对截止点的处理,若不是起始点,则执行步骤S2233;
步骤S2233,将目标调度表的到期时间设置为当前截止点的到期时间,然后执行步骤S13将所述目标调度表插入所述顺序时间链,即设置目标调度表的到期时间为当前计数值加上初始截止点的偏移量,然后执行S13。
步骤S224,判断目标调度表的当前截止点的索引值是否与该目标调度表的截止点的个数相等,具体的,如果目标调度表是运行态,则判断当前调度表的截止点索引是否与截止点的个数(exp_point_cnt)相等,若相等,则执行步骤S225,若不相等,则执行步骤S226;
步骤S225,对所述目标调度表的终止点进行处理,即目标调度表的当前截止点的索引值与该目标调度表的截止点的个数如果相等,则表明当前截止点是终止点,则对终止点进行处理;
较佳的,如图11所示,步骤S225包括:
步骤S2251,将所述目标调度表的状态设置为停止态,并将目标调度表的属性复位;
步骤S2252,判断目标调度表的下一个调度表是否为空,即判断目标调度表的sched_next是否为空,若为空,则执行步骤S2253,若不为空,则步骤S2254;
步骤S2253,从所述步骤S22返回,即如果目标调度表的下一个调度表为空,则直接从os_stb_process函数返回。
步骤S2254,将所述目标调度表的下一个调度表修改为新的第一个调度表,并重复所述步骤S223,即下一个调度表不为空,则表明目标调度表需要切换到sched_next所指向的调度表,此时的目标调度表是sched_next所指向的调度表,前一个调度表已经停止运行,接下来重复所述步骤S223重新处理被切换到的目标调度表的起始点。
步骤S226,对所述目标调度表的当前截止点进行处理,即如果当前调度表的截止点的索引与截止点的个数(exp_point_cnt)不相等,则表明当前处理的是截止点。
较佳的,如图11所示,步骤S226包括:
步骤S2261,处理所述当前截止点,并将所述当前截止点的索引值加一;
步骤S2262,判断目标调度表的当前截止点的索引值是否与所述调度表的截止点的个数(exp_point_cnt)相等,若不相等,则执行步骤S2263,若相等,则执行步骤S2264;
步骤S2263,设置所述目标调度表的到期时间为当前截止点的下一个截止点的到期时间,然后执行步骤S13,即如果目标调度表的当前截止点的索引值与所述调度表的截止点的个数(exp_point_cnt)不相等,则表明被处理的截止点不是最后一个截止点,那么设置目标调度表的到期时间为当前计数值加上下一个截止点的偏移量,然后执行步骤S13;
步骤S2264,否则表明截止点是最后一个截止点,判断所述目标调度表是否是可重复执行,若可重复执行,则执行步骤S2265,若不可重复执行,则执行步骤S2266;
步骤S2265,将所述当前截止点的索引值重置为零,并将所述目标调度表的到期时间设置第一个截止点的到期时间,然后执行步骤S13,即如果可重复执行,则将目标调度表的截止点的索引重置为0,并将到期时间设置为当前计数值加上最后一个截止点到调度表结束时的时间间隔和初始截止点的偏移量,然后执行步骤S13;
步骤S2266,如果目标调度表不是可重复执行的,判断当前截止点是否也是终止点,若不是终止点,则执行步骤S2267,将所述目标调度表的到期时间设置为终止点的到期时间,并执行步骤S13,即将目标调度表的到期时间设置为当前计数值加上最后一个截止点到调度表结束时的时间间隔,并执行步骤S13;若是终止点,则执行步骤S225对终止点进行处理。
步骤S23,判断更新后的顺序时间链的第一个调度表是否为空,若为空,则执行步骤S24,若不为空,则执行步骤S25,即再次获得驱动计数器所指向的第一个调度表的指针stdPtr,并判断该指针是否为空;
步骤S24,将时钟模块的计数通道的控制寄存器设置为关闭状态,即如果更新后的顺序时间链的第一个调度表为空,则表明当前驱动计数器上已经没有需要被处理的调度表,因此这时设置系统时钟模块的计数通道的控制寄存器(CCRn)的CEN位为0,关闭该计数通道;
步骤S25,判断所述驱动计数器的当前计数值与所述更新后的所述顺序时间链中第一个调度表的值是否相等,即判断stbPtr所指向的目标调度表的到期时间是否与expiryValue相等,若相等,则执行步骤S22,若不相等,则执行步骤S26;
重复执行步骤S22,将所述顺序时间链中的第一个调度表作为目标调度表,将所述目标调度表上的到期处理点进行处理并更新所顺序时间链的步骤,即如果所述驱动计数器的当前计数值与所述更新后的所述顺序时间链中第一个调度表的值相等,则表明该调度表也到期需要被处理,此时重复步骤S22;
步骤S26,将时钟模块的比较器寄存器的值设置为更新后的顺序时间链中的第一个调度表的到期时间,具体的,当stbPtr所指向的目标调度表的到期时间与expiryValue不相等的时候,则表明在本次中断处理过程中已经处理完所有到期的调度表,此时设置系统时钟模块的计数通道的比较寄存器(CMPn)为驱动计数器所指向的第一个调度表的到期时间,也即下一次即将被处理的调度表的到期时间。
优选的,步骤S2之前或之后还包括:
步骤S3,将所述目标调度表从所述顺序时间链中删除以停止所述目标调度表,具体的,当停止一个目标调度表时,需要将该目标调度表的状态设置为停止态,并需要判断这个调度表是否是位于驱动计数器上的顺序时间链的头部,如果该调度表是位于顺序时间链的头部,则需要重新将系统时钟模块的计数通道的比较寄存器设置为该调度表所指向的下一个调度表的到期时间,然后将该调度表从驱动计数器上的顺序时间链中摘下来。
优选的,停止调度表是通过服务StatusTypeStopScheduleTable(ScheduleTableTypestbPtr)来实现,可以设置变量stbPtr作为指向目标调度表的指针,设置drivenCtr作为驱动计数器的对象如图7所示,所述步骤S3具体包括:
步骤S31,获取待停止的目标调度表,具体的,可首先根据传入函数的目标调度表的IDstb,在调度表的静态数组scheduleTables中找到对应的目标调度表,并得到指向该目标调度表的指针;
步骤S32,将所述目标调度表的状态设置为停止状态,并将所述目标调度表的各种属性复位;
步骤S221,将所述目标调度表从所述顺序时间链中摘下,即调用timeLinkDelete(),将目标调度表从驱动计数器的顺序时间链中删除;
步骤S33,判断当前顺序时间链是否为空,若是,则执行步骤S34,若否,则执行步骤S35;
步骤S34,将所述时钟模块的计数通道的控制寄存器设置为关闭状态,即如果当前顺序时间链为空,则设置系统时钟模块的计数通道的控制寄存器(CCRn)的CEN位为0,关闭该计数通道;
步骤S35,将所述时钟模块的比较器寄存器的值设置为所述顺序时间链中的第一个调度表的到期时间,即如果当前顺序时间链不为空,则重新设置系统时钟模块的计数通道的比较寄存器(CMPn)为驱动计数器所指向的第一个调度表的到期时间。
本发明中将被启动了的目标调度表以顺序时间链的方式关联在驱动计数器上,顺序时间链按照链上每一个调度表的下一个待处理点的处理时间的先后顺序来组织,因此,位于链头的调度表是下一个即将被处理的调度表,另外,顺序时间链中的调度表是依靠计数中断来驱动运行的,而计数中断是基于系统时钟模块产生的,每当系统时钟模块的驱动计数器的计数值与比较寄存器的值相等时则产生中断,比较寄存器所设置的值就是顺序时间链中头部调度表的下一个待处理点的到期时间值,因此,只有当到达最近需要被处理的调度表的时间时系统才会产生中断,而不会在每一次驱动计数器计数时都产生时钟中断,并且在中断处理过程中不需要遍历所有调度表,因为待处理的调度表都位于顺序时间链的前部,可以大大提高系统的运行效率,降低系统的开销。
如图14所示,本发明还提供另一种调度表的实现系统,包括启动模块1、处理模块2和时钟模块3。
时钟模块3用于提供具有顺序时间链的驱动计数器。
启动模块1用于将目标调度表加入所述顺序时间链中以启动所述目标调度表。
优选的,所述启动模块1包括获取单元11、时间单元12、插入单元13、时钟模块的比较器寄存器14和时钟模块的计数通道的控制寄存器15。
获取单元11用于获取待启动的目标调度表;
时间单元12用于根据启动服务方式计算所述目标调度表的到期时间;
插入单元13用于根据所述到期时间将所述目标调度表插入所述顺序时间链。
优选的,所述插入单元13用于判断所述驱动计数器上的顺序时间链是否为空,
若为空,则修改所述顺序时间链中驱动计数器所指向的第一个和最后一个调度表为目标调度表,然后设置目标调度表所指向的前一个和下一个调度表为空;
若不为空,则判断目标调度表的到期时间是否要比顺序时间链中最后一个调度表的到期时间迟;
若比顺序时间链中最后一个调度表的到期时间迟,则修改目标调度表所指向的前一个调度表为驱动计数器所指向的最后一个调度表,并将驱动驱动计数器所指向的最后一个调度表设置为目标调度表,然后设置目标调度表所指向的下一个调度表为空;
若不比顺序时间链中最后一个调度表的到期时间迟,则判断目标调度表的到期时间是否不比驱动计数器所指向的第一个调度表的到期时间晚;
若不比驱动计数器所指向的第一个调度表的到期时间晚,则设置目标调度表所指向的下一个调度表为驱动计数器所指向的第一个调度表,并将目标调度表所指向的前一个调度表设置为空,然后将驱动计数器所指向的第一个调度表修改为目标调度表;
若比驱动计数器所指向的第一个调度表的到期时间晚,则判断目标调度表的到期时间是否不比顺序时间链中的第二个调度表的到期时间晚;
若不比顺序时间链中的第二个调度表的到期时间晚,则设置目标调度表所指向的下一个调度表为原顺序时间链中的第二个调度表,并设置目标调度表所指向的前一个调度表为原顺序时间链中的第一个调度表,并修改原顺序时间链中第二个调度表所指向的前一个调度表为目标调度表,以及修改顺序时间链中第一个调度表所指向的下一个调度表为目标调度表;
若比顺序时间链中的第二个调度表的到期时间晚,则将目标调度表依次与顺序时间链中的第三至最后一个调度表进行比较,直到将目标调度表插入到顺序时间链中合适的位置。
时钟模块的比较器寄存器14用于记录所述顺序时间链中的第一个调度表的到期时间。
时钟模块的计数通道的控制寄存器15用于打开或关闭时钟模块的计数通道。
处理模块2用于对所述顺序时间链中的处理点进行处理。其中,所述处理点包括初始点、截止点和终止点。
较佳的,所述处理模块2包括处理单元21、判断单元22。
处理单元21用于当所述驱动计数器的当前计数值与时钟模块的比较器寄存器的值相等时,将所述顺序时间链中的第一个调度表作为目标调度表,将所述目标调度表上的到期处理点进行处理并更新所顺序时间链
优选的,所述处理单元21包括摘下子单元211、运行态子单元212、起始点处理子单元213、截止点个数子单元214、终止点处理子单元215及截止点处理子单元216。
摘下子单元211用于将所述目标调度表从所述顺序时间链中摘下。
较佳的,所述摘下子单元211用于若目标调度表是所述顺序时间链中唯一的调度表,则将所述驱动计数器指向第一个和最后一个调度表都设置为空;若目标调度表是所述顺序时间链中第一个调度表并且不是最后一个调度表,则将所述驱动计数器所指向的第一个调度表设置为目标调度表所指向的下一个调度表,并将目标调度表所指向的下一个调度表指向前一个调度表的指针设置为空;若目标调度表不是所述顺序时间链中的第一个调度表并且是最后一个调度表,则将目标调度表所指向的前一个调度表指向下一个调度表设置为空,并将所述驱动计数器所指向的最后一个调度表设置为目标调度表所指向的前一个调度表;若目标调度表既不是所述顺序时间链中第一个调度表也不是最后一个调度表,则将目标调度表所指向的前一个调度表所指向的下一个调度表设置为目标调度表所指向的下一个调度表,并将目标调度表所指向的下一个调度表所指向的前一个调度表设置为目标调度表所指向的前一个调度表。
运行态子单元212用于判断所述目标调度表的状态是否为运行态。
起始点处理子单元213用于当所述运行态子单元212判断为不是运行态时,对所述目标调度表的起始点进行处理。
优选的,所述起始点处理子单元213用于将所述目标调度表的状态设置为运行态,判断当前截止点是否为起始点,若是起始点,则通知所述截止点处理子单元216进行处理;若不是起始点,则将目标调度表的到期时间设置为当前截止点的到期时间,然后通知所述插入单元13进行处理。
截止点个数子单元214用于当所述运行态子单元212判断为是运行态时,判断目标调度表的当前截止点的索引值是否与该目标调度表的截止点的个数相等。
终止点处理子单元215用于所述当截止点个数子单元214判断为相等时,对所述目标调度表的终止点进行处理。
较佳的,所述终止点处理子单元215用于将所述目标调度表的状态设置为停止态,并将目标调度表的属性复位;判断目标调度表的下一个调度表是否为空,若为空,则通知所述处理单元21停止处理;若不为空,则修改所述目标调度表的下一个调度表为新的第一个调度表,并通知所述起始点处理子单元213进行处理。
截止点处理子单元216用于所述当截止点个数子单元214判断为不相等时,对所述目标调度表的当前截止点进行处理。
较佳的,所述截止点处理子单元216用于处理所述当前截止点,并将所述当前截止点的索引值加一;判断目标调度表的当前截止点的索引值是否与所述调度表的截止点的个数相等,若不相等,则设置所述目标调度表的到期时间为当前截止点的下一个截止点的到期时间,然后通知所述插入单元13进行处理;若相等,则判断所述目标调度表是否是可重复执行,若可重复执行,则将所述当前截止点的索引值重置为零,并将所述目标调度表的到期时间设置第一个截止点的到期时间,然后通知所述插入单元13进行处理;若不可重复执行,则判断当前截止点是否也是终止点,若不是终止点,则将所述目标调度表的到期时间设置为终止点的到期时间,并通知所述插入单元13进行处理;若是终止点,则通知所述终止点处理子单元215进行处理。
判断单元22用于判断更新后的顺序时间链的第一个调度表是否为空,若为空,则将时钟模块的计数通道的控制寄存器15设置为关闭状态;若不为空,则判断所述驱动计数器的当前计数值与所述更新后的所述顺序时间链中第一个调度表的值是否相等,若相等,则通知所述处理单元21进行处理;若不相等,则将时钟模块的比较器寄存器14的值设置为更新后的顺序时间链中的第一个调度表的到期时间。
优选的,所述系统还包括停止模块3用于将所述目标调度表从所述顺序时间链中删除以停止所述目标调度表。
较佳的,所述停止模块3用于获取待停止的目标调度表;将所述目标调度表的状态设置为停止状态,并将所述目标调度表的各种属性复位;通知所述摘下子单元211进行处理;判断当前顺序时间链是否为空,若是,则将所述时钟模块的计数通道的控制寄存器15设置为关闭状态,若否,则将所述时钟模块的比较器寄存器14的值设置为所述顺序时间链中的第一个调度表的到期时间。
综上所述,本发明通过将目标调度表加入时钟模块的驱动计数器上的顺序时间链的适当位置以启动所述目标调度表,并对所述顺序时间链中的处理点进行处理,可以利用调度表所运行的硬件平台如MPC5634平台所提供的系统时钟模块(STM)来实现调度表的驱动计数器的功能,并以顺序时间链的方式将关联在该驱动计数器上的调度表按照下一个截止点(ExpiryPoint)处理时间的先后顺序排列起来,不仅可以降低调度表中断处理的频率,而且不需要遍历驱动计数器上的整个调度表的链表,提高了调度表的处理效率。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的系统而言,由于与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
显然,本领域的技术人员可以对发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包括这些改动和变型在内。
Claims (27)
1.一种调度表的实现方法,其特征在于,包括:
提供一具有驱动计数器的时钟模块,所述驱动计数器上设有顺序时间链;
将目标调度表加入到所述顺序时间链中以启动所述目标调度表;以及
对所述顺序时间链中的处理点进行处理。
2.如权利要求1所述的调度表的实现方法,其特征在于,对所述顺序时间链中的处理点进行处理的步骤之前或之后还包括:
将所述目标调度表从所述顺序时间链中删除以停止所述目标调度表。
3.如权利要求2所述的调度表的实现方法,其特征在于,所述处理点包括初始点、截止点和终止点。
4.如权利要求3所述的调度表的实现方法,其特征在于,将目标调度表加入到所述顺序时间链中以启动所述目标调度表的步骤包括:
获取待启动的目标调度表;
根据启动服务方式计算所述目标调度表的到期时间;
根据所述到期时间将所述目标调度表插入所述顺序时间链;
将所述时钟模块的比较器寄存器的值设置为所述顺序时间链中的第一个调度表的到期时间,并将所述时钟模块的计数通道的控制寄存器设置为打开状态。
5.如权利要求4所述的调度表的实现方法,其特征在于,将所述目标调度表插入所述顺序时间链的步骤包括:
判断所述驱动计数器上的顺序时间链是否为空,
若为空,则修改所述顺序时间链中驱动计数器所指向的第一个和最后一个调度表为目标调度表,然后设置目标调度表所指向的前一个和下一个调度表为空;
若不为空,则判断目标调度表的到期时间是否要比顺序时间链中最后一个调度表的到期时间迟;
若比顺序时间链中最后一个调度表的到期时间迟,则修改目标调度表所指向的前一个调度表为驱动计数器所指向的最后一个调度表,并将驱动计数器所指向的最后一个调度表设置为目标调度表,然后设置目标调度表所指向的下一个调度表为空;
若不比顺序时间链中最后一个调度表的到期时间迟,则判断目标调度表的到期时间是否不比驱动计数器所指向的第一个调度表的到期时间晚;
若不比驱动计数器所指向的第一个调度表的到期时间晚,则设置目标调度表所指向的下一个调度表为驱动计数器所指向的第一个调度表,并将目标调度表所指向的前一个调度表设置为空,然后将驱动计数器所指向的第一个调度表修改为目标调度表;
若比驱动计数器所指向的第一个调度表的到期时间晚,则判断目标调度表的到期时间是否不比顺序时间链中的第二个调度表的到期时间晚;
若不比顺序时间链中的第二个调度表的到期时间晚,则设置目标调度表所指向的下一个调度表为原顺序时间链中的第二个调度表,并设置目标调度表所指向的前一个调度表为原顺序时间链中的第一个调度表,并修改原顺序时间链中第二个调度表所指向的前一个调度表为目标调度表,以及修改顺序时间链中第一个调度表所指向的下一个调度表为目标调度表;
若比顺序时间链中的第二个调度表的到期时间晚,则将目标调度表依次与顺序时间链中的第三至最后一个调度表进行比较,直到将目标调度表插入到顺序时间链中合适的位置。
6.如权利要求5所述的调度表的实现方法,其特征在于,所述启动服务方式包括相对时间启动和绝对时间启动。
7.如权利要求6所述的调度表的实现方法,其特征在于,当所述启动服务方式为相对时间启动时,设置一相对启动时间,所述目标调度表的到期时间为所述时钟模块的驱动计数器的当前计数值与所述相对启动时间之和。
8.如权利要求6所述的调度表的实现方法,其特征在于,当所述启动服务方式为绝对时间启动时,设置一绝对启动时间,所述目标调度表的到期时间为所述绝对启动时间。
9.如权利要求7所述的调度表的实现方法,其特征在于,对所述顺序时间链中的处理点进行处理的步骤包括:
当所述驱动计数器的当前计数值与时钟模块的比较器寄存器的值相等时,将所述顺序时间链中的第一个调度表作为目标调度表,对所述目标调度表上的到期处理点进行处理并更新所述顺序时间链;
判断更新后的顺序时间链的第一个调度表是否为空,
若为空,则将时钟模块的计数通道的控制寄存器设置为关闭状态;
若不为空,则判断所述驱动计数器的当前计数值与所述更新后的所述顺序时间链中第一个调度表的值是否相等;
若相等,则重复执行将所述顺序时间链中的第一个调度表作为目标调度表,对所述目标调度表上的到期处理点进行处理并更新所述顺序时间链的步骤;
若不相等,则将时钟模块的比较器寄存器的值设置为更新后的顺序时间链中的第一个调度表的到期时间。
10.如权利要求9所述的调度表的实现方法,其特征在于,将所述顺序时间链中的第一个调度表作为目标调度表,对所述目标调度表上的到期处理点进行处理并更新所述顺序时间链的步骤包括:
将所述目标调度表从所述顺序时间链中摘下;
判断所述目标调度表的状态是否为运行态,
若不是运行态,则对所述目标调度表的起始点进行处理;
若是运行态,则判断所述目标调度表的当前截止点的索引值是否与该目标调度表的截止点的个数相等,若相等,则对所述目标调度表的终止点进行处理;若不相等,则对所述目标调度表的当前截止点进行处理。
11.如权利要求10所述的调度表的实现方法,其特征在于,将所述目标调度表从所述顺序时间链中摘下的步骤包括:
若目标调度表是所述顺序时间链中唯一的调度表,则将所述驱动计数器指向第一个和最后一个调度表都设置为空;
若目标调度表是所述顺序时间链中第一个调度表但不是最后一个调度表,则将所述驱动计数器所指向的第一个调度表设置为目标调度表所指向的下一个调度表,并将目标调度表所指向的下一个调度表指向前一个调度表的指针设置为空;
若目标调度表不是所述顺序时间链中的第一个调度表但是最后一个调度表,则将目标调度表所指向的前一个调度表指向下一个调度表设置为空,并将所述驱动计数器所指向的最后一个调度表设置为目标调度表所指向的前一个调度表;
若目标调度表既不是所述顺序时间链中第一个调度表也不是最后一个调度表,则将目标调度表所指向的前一个调度表所指向的下一个调度表设置为目标调度表所指向的下一个调度表,并将目标调度表所指向的下一个调度表所指向的前一个调度表设置为目标调度表所指向的前一个调度表。
12.如权利要求10所述的调度表的实现方法,其特征在于,对当前截止点进行处理的步骤包括:
处理所述当前截止点,并将所述当前截止点的索引值加一;
判断目标调度表的当前截止点的索引值是否与所述目标调度表的截止点的个数相等,
若不相等,则设置所述目标调度表的到期时间为当前截止点的下一个截止点的到期时间,然后执行将所述目标调度表插入所述顺序时间链的步骤;
若相等,则判断所述目标调度表是否是可重复执行,
若可重复执行,则将所述当前截止点的索引值重置为零,并将所述目标调度表的到期时间设置第一个截止点的到期时间,然后执行将所述目标调度表插入所述顺序时间链的步骤;
若不可重复执行,则判断当前截止点是否也是终止点,若不是终止点,则将所述目标调度表的到期时间设置为终止点的到期时间,并执行将所述目标调度表插入所述顺序时间链的步骤;若是终止点,则执行所述对终止点进行处理的步骤。
13.如权利要求12所述的调度表的实现方法,其特征在于,对所述目标调度表的起始点进行处理的步骤包括:
将所述目标调度表的状态设置为运行态,判断当前截止点是否为起始点;
若是起始点,则执行对当前截止点进行处理的步骤;
若不是起始点,则将目标调度表的到期时间设置为当前截止点的到期时间,然后执行将所述目标调度表插入所述顺序时间链的步骤。
14.如权利要求13所述的调度表的实现方法,其特征在于,对所述目标调度表的终止点进行处理的步骤包括:
将所述目标调度表的状态设置为停止态,并将目标调度表的属性复位;
判断目标调度表的下一个调度表是否为空,若为空,则从所述将顺序时间链中的第一个调度表上的到期处理点进行处理并更新所述驱动计数器上的顺序时间链的步骤返回;若不为空,则修改所述目标调度表的下一个调度表为新的第一个调度表,并重复所述对所述目标调度表的起始点进行处理的步骤。
15.如权利要求11所述的调度表的实现方法,其特征在于,将所述目标调度表从所述顺序时间链中删除以停止所述目标调度表的步骤包括:
获取待停止的目标调度表;
将所述目标调度表的状态设置为停止状态,并将所述目标调度表的各种属性复位;
将所述目标调度表从所述顺序时间链中摘下;
判断当前顺序时间链是否为空,若是,则将所述时钟模块的计数通道的控制寄存器设置为关闭状态,若否,则将所述时钟模块的比较器寄存器的值设置为所述顺序时间链中的第一个调度表的到期时间。
16.一种调度表的实现系统,其特征在于,包括:
时钟模块,用于提供具有顺序时间链的驱动计数器;
启动模块,用于将目标调度表加入所述顺序时间链中以启动所述目标调度表;以及
处理模块,用于对所述顺序时间链中的处理点进行处理。
17.如权利要求16所述的调度表的实现系统,其特征在于,还包括停止模块,用于将所述目标调度表从所述顺序时间链中删除以停止所述目标调度表。
18.如权利要求17所述的调度表的实现系统,其特征在于,所述处理点包括初始点、截止点和终止点。
19.如权利要求18所述的调度表的实现系统,其特征在于,所述启动模块包括:
获取单元,用于获取待启动的目标调度表;
时间单元,用于根据启动服务方式计算所述目标调度表的到期时间;
插入单元,用于根据所述到期时间将所述目标调度表插入所述顺序时间链;
时钟模块的比较器寄存器,用于记录所述顺序时间链中的第一个调度表的到期时间;
时钟模块的计数通道的控制寄存器,用于打开或关闭时钟模块的计数通道。
20.如权利要求19所述的调度表的实现系统,其特征在于,所述插入单元,用于判断所述驱动计数器上的顺序时间链是否为空,
若为空,则修改所述顺序时间链中驱动计数器所指向的第一个和最后一个调度表为目标调度表,然后设置目标调度表所指向的前一个和下一个调度表为空;
若不为空,则判断目标调度表的到期时间是否要比顺序时间链中最后一个调度表的到期时间迟;
若比顺序时间链中最后一个调度表的到期时间迟,则修改目标调度表所指向的前一个调度表为驱动计数器所指向的最后一个调度表,并将驱动计数器所指向的最后一个调度表设置为目标调度表,然后设置目标调度表所指向的下一个调度表为空;
若不比顺序时间链中最后一个调度表的到期时间迟,则判断目标调度表的到期时间是否不比驱动计数器所指向的第一个调度表的到期时间晚;
若不比驱动计数器所指向的第一个调度表的到期时间晚,则设置目标调度表所指向的下一个调度表为驱动计数器所指向的第一个调度表,并将目标调度表所指向的前一个调度表设置为空,然后将驱动计数器所指向的第一个调度表修改为目标调度表;
若比驱动计数器所指向的第一个调度表的到期时间晚,则判断目标调度表的到期时间是否不比顺序时间链中的第二个调度表的到期时间晚;
若不比顺序时间链中的第二个调度表的到期时间晚,则设置目标调度表所指向的下一个调度表为原顺序时间链中的第二个调度表,并设置目标调度表所指向的前一个调度表为原顺序时间链中的第一个调度表,并修改原顺序时间链中第二个调度表所指向的前一个调度表为目标调度表,以及修改顺序时间链中第一个调度表所指向的下一个调度表为目标调度表;
若比顺序时间链中的第二个调度表的到期时间晚,则将目标调度表依次与顺序时间链中的第三至最后一个调度表进行比较,直到将目标调度表插入到顺序时间链中合适的位置。
21.如权利要求20所述的调度表的实现系统,其特征在于,所述处理模块包括:
处理单元,用于当所述驱动计数器的当前计数值与时钟模块的比较器寄存器的值相等时,将所述顺序时间链中的第一个调度表作为目标调度表,将所述目标调度表上的到期处理点进行处理并更新所述顺序时间链;
判断单元,用于判断更新后的顺序时间链的第一个调度表是否为空,若为空,则将时钟模块的计数通道的控制寄存器设置为关闭状态;若不为空,则判断所述驱动计数器的当前计数值与所述更新后的所述顺序时间链中第一个调度表的值是否相等,若相等,则通知所述处理单元进行处理;若不相等,则将时钟模块的比较器寄存器的值设置为更新后的顺序时间链中的第一个调度表的到期时间。
22.如权利要求21所述的调度表的实现系统,其特征在于,所述处理单元包括:
摘下子单元,用于将所述目标调度表从所述顺序时间链中摘下;
运行态子单元,用于判断所述目标调度表的状态是否为运行态;
起始点处理子单元,用于当所述运行态子单元判断为不是运行态时,对所述目标调度表的起始点进行处理;
截止点个数子单元,用于当所述运行态子单元判断为是运行态时,判断目标调度表的当前截止点的索引值是否与该目标调度表的截止点的个数相等;
终止点处理子单元,用于所述当截止点个数子单元判断为相等时,对所述目标调度表的终止点进行处理;
截止点处理子单元,用于所述当截止点个数子单元判断为不相等时,对所述目标调度表的当前截止点进行处理。
23.如权利要求22所述的调度表的实现系统,其特征在于,所述摘下子单元,用于若目标调度表是所述顺序时间链中唯一的调度表,则将所述驱动计数器指向第一个和最后一个调度表都设置为空;若目标调度表是所述顺序时间链中第一个调度表并且不是最后一个调度表,则将所述驱动计数器所指向的第一个调度表设置为目标调度表所指向的下一个调度表,并将目标调度表所指向的下一个调度表指向前一个调度表的指针设置为空;若目标调度表不是所述顺序时间链中的第一个调度表并且是最后一个调度表,则将目标调度表所指向的前一个调度表指向下一个调度表设置为空,并将所述驱动计数器所指向的最后一个调度表设置为目标调度表所指向的前一个调度表;若目标调度表既不是所述顺序时间链中第一个调度表也不是最后一个调度表,则将目标调度表所指向的前一个调度表所指向的下一个调度表设置为目标调度表所指向的下一个调度表,并将目标调度表所指向的下一个调度表所指向的前一个调度表设置为目标调度表所指向的前一个调度表。
24.如权利要求22所述的调度表的实现系统,其特征在于,所述截止点处理子单元,用于处理所述当前截止点,并将所述当前截止点的索引值加一;判断目标调度表的当前截止点的索引值是否与所述目标调度表的截止点的个数相等,若不相等,则设置所述目标调度表的到期时间为当前截止点的下一个截止点的到期时间,然后通知所述插入单元进行处理;若相等,则判断所述目标调度表是否是可重复执行,若可重复执行,则将所述当前截止点的索引值重置为零,并将所述目标调度表的到期时间设置第一个截止点的到期时间,然后通知所述插入单元进行处理;若不可重复执行,则判断当前截止点是否也是终止点,若不是终止点,则将所述目标调度表的到期时间设置为终止点的到期时间,并通知所述插入单元进行处理;若是终止点,则通知所述终止点处理子单元进行处理。
25.如权利要求24所述的调度表的实现系统,其特征在于,所述起始点处理子单元,用于将所述目标调度表的状态设置为运行态,判断当前截止点是否为起始点,若是起始点,则通知所述截止点处理子单元进行处理;
若不是起始点,则将目标调度表的到期时间设置为当前截止点的到期时间,然后通知所述插入单元进行处理。
26.如权利要求25所述的调度表的实现系统,其特征在于,所述终止点处理子单元,用于将所述目标调度表的状态设置为停止态,并将目标调度表的属性复位;判断目标调度表的下一个调度表是否为空,若为空,则通知所述处理单元停止处理;若不为空,则修改所述目标调度表的下一个调度表为新的第一个调度表,并通知所述起始点处理子单元进行处理。
27.如权利要求22所述的调度表的实现系统,其特征在于,停止模块,用于获取待停止的目标调度表;将所述目标调度表的状态设置为停止状态,并将所述目标调度表的各种属性复位;通知所述摘下子单元进行处理;判断当前顺序时间链是否为空,若是,则将所述时钟模块的计数通道的控制寄存器设置为关闭状态,若否,则将所述时钟模块的比较器寄存器的值设置为所述顺序时间链中的第一个调度表的到期时间。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210195282.6A CN102750149B (zh) | 2012-06-13 | 2012-06-13 | 调度表的实现方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210195282.6A CN102750149B (zh) | 2012-06-13 | 2012-06-13 | 调度表的实现方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102750149A CN102750149A (zh) | 2012-10-24 |
CN102750149B true CN102750149B (zh) | 2016-03-02 |
Family
ID=47030372
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210195282.6A Active - Reinstated CN102750149B (zh) | 2012-06-13 | 2012-06-13 | 调度表的实现方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102750149B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103116523A (zh) * | 2013-02-27 | 2013-05-22 | 北京经纬恒润科技有限公司 | 一种报警检测及响应方法、装置 |
CN105959938A (zh) * | 2016-06-28 | 2016-09-21 | 上海斐讯数据通信技术有限公司 | 无线开关控制方法及系统 |
CN106354633B (zh) * | 2016-08-25 | 2019-01-04 | 中国电子科技集团公司第四十一研究所 | 基于算法插件的任务调度表生成方法 |
CN109656169B (zh) * | 2018-12-20 | 2021-08-27 | 深圳南方德尔汽车电子有限公司 | 多重调度表切换方法、装置、计算机设备及存储介质 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1310146C (zh) * | 2004-02-09 | 2007-04-11 | 中兴通讯股份有限公司 | 单片机操作系统的模块化实现方法 |
US20080115171A1 (en) * | 2006-11-09 | 2008-05-15 | Eric Lawrence Barsness | Detecting Interruptions in Scheduled Programs |
CN101414958B (zh) * | 2007-10-18 | 2011-02-09 | 华为技术有限公司 | 一种业务调度方法及装置 |
US20110283089A1 (en) * | 2009-01-28 | 2011-11-17 | Harshal Ingale | modularized micro processor design |
-
2012
- 2012-06-13 CN CN201210195282.6A patent/CN102750149B/zh active Active - Reinstated
Also Published As
Publication number | Publication date |
---|---|
CN102750149A (zh) | 2012-10-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102750149B (zh) | 调度表的实现方法及系统 | |
CN106293919B (zh) | 一种时间触发的嵌入式任务调度装置与方法 | |
Altisen et al. | A framework for scheduler synthesis | |
CN104536811B (zh) | 基于hive任务的任务调度方法及装置 | |
CN102520925B (zh) | Aadl2tasm模型转换方法 | |
CN106737676B (zh) | 一种基于脚本可二次开发的工业机器人编程系统 | |
CN101566839B (zh) | 一种梯形图内嵌组态算法的实现方法 | |
CN103176774A (zh) | 应用程序的编译方法、装置以及系统 | |
WO2001082075A3 (en) | System and method for scheduling execution of cross-platform computer processes | |
US20100131076A1 (en) | Control system, and method for configuring a control system | |
RU2008116177A (ru) | Способы одновременного выполнения нескольких задач в медиаплеерах | |
CN109976823A (zh) | 一种应用程序启动方法、装置及终端设备 | |
CN103491174A (zh) | 基于延迟服务器的周期/非周期混合实时任务调度方法 | |
CN106886450A (zh) | 任务调度方法和系统 | |
CN102087603A (zh) | 一种在单芯片上实现主备版本备份的方法 | |
Henzinger et al. | Time-safety checking for embedded programs | |
US9323242B2 (en) | Method for setting an operating status | |
CN102339029B (zh) | 一种嵌入式操作系统定时保护的实现方法 | |
CN1755614A (zh) | 定时器的实现方法 | |
CN107222527B (zh) | 一种通过配置文件控制物联网设备分模式运行的方法 | |
CN111582629A (zh) | 资源调度方法、装置、设备和存储介质 | |
CN104597820A (zh) | 一种扩展单片机硬件定时器的方法 | |
WO2004099979A3 (de) | Verfahren zur softwareanpassung | |
CN107832461B (zh) | 一种数据迁移方法及系统 | |
Nahas | Employing two ‘sandwich delay’mechanisms to enhance predictability of embedded systems which use time-triggered co-operative architectures |
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 | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20160302 Termination date: 20210613 |
|
RR01 | Reinstatement of patent right | ||
RR01 | Reinstatement of patent right |
Former decision: Termination of patent right with unpaid annual fee Former decision publication date: 20220603 |