技术领域
[0001] 本
发明设计到嵌入式系统定时器技术,特别涉及到一种嵌入式系统定时器实现方法。
背景技术
[0002] 在嵌入式系统中通常都会采用实时
操作系统,实时操作系统依赖于系统时钟进行任务切换的控制。系统时钟是特定的周期性中断,系统时钟的周期取决于不同的实时操作系统需求,通常嵌入式系统的实时操作系统的系统时钟周期一般为10~200ms。系统时钟使得
内核可以将任务延时若干个系统时钟周期,以及当任务等待事件发生时,提供等待超时的依据。系统时钟的周期越小,系统调度的时间
精度越高,但由于每个系统时钟周期都会产生中断,因而带来的系统额外开销就越大。
[0003] 系统时钟的基准时钟触发是由嵌入式系统的
硬件定时器提供的,硬件定时器同时还为嵌入式系统的
软件定时器提供时钟源。操作系统可以创建多个软件定时器,软件定时器的最小时间片取决于硬件定时器的最小时间片(软件定时器的超时时间长度为硬件定时器最小时间片的整数倍)。操作系统可以在需要的时候执行软件定时器的创建、打开、关闭、删除操作,为了方便实现,操作系统管理软件定时器的一种方法是采用软件定时器链表的形式来管理软件定时器。软件定时器链表中各软件定时器根据的剩余超时时间长度顺序排列,剩余超时时间小的软件定时器排在链表前面,剩余超时时间大的软件定时器排在链表后面。硬件定时器每次超时时,都会对软件定时器链表中的各软件定时器剩余超时时间长度进行
修改(将软件定时器剩余超时时间长度减去本次硬件定时器超时时间长度作为该软件定时器的剩余超时时间长度);触发满足超时条件(剩余超时时间长度≤0)的软件定时器的定时中断(将满足超时条件的软件定时器从软件定时器链表中删除,触发该软件定时器高级中断)。
[0004] 嵌入式系统中不同的应用、事件可能存在不同的定时精度要求;从上述描述可以看出,嵌入式系统的定时精度取决于硬件定时器的精度;因此,硬件定时器的精度必须能够满足嵌入式系统中最高的定时精度。
[0005] 例如,对于长期演进/时分同步码分多址(简称,LTE/TD)双模基带系统,LTE协议事件需要1ms级别的定时精度,而TD协议事件仅需要10ms级别的定时精度。
[0006] 对于存在多种定时精度要求的嵌入式系统。
现有技术的定时器实现方法通常采用一个能够满足系统最高定时精度要求的硬件定时器作为系统的基准定时器,以提供操作系统所需的系统时钟和软件定时器的时钟源。这种实现方法能够满足嵌入式系统的定时器需求,但存在下述的问题:
[0007] 由于作为基准定时器的硬件定时器需要一直处于启动的状态,基准定时器在其每个最小时间片都会产生硬件定时中断,在没有高定时精度要求的软件定时器激活的情况下,基准定时器会产生大量的无效中断(即,当前的硬件定时中断超时处理中,无软件定时器超时时刻到达,系统判决后,直接退出不触发任何软件定时器中断。),例如,对于LTE/TD双模基带系统,如果使用最小时间片为1ms的硬件定时器作为基准定时器,与使用10ms的硬件定时器作为基准定时器相比,单位时间内其基准定时器的硬件定时中断次数增加了10倍,而在实际使用中发现,其中90%的硬件定时中断为无效中断。这些无效中断浪费了大量的系统资源,降低了系统效率。
发明内容
[0008] 有鉴于此,本发明提出了一种嵌入式系统定时器实现方法,以减少无效中断数量,提高系统效率。
[0009] 本发明的技术方案包括:
[0010] 设置一个主定时器及一个辅定时器;将主定时器作为系统的基准定时器;
[0011] 主定时器超时时,将主软件定时器剩余超时时间长度减去主定时器最小时间片长度;触发满足超时条件的软件定时器定时中断;如果有软件定时器剩余超时时间长度小于主定时器最小时间片长度,设置辅定时器定时长度为剩余超时时间长度最小的软件定时器的剩余超时时间长度,启动辅定时器;
[0012] 辅定时器超时时,将辅软件定时器剩余超时时间长度减去辅定时器定时长度;触发满足超时条件的软件定时器定时中断;如果有软件定时器剩余超时时间长度小于主定时器最小时间片长度,设置辅定时器定时长度为剩余超时时间长度最小的软件定时器的剩余超时时间长度;否则,关闭辅定时器;
[0013] 其中,所述主定时器为定时精度不低于实时操作系统系统时钟精度要求的硬件定时器;所述辅定时器为定时精度不低于嵌入式系统最高定时精度要求的硬件定时器;
[0014] 所述主软件定时器指剩余超时时间长度不小于主定时器最小时间片长度Tl的软件定时器;所述辅软件定时器指剩余超时时间长度小于Tl的软件定时器。
[0015] 优选的,所述各软件定时器组成软件定时器链表,软件定时器链表中各软件定时器根据的剩余超时时间长度从小到大顺序排列。
[0016] 所述设置辅定时器定时长度为剩余超时时间长度最小的软件定时器的剩余超时时间长度进一步包括:
[0017] 将软件定时器链表中第一个软件定时器的剩余超时时间长度设置为辅定时器定时长度。
[0018] 所述方法进一步包括增加新软件定时器过程:实时操作系统建立新软件定时器,并将新软件定时器插入所述软件定时器链表。
[0019] 所述将新软件定时器插入所述软件定时器链表进一步包括:
[0020] 对于剩余超时时间长度x<tl的新软件定时器:
[0021] 如果所述软件定时器链表的第一个软件定时器剩余超时时间长度y≥Tl,将所述新软件定时器插入所述第一个软件定时器之前,设置辅定时器定时长度为x,开启辅定时器;
[0022] 如果y<Tl,且x>th,修正所述新软件定时器剩余超时时间长度=x+y-th,并根据修正后的新软件定时器剩余超时时间长度将该新软件定时器插入软件定时器列表相应
位置;
[0023] 如果y<Tl,且x≤th,将软件定时器列表中各剩余超时时间长度小于Tl的软件定时剩余超时时间长度分别设置为该软件定时器剩余超时时间长度-y+th;将所述新软件定时器插入所述软件定时器链表第一个软件定时器之前;将辅定时器定时长度设置为x;
[0024] 对于x≥tl的新软件定时器:将所述新软件定时器剩余超时时间长度修正为x+Tl-tl;根据修正后的剩余超时时间长度将该新软件定时器插入所述软件定时器链表相应位置;
[0025] 所述tl为主定时器剩余超时时间长度,th为辅定时器剩余超时时间长度。
[0026] 所述方法进一步包括软件定时器删除过程:所述实时操作系统删除软件定时器,将删除的软件定时器从所述软件定时器链表中删除。
[0027] 所述将删除的软件定时器从所述软件定时器链表中删除包括:
[0028] 当所述删除的软件定时器是所述软件定时器链表的第一个软件定时器且该软件定时器的剩余超时时间长度小于主定时器最小时间片长度时;
[0029] 如果所述软件定时器链表中没有其他剩余超时时间长度小于主定时器最小时间片长度的软件定时器,关闭辅定时器。
[0030] 从所述软件定时器链表中删除该删除的软件定时器。
[0031] 所述将删除的软件定时器从所述软件定时器链表中删除进一步包括:
[0032] 当所述删除的软件定时器是所述软件定时器链表的第一个软件定时器且该软件定时器的剩余超时时间长度小于主定时器最小时间片长度时;
[0033] 如果所述软件定时器链表中还有其他剩余超时时间长度小于主定时器最小时间片长度的软件定时器,将软件定时器链表第二个软件定时器的剩余超时时间长度修正为y2-y+th;设置辅定时器的定时长度为y2-y+th;
[0034] 其中,所述y2为软件定时器链表第二个软件定时器剩余超时时间长度;所述y为软件定时器链表第一个软件定时器的剩余超时时间长度,th为辅定时器剩余超时时间长度;
[0035] 从所述软件定时器链表中删除该删除的软件定时器。
[0036] 本发明的技术方案将定时精度较低的主定时器作为系统基准硬件定时器为提供系统时钟,在有软件定时器剩余超时时间小于主定时器最小时间片时才启动定时精度较高的辅定时器为定时精度高的软件定时器提供硬件定时。有效的减少了硬件定时器的无效中断次数,提高了系统效率。
附图说明
[0038] 图2是本发明辅定时器中断服务流程图;
[0039] 图3是建立新软件定时器优选实施方式流程图;
[0040] 图4本发明删除软件定时器优选实施方式流程图;
具体实施方式
[0041] 为进一步说明本发明的技术方案,下面给出具体
实施例并结合附图详细说明。
[0042] 具体实施例
[0043] 本实施例为本发明嵌入式系统定时器实现方法的一种优选实施方式,包括:
[0044] 1、设置一个主定时器及一个辅定时器;将主定时器作为系统的基准定时器;
[0045] 其中,所述主定时器为定时精度能够满足实时操作系统系统时钟精度要求的硬件定时器;所述辅定时器为定时精度能够满足嵌入式系统最高定时精度要求的硬件定时器;
[0046] 2、主定时器超时服务流程如图1所示:
[0047] 201、对主软件定时器,将该主软件定时器剩余超时时间长度-Tl作为该主软件定时器的剩余超时时间长度;
[0048] 所述主软件定时器指剩余超时时间长度不小于Tl的软件定时器;
[0049] 202、触发满足超时条件的软件定时器定时中断;
[0050] 203、如果有软件定时器剩余超时时间长度小于主定时器最小时间片,设置辅定时器定时长度为剩余超时时间长度最小的软件定时器的剩余超时时间长度,启动辅定时器;
[0051] 3、辅定时器超时服务流程如图2所示:
[0052] 301、对辅软件定时器,将该辅软件定时器剩余超时时间长度-辅定时器定时长度作为该辅软件定时器剩余超时时间长度;
[0053] 所述辅软件定时器指剩余超时时间长度小于Tl的软件定时器;
[0054] 302、触发满足超时条件的软件定时器定时中断;
[0055] 303、如果有软件定时器剩余超时时间长度小于主定时器最小时间片,设置辅定时器定时长度为剩余超时时间长度最小的软件定时器的剩余超时时间长度;否则,关闭辅定时器;
[0056] 本发明优选使用软件定时器链表管理系统的各软件定时器,软件定时器链表中各软件定时器根据的剩余超时时间长度从小到大顺序排列。
[0057] 在使用软件定时器链表管理软件定时器的优选方案中,步骤303中可以直接将软件定时器链表中第一个软件定时器的剩余超时时间长度设置为辅定时器定时长度。
[0058] 本发明还提供了一种优选的软件定时器增加方法,实时操作系统创建新软件定时器,并将新软件定时器插入所述的软件定时器链表中,一种优选的将新软件定时器插入软件定时器链表的实施方式如图3所示:
[0059] 401判断新软件定时器剩余超时时间长度x与当前主定时器剩余超时时间长度tl之间的关系;
[0060] 402、如果新软件定时器剩余超时时间长度x小于所述主定时器剩余超时时间长度tl;执行步骤403,否则执行步骤406;
[0061] 403如果所述软件定时器链表的第一个软件定时器剩余超时时间长度y≥Tl,执行步骤404,否则执行步骤405;
[0062] 404、将新软件定时器插入所述第一个软件定时器之前,设置辅定时器定时长度为x,开启辅定时器;
[0063] 405如果x>th,修正所述新软件定时器剩余超时时间长度=x+y-th,并根据修正后的新软件定时器剩余超时时间长度将该新软件定时器插入软件定时器列表相应位置;否则,将软件定时器列表中各剩余超时时间长度小于Tl的软件定时剩余超时时间长度分别设置为该软件定时器剩余超时时间长度-y+th;将所述新软件定时器插入所述软件定时器链表第一个软件定时器之前;将辅定时器定时长度设置为x;
[0064] 406、将所述新软件定时器剩余超时时间长度修正为x+Tl-tl;根据修正后的剩余超时时间长度将该新软件定时器插入所述软件定时器链表相应位置;
[0065] 本发明还提供了一种优选的软件定时器删除方法,实时操作系统删除软件定时器,并将该软件定时器从所述软件定时器链表中删除。一种优选的将软件定时器从软件定时器链表中删除的实施方式如图4所示:
[0066] 501、判断所删除的软件定时器是否是软件定时器链表的第一个软件定时器,如果是,执行步骤502,否则执行步骤504;
[0067] 502、如果所删除的软件定时器剩余超时时间长度小于主定时器最小时间片长度,执行步骤503,否则执行步骤504;
[0068] 503、如果所述软件定时器链表中没有其他剩余超时时间长度小于主定时器最小时间片长度的软件定时器,关闭辅定时器;
[0069] 本步骤还可以优选的包括,如果所述软件定时器链表中还有其他剩余超时时间长度小于主定时器最小时间片长度的软件定时器,将软件定时器链表第二个软件定时器的剩余超时时间长度修正为y2-y+th;设置辅定时器的定时长度为y2-y+th;
[0070] 其中,所述y2为软件定时器链表第二个软件定时器剩余超时时间长度;所述y为软件定时器链表第一个软件定时器的剩余超时时间长度,th为辅定时器剩余超时时间长度;
[0071] 504、从所述软件定时器链表中删除该删除的软件定时器。
[0072] 本领域的一般技术人员显然应该清楚并且理解,本发明方法所举的以上实施例仅用于说明本发明方法,而并不用于限制本发明方法。在不背离本发明方法的精神及其实质的情况下,本领域技术人员当可根据本发明方法做出各种相应的改变或
变形,但这些相应的改变或变形均属于本发明方法的
权利要求保护范围。