关 闭

新闻中心

EEPW首页 > 工控自动化 > 设计应用 > VxWorks下的异步通用定时器设计

VxWorks下的异步通用定时器设计

作者:时间:2009-12-15来源:网络收藏

使用C++标准模板库中的map实现对的存储。第1个参数为的索引号,第2个参数为控制结构。使用map可以方便地实现基于定时器索引号的存储管理和索引号的查找。使用map的定时器存储示意图如图1所示。

本文引用地址:http://www.eepw.com.cn/article/163412.htm


用户在调用SetTimer函数时,创建一个初始状态为空的计数信号量timerArrv,同时生成一个任务timerTask等待该信号量,此时任务状态为PEND;实例化一个CClk-Generator对象,创建看门狗启动定时器。当定时器超时时,释放timerArrv信号量,解除阻塞在timerArrv上的任务,回调用户函数完成一个完整的定时过程。定时器的典型运行过程如图2所示。

图2中最底下的虚线指向启动看门狗后的中断处理流程。中间部分表示定时器任务运行过程,可见用户回调函数是运行在任务空间中。“回调函数释放信号量”到定时器任务semTake”的虚线表示释放信号量使任务解锁。


4 定时器的应用
定时器管理控制模块是用户的唯一接口,使用Single-ton模式。只要调用CTimerCtrl::GetTimerCtrl()就可以完成对定时器的初始化,除对定时器进行相关操作之外,还包括通过sysClkRateSet函数设置系统时钟每秒的tick数为1000。下面的例子包含2个定时器:一个是1 sN期性定时器;另一个是周期为5 s的一次性定时器。

结 语
从应用实例中可以看出,定时器的使用方法和Windows下的定时器没有太大区别,接口简单清晰。定时器可以应用于定时精度为ms的绝大部分应用程序中,对于精度要求高于ms的定时使用硬件辅助时钟中断更为合适,但是要注意操作系统对中断处理函数的限制。


上一页 1 2 3 下一页

评论


相关推荐

技术专区

关闭