CN110457120B - 基于osek嵌入式实时操作系统的非周期定时器驻留机制 - Google Patents
基于osek嵌入式实时操作系统的非周期定时器驻留机制 Download PDFInfo
- Publication number
- CN110457120B CN110457120B CN201910661028.2A CN201910661028A CN110457120B CN 110457120 B CN110457120 B CN 110457120B CN 201910661028 A CN201910661028 A CN 201910661028A CN 110457120 B CN110457120 B CN 110457120B
- Authority
- CN
- China
- Prior art keywords
- timer
- time
- counter
- periodic
- linked list
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/485—Task life-cycle, e.g. stopping, restarting, resuming execution
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
- Telephonic Communication Services (AREA)
Abstract
本发明公开了一种基于OSEK嵌入式实时操作系统的非周期定时器驻留机制,该机制将硬件时钟与系统计数器相关联,并将多个周期或非周期定时器关联到计数器,组成定时器链表,在每个定时器上可选地绑定任务或回调函数。本发明中定时器到期时会首先调用回调函数,通过回调函数高效地执行时间关键程序而不需要上下文切换;回调函数中若重新启用已触发的非周期定时器,可以驻留该非周期定时器,而在使用后立即删除。本发明主要优点在于采用的非周期定时器驻留机制结合了回调函数和非周期定时器,在使用回调函数机制执行高效操作的同时仍能使用非周期定时器实现周期不固定的系统服务,既提高了程序运行效率,又简化了编程工作。
Description
技术领域
本发明属于计算机技术领域,具体涉及一种基于OSEK嵌入式实时操作系统的非周期定时器驻留机制。
背景技术
在微控制器中,通常使用实时操作系统来提供多任务和资源共享的功能,实时操作系统(RTOS)是指为实时任务提供服务的操作系统,这些实时任务在有限的时间内处理到来的数据。由于实时系统对时间的限制非常严格,定时器作为实时系统时间管理的核心就显得十分重要。因此,设计一个安全、高效、且符合系统设计要求的定时器机制是非常重要的。
现有的uCOS、μClinux、SMC-RTOS和eCOS等实时操作系统中,定时器机制所调度的最小实体是任务,但不同任务之间的调度会发生上下文切换,上下文切换的过程中则需要保存并恢复大量的寄存器,这个过程会消耗一定的时间。但在实时操作系统中,一些定时器相关的系统级服务往往需要多个高频率定时器协同工作,例如OSEK直接网络管理服务就需要使用至少五个频繁触发的定时器,并且定时器触发后需要执行的时间又十分短暂。在这类服务中,如果以任务作为定时器的最小调度实体,那么频繁的任务调度所引发的上下文切换会消耗很多时间。
OSEK/VDX规范所制定的实时操作系统标准在定时器中引入了回调函数,回调函数是比任务更轻的调度实体,它直接在实时操作系统内核的上下文中执行,不需要进行上下文切换工作,相对任务而言执行效率更高,更适合前述的定时器相关系统级服务。此外,OSEK/VDX规范还区分了周期定时器和非周期定时器,提供了更加灵活的定时器机制,例如OSEK直接网络管理中,操作系统需要根据硬件运行状态来修改各个定时器的触发时间,这种情况下,固定周期的周期定时器无法满足需求,使用非周期定时器显然能够简化编程工作。
但是,OSEK/VDX规范所制定的实时操作系统标准没有考虑回调函数机制与非周期定时器相结合的情况,现有的FreeOSEK、SmartOSEK等根据OSEK/VDX规范实现的嵌入式实时操作系统都不能在回调函数中设置非周期性定时器,无法将回调函数机制的高效性和非周期定时器的灵活性相结合,影响了定时器相关系统级服务如OSEK直接网络管理服务的运行效率。
发明内容
鉴于上述,本发明提供了一种基于OSEK嵌入式实时操作系统的非周期定时器驻留机制,能够解决现有技术中回调函数无法设置非周期定时器,影响定时器相关系统级服务运行效率的技术问题。
一种基于OSEK嵌入式实时操作系统的非周期定时器驻留机制,包括如下:
(1)将操作系统最底层的计数器与硬件的时钟相关联,并将一个或多个定时器绑定到操作系统的计数器上;
(2)将操作系统预定义的一个或多个任务与定时器进行一对一或多对一绑定,并为每一定时器定义一个回调函数;
(3)每个计数器计数周期到达时,系统查询计数器对应的定时器链表是否为空:如果为空,则等待下一个计数周期;如果不为空,将计数器的RemainTicks减1后判断RemainTicks是否为0:若RemainTicks不为0,说明此时没有待触发的定时器,系统执行空闲任务,等待下一个计数周期到来;若RemainTicks为0,则此时至少有一个待触发的定时器,且系统进行以下操作:
3.1第一次遍历,触发位于定时器链表表头的定时器,激活与该定时器绑定的任务并调用回调函数;完成表头定时器处理后,查询下一个定时器是否到期:若到期,则依据上述操作触发该定时器并继续查询后面的定时器是否到期;若未到期,则退出此次遍历,保存首个未到期的定时器AlarmStart;
3.2第二次遍历,以定时器AlarmStart为基准,遍历定时器链表中被触发过的定时器,根据修改后的delta值对这些定时器重新排序,通过与当前系统时间比较,找到新的首个未到期定时器AlarmRealStart并保存;
3.3第三次遍历,删除排在定时器AlarmRealStart之前的所有非周期定时器,驻留定时器AlarmRealStart及其之后的所有定时器,更新计数器的整型变量值为新的定时器链表表头定时器AlarmRealStart的delta值与当期系统时间的差值。
进一步地,每个定时器都有一个预设值delta,表示定时器的触发时间;所有定时器根据delta大小排列成一个定时器链表。
进一步地,所述计数器维护一个整型变量RemainTicks,该变量储存定时器链表表头定时器delta值与当期系统时间的差值。
进一步地,所述计数器分周期定时器和非周期定时器两类,周期定时器有一个cycle值表示定时器周期,周期定时器在每次触发后delta会增加一个cycle并根据新的delta值插入定时器链表中;非周期定时器在触发后会从定时器链表中移除。
进一步地,操作系统的任务在定时器触发时由定时器处理程序激活,在中断上下文结束后被执行,操作系统任务可修改定时器的delta值。
进一步地,所述回调函数在定时器触发时由定时器处理程序直接调用,在中断上下文中执行,回调函数可修改定时器的delta值。
由此可见,本发明通过三次遍历的方式实现了非周期定时器被回调函数修改后的驻留,解决了现有技术中回调函数机制和非周期定时器无法结合的问题,提供了能够有效提高定时器相关系统级服务如OSEK直接网络管理服务运行效率的定时器机制。
附图说明
图1为SmartOSEK操作系统所使用定时器机制的核心算法流程图。
图2为本发明非周期定时器驻留机制的核心算法流程图。
图3(a)为RemainTicks=1情况下定时器触发前的定时器链表示意图。
图3(b)为RemainTicks=0情况下原SmartOSEK定时器机制触发后的定时器链表示意图。
图3(c)为RemainTicks=0情况下定时器驻留机制触发后的定时器链表示意图。
具体实施方式
为了更为具体地描述本发明,下面结合附图及具体实施方式对本发明的技术方案进行详细说明。
本发明基于OSEK嵌入式实时操作系统的非周期定时器驻留机制,首先将操作系统最底层的计数器Counter与硬件的时钟相关联,并将一个或多个定时器Alarm绑定到操作系统计数器Counter。
每个定时器都有一个预设值delta,表示定时器的触发时间;所有定时器根据delta大小排列成一个定时器链表;计数器Counter维护一个整型变量RemainTicks,该变量储存定时器链表表头定时器delta值与当期系统时间的差值。
定时器包括周期定时器和非周期定时器:周期定时器有一个cycle值表示定时器周期,周期定时器在每次触发后delta会增加一个cycle并根据新的delta值插入定时器链表;非周期定时器在触发后会从定时器链表被移除。
然后,将操作系统预定义的一个或多个任务与定时器一对一或多对一绑定,并为每一个定时器定义一个回调函数。
操作系统任务在定时器触发时由定时器处理程序激活,在中断上下文结束后被执行,操作系统任务可能修改定时器delta值。
回调函数在定时器触发时由定时器处理程序直接调用,在中断上下文中执行,回调函数可能修改定时器delta值。
每个Counter计数周期到达时,系统查询Counter对应的定时器链表是否为空,如果为空,则等待下一个计数周期;如果不为空,将Counter的RemainTicks减1,如果RemainTicks仍不为0,说明此时没有待触发的定时器,系统执行空闲任务,等待下一个计数周期到来;如果该值为0,则此时至少有一个待触发的定时器,系统进行以下操作:
第一次遍历,触发位于定时器链表表头的定时器,激活与该定时器绑定的任务并调用回调函数;完成表头定时器处理后,查询下一个定时器是否到期,若到期,则触发该定时器并继续查询下一个定时器是否到期,否则退出此次遍历,保存首个未到期定时器AlarmStart;
第二次遍历,以第一次遍历中保存的首个未到期定时器AlarmStart为基准,遍历定时器链表中被触发过的定时器,根据修改后定时器的delta值对其重新排序,并与当前系统时间比较,找到新的首个未到期的定时器AlarmRealStart并保存;
第三次遍历,删除排在首个未到期定时器AlarmRealStart之前的所有非周期定时器,驻留AlarmRealStart及其后的所有非周期和周期定时器,更新Counter的RemainTicks值为新的定时器链表表头AlarmRealStart的delta值与当期系统时间的差值。
本发明以在SmartOSEK OS实时操作系统上的实施方式为例,SmartOSEK OS是由浙江大学嵌入式工程中心根据国家汽车电子软件发展的需求而自主研发的符合OSEK/VDX规范的嵌入式实时操作系统,它是多任务的单处理器系统,在同一时间内可以同时存在多个周期任务和非周期任务,所有任务的优先级是用户根据任务的重要性配置的,保证周期任务的实时要求和非周期任务的低响应是SmartOSEK OS的主要责任。
首先将硬件的时钟中断源与系统计数器Counter绑定,硬件定时器每一次中断触发都会在Counter的计数值上加1,然后Counter与多个定时器Alarm进行关联,与同一个Counter关联的所有Alarm排列成一个定时器链表,Counter维护一个变量RemainTicks,其值为与Counter关联的Alarm链表表头的Alarm触发需要经过的时间。当硬件时钟中断触发时,Counter根据当前的RemainTicks比较,判断是否触发上层Alarm。
表1:系统计数器Counter未到期时各定时器参数
如表1所示,链表中的定时器根据其到期时间排列,前5个定时器分别为Alarm0、Alarm1、Alarm2、Alarm3和Alarm4,Counter维护的RemainTicks值等于与Counter关联的第一个Alarm到期需要经过的Ticks,由于Alarm0到期时间为100且Counter当前时间为99,此时的RemainTicks的值为1,此时定时器链表如图3(a)所示。
当下一计数器周期到来,RemainTicks的值变为0,触发定时器链表中到期的定时器,并将未触发定时器链表的表头设置为首个未触发的定时器。根据表1,Alarm0和Alarm1被触发,Alarm2成为定时器链表的表头。
在原来的SmartOSEK OS定时器模块中,如图1所示,触发周期性的Alarm0后,系统根据Alarm0周期计算出Alarm0下一次到期的时间delta,使得第二次遍历时能够根据更新后Alarm的到期时间对定时器链表进行删减和重排。Alarm1触发后,其回调函数根据操作系统当前状态,决定在Counter达到200时再次触发Alarm1,根据Alarm到期时间,此时真实的未触发链表表头应为Alarm1,但在第一次遍历中,Alarm2被设置为未触发链表表头定时器,第二次遍历进行删除操作时将本不该删除的Alarm1删除,导致非周期Alarm1无法驻留,最终得到如图3(b)中缺少Alarm1的定时器链表。
如图2所示,本发明中定时器模块在触发后不更新Alarm的到期时间,而是进行第二次遍历,重新确定未触发定时器链表表头的定时器,对于前述Alarm1回调函数根据操作系统当前状态,决定在Counter达到200时再次触发Alarm1的情况。本次遍历以未触发链表表头定时器Alarm2为基准,遍历定时器链表中被触发过的定时器,根据修改后定时器的delta值对其重新排序,并与当前系统时间比较,找到新的首个未到期的定时器Alarm1作为未触发定时器链表的表头。
然后进行第三次遍历,将排在Alarm1之前的所有非周期Alarm删除,驻留首个未到期的定时器及其后的所有非周期和周期定时器,完成第三次遍历后,得到如图3(c)所示的一个新的定时器链表,该链表按到期时间保存所有未触发的定时器,在下一次RemainTicks为0时,对该链表重复以上操作。
综上所述,本发明采用的非周期定时器驻留机制结合了回调函数和非周期定时器,允许在回调函数中修改非周期定时器,提供一种实现无须进行上下文切换的定时器相关系统级服务的机制。
上述对实施例的描述是为便于本技术领域的普通技术人员能理解和应用本发明。熟悉本领域技术的人员显然可以容易地对上述实施例做出各种修改,并把在此说明的一般原理应用到其他实施例中而不必经过创造性的劳动。因此,本发明不限于上述实施例,本领域技术人员根据本发明的揭示,对于本发明做出的改进和修改都应该在本发明的保护范围之内。
Claims (3)
1.一种基于OSEK嵌入式实时操作系统的非周期定时器驻留机制,其特征在于:
(1)将操作系统最底层的计数器与硬件的时钟相关联,并将一个或多个定时器绑定到操作系统的计数器上;
每个定时器都有一个预设值delta,表示定时器的触发时间,所有定时器根据delta大小排列成一个定时器链表;所述定时器分周期定时器和非周期定时器两类,周期定时器有一个cycle值表示定时器周期,周期定时器在每次触发后delta会增加一个cycle并根据新的delta值插入定时器链表中;非周期定时器在触发后会从定时器链表中移除;所述计数器维护一个整型变量RemainTicks,该变量储存定时器链表表头定时器delta值与当期系统时间的差值;
(2)将操作系统预定义的一个或多个任务与定时器进行一对一或多对一绑定,并为每一定时器定义一个回调函数;
(3)每个计数器计数周期到达时,系统查询计数器对应的定时器链表是否为空:如果为空,则等待下一个计数周期;如果不为空,将计数器的RemainTicks减1后判断RemainTicks是否为0:若RemainTicks不为0,说明此时没有待触发的定时器,系统执行空闲任务,等待下一个计数周期到来;若RemainTicks为0,则此时至少有一个待触发的定时器,且系统进行以下操作:
3.1第一次遍历,触发位于定时器链表表头的定时器,激活与该定时器绑定的任务并调用回调函数;完成表头定时器处理后,查询下一个定时器是否到期:若到期,则依据上述操作触发该定时器并继续查询后面的定时器是否到期;若未到期,则退出此次遍历,保存首个未到期的定时器AlarmStart;
3.2第二次遍历,以定时器AlarmStart为基准,遍历定时器链表中被触发过的定时器,根据修改后的delta值对这些定时器重新排序,通过与当前系统时间比较,找到新的首个未到期定时器AlarmRealStart并保存;
3.3第三次遍历,删除排在定时器AlarmRealStart之前的所有非周期定时器,驻留定时器AlarmRealStart及其之后的所有定时器,更新计数器的整型变量值为新的定时器链表表头定时器AlarmRealStart的delta值与当期系统时间的差值。
2.根据权利要求1所述的非周期定时器驻留机制,其特征在于:操作系统的任务在定时器触发时由定时器处理程序激活,在中断上下文结束后被执行,操作系统任务可修改定时器的delta值。
3.根据权利要求1所述的非周期定时器驻留机制,其特征在于:所述回调函数在定时器触发时由定时器处理程序直接调用,在中断上下文中执行,回调函数可修改定时器的delta值。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910661028.2A CN110457120B (zh) | 2019-07-22 | 2019-07-22 | 基于osek嵌入式实时操作系统的非周期定时器驻留机制 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910661028.2A CN110457120B (zh) | 2019-07-22 | 2019-07-22 | 基于osek嵌入式实时操作系统的非周期定时器驻留机制 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110457120A CN110457120A (zh) | 2019-11-15 |
CN110457120B true CN110457120B (zh) | 2021-10-29 |
Family
ID=68481653
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910661028.2A Active CN110457120B (zh) | 2019-07-22 | 2019-07-22 | 基于osek嵌入式实时操作系统的非周期定时器驻留机制 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110457120B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112416443A (zh) * | 2020-11-16 | 2021-02-26 | 苏州大学 | 实现实时操作系统在嵌入式架构下的驻留方法 |
CN113806040A (zh) * | 2021-08-12 | 2021-12-17 | 苏州坤厚自动化科技有限公司 | 一种基于agv精确控制的中断处理方法 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP1530137A1 (en) * | 2003-11-10 | 2005-05-11 | Robert Bosch Gmbh | Simulation system and computer-implemented method for simulation and verifying a control system |
US9459890B2 (en) * | 2008-07-10 | 2016-10-04 | Mentor Graphics Corporation | Controlling real time during embedded system development |
CN101359294B (zh) * | 2008-10-09 | 2011-05-18 | 北京佳讯飞鸿电气股份有限公司 | 一种嵌入式系统定时器的管理方法 |
CN102752282B (zh) * | 2012-05-30 | 2015-07-01 | 苏州云初网络技术有限公司 | 一种定时器管理模块 |
KR101666398B1 (ko) * | 2012-10-30 | 2016-10-17 | 한국전자통신연구원 | Arinc 653 기반 운영체제에서의 모니터링 방법 및 장치 |
CN105807892A (zh) * | 2016-03-10 | 2016-07-27 | 浙江大学 | 一种嵌入式实时操作系统的低功耗模式切换方法 |
-
2019
- 2019-07-22 CN CN201910661028.2A patent/CN110457120B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN110457120A (zh) | 2019-11-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Tindell et al. | An extendible approach for analyzing fixed priority hard real-time tasks | |
Lehoczky et al. | The rate monotonic scheduling algorithm: Exact characterization and average case behavior | |
CN110457120B (zh) | 基于osek嵌入式实时操作系统的非周期定时器驻留机制 | |
Mostafa et al. | Finding time quantum of round robin CPU scheduling algorithm in general computing systems using integer programming | |
US7882488B2 (en) | Software tool for synthesizing a real-time operating system | |
Davis et al. | Optimal fixed priority scheduling with deferred pre-emption | |
CN103873587B (zh) | 一种基于云平台实现调度的方法及装置 | |
Perkovic et al. | Randomization, speculation, and adaptation in batch schedulers | |
US10271326B2 (en) | Scheduling function calls | |
CN102270156A (zh) | 一种实时嵌入式系统定时器管理方法 | |
CN111897637B (zh) | 作业调度方法、装置、主机及存储介质 | |
CN103491174A (zh) | 基于延迟服务器的周期/非周期混合实时任务调度方法 | |
CN102541642A (zh) | 一种增强实时性能的任务管理方法 | |
CN107589993A (zh) | 一种基于linux实时操作系统的动态优先级调度算法 | |
CN103034480B (zh) | 一种嵌入式系统定时器实现方法 | |
CN116974728B (zh) | 单片机任务调度方法、单片机产品及存储介质 | |
Cornhilll et al. | Limitations of Ada for real-time scheduling | |
CN116302420A (zh) | 并发调度方法、装置、计算机设备及计算机可读存储介质 | |
CN108845870B (zh) | 一种基于pWCET整形的概率性实时任务调度方法 | |
Binns | A robust high-performance time partitioning algorithm: the digital engine operating system (DEOS) approach | |
CN117453379B (zh) | Linux系统中AOE网计算任务的调度方法及系统 | |
CN116755868B (zh) | 任务处理系统及方法 | |
CN116932227B (zh) | 一种基于单线程的任务调度方法及装置 | |
CN113495781B (zh) | 任务调度方法、装置、设备及可读存储介质 | |
CN110489089B (zh) | 基于中断管理框架的嵌入式系统低功耗控制方法及系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |