基于嵌入式操作系统的通用定时器及其工作方法
【专利摘要】本发明公开了一种基于嵌入式操作系统的通用定时器及其工作方法,其装置包括普通定时器管理任务模块、普通定时器列表、精确定时器中断处理模块、精确定时器列表、定时器计数信号量通知模块以及硬件定时器;其方法包括根据普通定时器和精确定时器中的不同设定值接合硬件定时器控制应用程序的执行频率。本发明的有益效果是,利用嵌入式操作系统的通用技术,完成通用定时器功能,实现了跨操作系统的应用;可以根据应用要求,实现基于tick单位的普通定时和基于1ms单位的精确定时功能,在保证系统功能的前提下,提高了CPU效率和性能,优化了系统,保证了系统实时性要求。
【专利说明】基于嵌入式操作系统的通用定时器及其工作方法
【技术领域】
[0001]本发明属于一种嵌入式操作系统定时器,具体涉及一种基于嵌入式操作系统的通用定时器及其工作方法。
【背景技术】
[0002]在嵌入式产品开发与应用领域,嵌入式操作系统是整个软件产品的技术基础。而嵌入式产品的功能一般都是周期循环执行的,任务设计也都以此为原则。因此每种嵌入式操作系统都提供了灵活多样的软件定时器功能模块,以便于用户的使用。但是每种嵌入式操作系统的设计思想及标准存在差异,导致各自的定时器功能方法及接口函数都不相同。导致由于操作系统升级或变化,用户应用程序需要不断变化,以适应定时器接口的变化,从而增加了产品升级维护的费用,同时影响了产品的稳定性和可靠性。
[0003]另外对于嵌入式操作系统,一般都是采用基于tick的调度机制,tick是嵌入式操作系统的最小时间单位;根据系统设计特点和要求,tick的时间单位一般在5miT20mS范围;tick值过小,任务调度过于频繁,任务上下文切换所导致的CPU系统开销较大,整个系统的效率大大降低;而tick过大,系统的实时性会有所降低。在一些强实时系统中,对于要求精度较高的定时功能,如Ims的软件定时功能,一般的嵌入式操作系统定时器都无法满足。
【发明内容】
[0004]本发明要解决的技术问题是利用嵌入式操作系统的通用资源和方法,提供一种跨嵌入式操作系统的通用定时器及其工作方法,并可以实现普通定时和精确定时功能,其中普通定时的定时单位为tick,精确定时的时间单位为1ms。
[0005]本发明为解决这一问题所采取的技术方案是:
一种基于嵌入式操作系统的通用定时器,包括普通定时器管理任务模块、普通定时器列表、精确定时器中断处理模块、精确定时器列表、定时器计数信号量通知模块以及硬件定时器,而所述的硬件定时器连接定时器计数信号量通知模块和精确定时器中断处理模块,所述的定时器计数信号量通知模块在操作系统tick定时中断处理模块中,所述的定时器计数信号量通知模块连接普通定时器管理任务模块,所述的所述的普通定时器管理任务模块连接普通定时器列表,所述的精确定时器中断处理模块连接精确定时器列表,所述的括普通定时器管理任务模块、精确定时器中断处理模块连接应用任务;所述的普通定时管理任务模块对普通定时器进行定时管理,每次收到定时器计数信号量通知模块发送的通知后,扫描普通定时器列表,通过消息方式通知定时器关联的应用任务;所述的普通定时器列表记录通用定时器信息,并通过通用定时器创建、删除接口实现增加和删除,普通定时器任务定时修改每个普通定时器中的当前计数;所述的精确定时器中断处理模块对所有精确定时器进行定时管理,通过消息方式通知该定时器关联的应用任务;所述的精确定时器列表记录精确定时器信息,并通过精确定时器创建、删除接口实现增加和删除,精确定时器中断处理模块定时修改每个普通定时器中的当前计数;所述的定时器计数信号量通知模块在操作系统tick定时中断处理模块中执行,每个tick时间间隔通过计数信号量方式通知普通定时管理任务模块;所述的硬件定时器由CPU提供,为定时器计数信号量通知模块、普通定时管理任务模块提供时钟信号。
[0006]一种基于嵌入式操作系统的通用定时器工作方法,包括以下步骤:
(i )根据嵌入式操作系统接口创建普通定时管理任务,并启动此任务,创建普通定时器计数信号量;
(ii)根据CPU硬件定时器资源特点,初始化精确定时硬件定时器,启动硬件定时器功倉泛;
(iii)在操作系统tick定时中断函数中,每次tick定时到来后,执行一次定时器计数信号量通知模块,以信号量方式通知普通定时管理任务,开始处理普通定时器列表;
(iv)根据需要为应用任务创建所需要的普通定时器或精确定时器,设定定时时间间隔,记录此定时器与应用任务的对应关系;
(V)普通定时管理任务以阻塞方式等待普通定时器计数信号量,一旦信号量有效后,检查普通定时器列表中的每一个定时器,对于定时时间间隔满足条件的定时器,以消息方式通知此定时器关联的应用任务,应用任务收到消息后,执行对应的普通定时处理内容;
(vi)每次硬件定时中断发生时,精确定时器中断处理模块执行一遍所有精确定时器的扫描处理,对于定时时间间隔满足条件的精确定时器,以消息方式通知此定时器关联的应用任务,应用任务收到消息后,执行对应的精确定时处理内容。
[0007]本发明具有的积极效果是:
本发明的基于嵌入式操作系统的通用定时器及其工作方法中,利用嵌入式操作系统的通用技术,完成通用定时器功能,实现了跨操作系统的应用;可以根据应用要求,实现基于tick单位的普通定时和基于Ims单位的精确定时功能,在保证系统功能的前提下,提高了CPU效率和性能,优化了系统,保证了系统实时性要求;通用定时器的实现,没有增加过多的软硬件资源开销和占用,普通定时器和精确定时器可以灵活组合应用,而且可以根据实际应用需求,分别进行功能裁剪,避免了不必要的资源浪费;采用了跨操作系统平台的设计思想,消除了由于操作系统变化而对应用层软件的影响,减少了应用软件对具体操作系统的依赖,便于软件的层次化和模块化设计,提高了应用软件的复用性。
【专利附图】
【附图说明】
[0008]图1是本发明的总体结构示意图;
图2是本发明的程序执行流程图。
【具体实施方式】
[0009]以下参照附图及实施例对本发明进行详细说明。
[0010]如图1所示,一种基于嵌入式操作系统的通用定时器,包括普通定时器管理任务模块1、普通定时器列表2、精确定时器中断处理模块3、精确定时器列表4、定时器计数信号量通知模块5以及硬件定时器6 ;
①所述的普通定时管理任务模块I负责对所有普通定时器的定时管理,每次收到定时器计数信号量通知模块发送的通知后,开始扫描一遍整个普通定时器列表,一旦发现某个定时器时间到,则通过消息方式通知该定时器关联的应用任务。
[0011]②所述的普通定时器列表2记录所有通用定时器信息,包括:定时器计数阀值、定时器计数当前值、关联的任务号、定时器状态。通过通用定时器创建、删除接口实现对此定时器列表的增加和删除;普通定时器任务定时修改每个普通定时器中的当前计数。
[0012]③所述的精确定时器中断处理模块3负责对所有精确定时器的定时管理,一旦发现某个精确定时器时间到,则通过消息方式通知该定时器关联的应用任务。为了实现本功能,CPU需要提供一个硬件定时器资源,此硬件定时器为普通定时管理任务模块、普通定时管理任务模块提供时钟信号,并根据需要设置定中断时间隔为lms。考虑到消息通知及任务上下文切换时间,精确定时器建议最小时间单位为不小于Ims,对于更快速的定时功能,建议采用直接的硬件定时中断处理方式。
[0013]④所述的精确定时器列表4记录所有通用定时器信息,包括:定时器计数阀值、定时器计数当前值、关联的任务号、定时器状态。通过通用定时器创建、删除接口实现对此定时器列表的增加和删除;精确定时器中断处理模块定时修改每个普通定时器中的当前计数。
[0014]⑤所述的定时器计数信号量通知模块5在操作系统tick定时中断中执行,每个tick时间间隔通过计数信号量方式通知普通定时管理任务。
[0015]为了满足应用软件实时性的不同要求,本发明设计了两种定时器,即普通定时器和精确定时器。普通定时器的定时单位为tick,用来完成定时周期较长以或定时精度较低的功能。精确定时器的定时单位为1ms,在满足系统实时性的前提下也可以进行适当调整,精确定时器用来完成定时周期较短或定时精度较高的功能。两种定时器通过各自的接口函数创建完成后,分别保存在普通定时列表和精确定时器列表中。普通定时管理任务完成所有普通定时器的统一管理,此任务的优先级一般要高于所有的应用层任务,以尽量保证定时精度,普通定时管理任务的执行频率由定时器计数信号量通知模块控制,即每一个tick的时间间隔执行一次。精确定时器中断处理模块完成所有精确定时的统一管理,执行周期为硬件定时器的lms。两种定时器结合使用,可以满足应用任务的功能需求,系统执行效率和实时性得到充分保证。
[0016]一种基于嵌入式操作系统的通用定时器工作方法,包括以下步骤:
步骤1、根据嵌入式操作系统接口,创建普通定时器计数信号量和普通定时管理任务;为保证定时执行精度,任务优先级一般高于所有的应用层任务;启动此任务;
步骤i1、根据CPU硬件定时器资源特点,初始化硬件精确定时定时器,设定定时中断间隔为lrns,启动硬件定时器功能;也可以根据需要调整硬件定时器的中断间隔,考虑到中断响应延时以及消息发送延时,建议不小于1ms,以避免增加CPU的负荷;
步骤ii1、在操作系统tick定时中断函数中,每次tick定时到来后,执行一次通用定时器计数信号量通知模块,以信号量方式通知普通定时管理任务,开始处理普通定时器列表;
步骤iv、根据需要为应用任务创建所需要的普通定时器或精确定时器,设定定时器阀值、定时器运行状态,记录本定时器与应用任务的对应关系;
步骤V、普通定时管理任务以阻塞方式等待普通定时器计数信号量,一旦信号量有效后,检查普通定时器列表中的每一个定时器,对于定时时间间隔满足条件的定时器,以消息方式通知此定时器关联的应用任务,应用任务收到消息后,则执行对应的普通定时处理内容;为了保证定时精度,防止被其它任务打断,对于定时器循环扫描处理过程,需要进行防止任务抢占的保护处理;
步骤V1、每次硬件定时中断发生时,精确定时器中断处理模块执行一遍所有精确定时器的扫描处理,对于定时时间间隔满足条件的精确定时器,以消息方式通知此定时器关联的应用任务,应用任务收到消息后,则执行对应的精确定时处理内容。
[0017]所述的普通定时器和精确定时器各自都有唯一的标示,并记录其所属的应用任务标示。每个任务根据需要,可以创建一个或多个定时器,并将所需的功能分配到不同的定时功能中,在不需了解具体操作系统接口函数的前提下,便于用户的灵活应用。
[0018]在CPU负荷不超过40%的前提下,普通定时器精度误差不超过± lms,精确定时器定时精度误差不超过±0.lms。
[0019]采用独立的普通定时器管理任务完成普通定时器的管理,而不是在tick定时中断中直接处理的优点是,保证嵌入式操作系统任务调度的时效性,不会影响操作系统的实时性。
[0020]如图2所示,本发明的基于嵌入式操作系统的通用定时器工作方法应用于计算机编程时包括以下处理流程步骤:
(i)开始(SI);
(ii)创建普通定时器信号量、普通定时器任务(S2);
(iii)初始化硬件精确定时器及终端(S3);
(iv)操作系统tick定时中断函数中增加定时器计数信号量通知模块(S4);
(V)创建需要的精确定时器和普通定时器(S5);
(vi)以阻塞方式等待普通定时器信号量(S6);
(vii)禁止任务抢占(S7);
(viii)获取普通定时器列表头(S8);
(ix)本有效定时器当前计数值是否为O(S9);
(X)消息通知定时器对应的任务(SlO);
(xi)定时器当前计数减I(SlO);
(xii)定时器全部处理完成(S12);
(xiii)恢复任务抢占(S13);
(xiv)切换到下一个有效定时器(S14)。
[0021]本发明具有的积极效果是:
本发明的基于嵌入式操作系统的通用定时器及其工作方法,利用嵌入式操作系统的通用技术,完成通用定时器功能,实现了跨操作系统的应用;可以根据应用要求,实现基于tick单位的普通定时和基于Ims单位的精确定时功能,在保证系统功能的前提下,提高了CPU效率和性能,优化了系统,保证了系统实时性要求;通用定时器的实现,没有增加过多的软硬件资源开销和占用,普通定时器和精确定时器可以灵活组合应用,而且可以根据实际应用需求,分别进行功能裁剪,避免了不必要的资源浪费;采用了跨操作系统平台的设计思想,消除了由于操作系统变化而对应用层软件的影响,减少了应用软件对具体操作系统的依赖,消除二者的直接耦合,便于软件的层次化和模块化设计,提高了应用软件的复用性。
【权利要求】
1.一种基于嵌入式操作系统的通用定时器,包括普通定时器管理任务模块(1)、普通定时器列表(2)、精确定时器中断处理模块(3)、精确定时器列表(4)、定时器计数信号量通知模块(5)以及硬件定时器(6),其特征在于:所述的硬件定时器连接定时器计数信号量通知模块(5)和精确定时器中断处理模块(3),所述的定时器计数信号量通知模块(5)在操作系统tick定时中断处理模块中,所述的定时器计数信号量通知模块(5)连接普通定时器管理任务模块(1),所述的所述的普通定时器管理任务模块(1)连接普通定时器列表(2),所述的精确定时器中断处理模块(3)连接精确定时器列表(4),所述的括普通定时器管理任务模块(1)、精确定时器中断处理模块(3)连接应用任务; 所述的普通定时管理任务模块(1)对普通定时器进行定时管理,每次收到定时器计数信号量通知模块(5)发送的通知后,扫描普通定时器列表(2),通过消息方式通知定时器关联的应用任务; 所述的普通定时器列表(2)记录通用定时器信息,并通过通用定时器创建、删除接口实现增加和删除,普通定时器任务定时修改每个普通定时器中的当前计数; 所述的精确定时器中断处理模块(3)对所有精确定时器进行定时管理,通过消息方式通知该定时器关联的应用任务; 所述的精确定时器列表(4)记录精确定时器信息,并通过精确定时器创建、删除接口实现增加和删除,精确定时器中断处理模块(3)定时修改每个普通定时器中的当前计数; 所述的定时器计数信号量通知模块(5)在操作系统tick定时中断处理模块中执行,每个tick时间间隔通过计数信号量方式通知普通定时管理任务模块(1); 所述的硬件定时器(6)由CPU提供,为定时器计数信号量通知模块(5)、普通定时管理任务模块(1)提供时钟信号。
2.根据权利要求1所述的基于嵌入式操作系统的通用定时器,其特征在于:所述的通用定时器信息或所述的精确定时器信息包括定时器计数阀值、定时器计数当前值、关联的任务号、定时器状态。
3.根据权利要求1所述的基于嵌入式操作系统的通用定时器,其特征在于:所述的普通精度定时器中断时间隔为ltick,精确定时器中断时间间隔为1ms。
4.一种基于嵌入式操作系统的通用定时器工作方法,其特征在于:包括以下步骤: (i )根据嵌入式操作系统接口创建普通定时管理任务,并启动此任务,创建普通定时器计数信号量; (ii)根据CPU硬件定时器资源特点,初始化精确定时硬件定时器,启动硬件定时器功倉泛; (iii)在操作系统tick定时中断函数中,每次tick定时到来后,执行一次定时器计数信号量通知模块,以信号量方式通知普通定时管理任务,开始处理普通定时器列表; (iv)根据需要为应用任务创建所需要的普通定时器或精确定时器,设定定时时间间隔,记录此定时器与应用任务的对应关系; (v)普通定时管理任务以阻塞方式等待普通定时器计数信号量,一旦信号量有效后,检查普通定时器列表中的每一个定时器,对于定时时间间隔满足条件的定时器,以消息方式通知此定时器关联的应用任务,应用任务收到消息后,执行对应的普通定时处理内容; (vi)每次硬件定时中断发生时,精确定时器中断处理模块执行一遍所有精确定时器的扫描处理,对于定时时间间隔满足条件的精确定时器,以消息方式通知此定时器关联的应用任务,应用任务收到消息后,执行对应的精确定时处理内容。
5.根据权利要求4所述的基于嵌入式操作系统的通用定时器工作方法,其特征在于:所述的步骤(i)中所述的普通定时器管理任务优先级高于应用任务优先级。
6.根据权利要求4所述的基于嵌入式操作系统的通用定时器工作方法,其特征在于:所述的步骤(i)中所述的设定定时中断间隔为1ms。
7.根据权利要求4所述的基于嵌入式操作系统的通用定时器工作方法,其特征在于:所述的工作方法应用于计算机时采用以下流程步骤: (i)开始(S1); (ii)创建普通定时器信号量、普通定时器任务(S2); (iii)初始化硬件精确定时器及终端(S3); (iv)操作系统tick定时中断函数中增加定时器计数信号量通知模块(S4); (v)创建需要的精确定时器和普通定时器(S5); (vi)以阻塞方式等待普通定时器信号量(S6); (vii)禁止任务抢占(S7); (viii)获取普通定时器列表头(S8); (ix)本有效定时器当前计数值是否为0(S9); (X)消息通知定时器对应的任务(S10); (xi)定时器当前计数减1(S10); (xii)定时器全部处理完成(S12); (xiii)恢复任务抢占(S13); (xiv)切换到下一个有效定时器(S14)。
【文档编号】G06F9/48GK104268020SQ201410504029
【公开日】2015年1月7日 申请日期:2014年9月28日 优先权日:2014年9月28日
【发明者】曾庆钊, 李政, 吴苏卓 申请人:天津凯发电气股份有限公司