摘要:在TD—LTE多模基带系统中,不同的网络模式协议时间对定时器的要求有所不同。实时时延处理是通信协议的基本组成部分,直接体现协议的时序关系。而定时又是时延的核心内容,故定时器在通信协议的开发中有着至关重要的作用。本文描述了一种嵌入式系统定时器的实现方法,能有效地减少系统无效中断次数,提高系统效率。
关键词:基带系统;嵌入式系统;定时器;系统效率
引言
在嵌入式系统中,通常都会采用实时操作系统,而实时操作系统依赖于系统时钟进行任务切换的控制。系统时钟是特定的周期性中断,系统时钟的周期取决于不同的实时操作系统需求,通常嵌入式实时操作系统的系统时钟周期为10~200 ms。系统时钟使得内核可以将任务延时若干个系统时钟周期,在当前任务等待事件发生时,提供等待超时依据。系统时钟的周期越小,系统调度的时间精度越高,但由于每个系统周期都会产生中断,因而带来的系统额外开销越大。在本文中提出了一种嵌入式系统中定时器的实现方法,在能够准确反映协议内容的前提下,减少无效中断次数,解决多模系统下高效与高精度定时器冲突问题,提高定时器的实现效率,从而提高整个系统的效率。
1 原始定时器方案
在不同的嵌入式系统中,不同的应用、事件可能存在不同的定时精度的要求,而嵌入式系统的定时精度取决于硬件定时器的精度,因此硬件定时器的精度必须能够满足嵌入式系统中最高的定时精度。对于TD—LTE/TD—SCDMA双模基带系统,TD—LTE协议栈事件需要1 ms级别的定时精度,而TD—SCDMA协议时间仅仅需要10ms级别的定时精度。
对于存在多种定时精度要求的嵌入式系统,目前的方案对定时器的实现方法是,采用一个能够满足系统最高定时精度要求的硬件定时器作为系统的基准定时器,以提供操作系统所需的系统时钟和软件定时器的时钟源。这种实现方法能够满足大多数系统的定时器需求,但存在问题。
由于作为基准定时器的硬件定时器需要一直处于启动状态,基准定时器在每个最小时间片都会产生硬件定时中断,在没有高定时精度要求的软件定时器激活的情况下,基准定时器会产生大量无效的中断(当前的硬件定时器中断超时处理中,若没有软件定时器超时,则系统判决
后,直接退出,不触发任何软件定时器中断)。
在TD—LTE/TD—SCDMA双模基带系统中,如果使用最小时间片为1 ms的硬件定时器作为基准定时器,与使用10 ms的硬件定时器作为基准定时器相比,单位时间内其基准定时器的硬件定时中断次数增大了10倍;而在实际使用中发现,90%的硬件定时中断是无效中断,这些无效中断浪费了大量的系统资源,降低了系统效率。
2 定时器优化方案
本文提出了一种嵌入式系统定时器实现方法,在系统中设置一个主定时器及一个辅定时器,将主定时器作为系统的基准定时器。主定时器超时的时候,修改剩余超时时间长度,并且剩余超时时间长度不小于主定时器最小时间片的软件定时器,剩余超时时间长度;如果有软件定时器剩余超时时间长度小于主定时器最小时间片,且不为0,则启动辅定时器为该软件定时器提供硬件定时。如果辅定时器超时,则修改剩余超时时间长度小于主定时器最小时间片的软件定时器剩余超时时间长度;如果还有其他软件定时器剩余超时时间长度小于主定时器最小时间片且不为0,修改辅定时器定时长度,否则关闭辅定时器。
2.1 定时器实现原理
系统时钟的基准时钟触发是由嵌入式系统的硬件定时器提供的,硬件定时器同时还为嵌入式系统的软件定时器提供时钟源,操作系统可以创建多个软件定时器,软件定时器的最小时间片取决于硬件定时器的最小时间片(软件定时器的超时时间长度为硬件定时器最小时间片的整数倍)。操作系统可以在需要的时候执行软件定时器的创建、打开、关闭和删除操作,为了方便实现,操作系统管理软件定时器的一种方法是以软件定时器链表的形式来管理软件定时器。
软件定时器链表中各软件定时器根据剩余超时时间长度顺序排序,剩余超市时间长度小的软件定时器排在链表前面,剩余超时时间大的软件定时器排在链表后面。硬件定时器每次超时时,都会对软件定时器链表中的各个软件定时器剩余超时时间长度进行修改(将软件定时器剩余超时时间长度减去本次硬件定时器超时时间长度,作为该软件定时器的剩余超时时间长度)。
在本方案中,设置两个定时器,即主定时器和辅定时器,并将主定时器作为系统的基准定时器。其中,主定时器是低精度硬件定时器,辅定时器为高精度硬件定时器;低精度硬件定时器用于管理系统所有软定时器(包括高精度定时和低精度定时)。高精度硬件定时器用于管理高精度定时装置,并且主定时器的定时精度不低于实时操作系统的系统时钟精度要求的硬件定时器,辅定时器的定时精度不低于嵌入式系统最高定时精度要求的硬件定时器。定时器原理如图1所示。设置系统高精度时间片为TH(TieketHigh),低精度时间片为TL(TicketLow),具体描述如下:
①在操作系统定时器链表中,所有定时器按照剩余超时时间顺序排列。
②系统默认低精度硬件定时器为主定时器,主定时器始终开启,每个周期长度为TL。
③主定时器超时后,系统定时器处理函数检查定时链表,若满足超时条件则启动该定时超时函数,同时对所有定时器剩余超时时间进行减TL操作。
④若链表头定时器不满足超时时间,则仅对所有定时器减TL操作。
⑤若链表定时器剩余超时时间小于TL,即该定时器为TH高精度要求定时器。此时,根据该高精度定时器的剩余超时时间TH,设置启动高精度硬件定时器(即辅定时器)。
⑥辅定时器在TH时间后超时,触发辅定时器超时函数。
系统中若存在连续多个TH定时器,则依据超时顺序依次设置辅定时器,完成对连续多个TH定时器定时激活操作。
本方案将定时器精度较低的主定时器作为系统准硬件定时器。为提高系统时钟,当软件定时器剩余超时时间小于主定时器最小时间片时,才启动定时精度较高的辅定时器,为定时精度高的软件定时器提高硬件定时。这样有效地减少了硬件定时器的无效中断次数,提高了系统效率。定时器原理图如图1所示。
2.2 实现流程
设置一个主定时器和一个辅定时器,则将主定时器作为系统的基准定时器。如果主定时器每次超时,则对软件定时器链表中的软件定时器剩余超时时间长度进行修改,将软件定时器超时时间长度减去主定时器最小时间片长度,作为该软件定时器的剩余超时时间长度。
如果剩余超时时间长度不大于0,则触发满足超时条件的软件定时器定时中断。如果软件定时器剩余超时时间长度小于主定时器最小时间片,则设置辅定时器定时长度为剩余超时时间长度最小的软件定时器的剩余超时时间长度,此时启动辅定时器。主定时器流程如图2所示。
如果辅定时器超时,则将对软件定时器链表中的软件定时器剩余超时时间长度进行修改。将软件定时器剩余超时时间长度减去辅定时器定时长度,作为该软件定时器剩余超时时间长度。如果超时时间长度不大于0,则触发满足条件的软件定时器定时中断。如果软件定时器剩余超时时间长度小于主定时器最小时间片,则设置辅定时器定时长度为剩余超时时间长度最小的软件定时器的剩余超时时间长度;否则,关闭辅定时器。辅定时器流程如图3所示。
2.3 软件定时器的增加
操作系统定时器增加时,根据新定时器的超时时间顺序,插入到系统定时器列表中,同时保证系统定时器剩余超时时间的有序性。若新插入定时器剩余超时时间小于TL,即插入定时器为高精度定时器,需要按照下列流程处理:
①如果插入前定时器列表头的定时器不是高精度定时器,则判断当前链表头定时器的剩余超时时间t是否大于新插入定时器时间x。其中,t为主定时器剩余超时时间;x为新插入定时器剩余超时时间;m为当前时刻,10是指TD—SCDMA的定时精度为10 ms。
②若x<t,则将该定时器插入到定时器列表头中,启动辅助定时器。
③若x≥t,则对新增定时器剩余超时时间按照公式x=x-t+10进行修正,再根据修正的值的大小,将其插入到链表头定时器后链表中,定时器增加流程1如图4所示。
如果插入前定时器列表头的定时器是高精度定时器,定时器增加流程2如图5所示。根据当前辅定时器超时时间时刻t与新插入定时器x超时时间关系进行处理,步骤如下:
①若x<t,则调整辅定时器超时时间为x,同时修正链表中第二个元素剩余超时时间长为y—x。其中,t为辅定时器超时时间时刻,x为新加入定时器剩余超时时间。
②若x≥t,修正新插入辅定时器超时时间为x=x-t,同时根据当前x的值按超时顺序将其插入到队列中。
结语
在嵌入式系统的设计中,很多应用中的时间特性都是很重要的参数,尤其在TD—LTE/TD—SCDMA双模基带系统的开发中显得尤为重要。在基带操作系统中,一般维护的一个定时器列表无法满足定时器需求。若设置定时器时间较短,则可能加重系统中断服务程序的负荷,若设置时间片较长,则无法满足协议时间的精度要求。故本优化方案中,在高精度定时器达到超时时刻时,才启动辅定时器,用辅定时器控制触发高精度定时器的超时动作,减少辅定时器的中断次数。另外,也不需要动态调整主定时器的时钟设置,可以保证操作系统软时钟稳定、准确,能够同时满足多模终端对操作系统定时器的要求。