嵌入式时钟管理器的设计方案介绍

时间:2012-08-11来源:网络

 RTX_EXIT_CRITICAL();//退出临界区

  returnOK;//定时器启动成功

  }

  }

  returnERROR;//给定定时器ID无效

  }

  调用该接口函数,即可启动已创建(wdCreate)的软件定时器。当经历ticks节拍后,给定函数wdr将被执行,以完成用户的定时需求。

  (2)定时器守护例程

  

  定时器守护例程wdDaemon被置于前述的钩子函数clkTick_ISR_hook中,以使其周期性执行。由于本例程自身的特点,它应作为clkTick_ISR_hook的最后一个调用函数。本例程是软件定时器实现的核心,而其关键又是对系统栈的调整,为说明其实现流程,给出了如图2所示的wdDaemon的栈(stack)结构。

  由图2可知:wdDaemon的返回地址没有入栈,因其为clkTick_ISR_hook中的最后一个函数调用,故其返回地址被优化掉。wdDaemon将栈顶的8B数据上移2B,然后将定时器指定函数的地址插入腾出的栈空间(2B)中。如此,该地址将会被IRET弹入IP中。由于IRET指令的执行而使中断系统复位以重新响应外部中断,同时也使定时器指定函数在非中断态执行,从而不过分影响系统的响应速度。

  2.3.2 delta列表法

  delta列表法仅维护有效定时器的链表,且链表中的定时器结点按定时剩余时间由小到大排列,使距timeout点最近的定时器作为链表的首结点。链表中定时器结点的顺序由其独特的结点插入算法决定:如有5个定时器,其定时长度分别为10、14、21、32和39,当其组成delta列表时,定时值最小的结点为首结点,其定时存储值为10,而后依序排列,其定时存储值分别为4、7、11、7,即后一个定时器的定时存储值由自己的实际定时值与相邻的前一个定时器的实际定时值相减而得。可见,除首结点外的所有定时器的计数操作在其插入delta列表时就已完成。因而当定时器守护例程确定timeout的定时器时,只需对首结点进行减1或删除的操作,而不需遍历整个列表,从而使delta列表的操作与定时器数量无关。这使delta列表法在大量定时器管理中大显其能。

  该法在系统中实现的数据结构为一静态双向链表:

  structwdNode{

  BOOLflag;

  UINT16ticks;

  VOIDFUNCPTRrout;

1 2 3 4

关键词: 方案 介绍 设计 管理 时钟 嵌入式

加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW

或用微信扫描左侧二维码

相关文章

查看电脑版