当前位置:首页 > 嵌入式 > 嵌入式硬件
[导读]1 概 述VxWorks是WindRiver公司开发的高性能实时嵌入式操作系统内核。在应用软件开发过程中经常会用到定时器。VxWorks下要实现定时功能有2个途径:一,借助taskDelay函数实

1 概 述

VxWorks是WindRiver公司开发的高性能实时嵌入式操作系统内核。在应用软件开发过程中经常会用到定时器。VxWorks下要实现定时功能有2个途径:一,借助taskDelay函数实现;二,使用VxWorks提供的看门狗(watchdog)。使用taskDelay函数实现定时器的缺点在于它是基于任务的,任务优先级会导致定时不准。看门狗基于系统时钟中断,定时精度大大优于前者,但是对用户的回调函数有诸多限制(如不允许使用semTake、printf等需要等待获取某种资源的函数,否则会引起死机)。另外,看门狗只触发一次回调函数,如果用户需要周期定时器就需要重新启动看门狗。

本文设计了基于看门狗机制的异步通用定时器,并根据实际需要设计了周期性定时和一次性定时两种定时器。异步是指定时器运行于任务中,对用户没有任何限制。异步通用定时器提供类似于Windows下定时器的操作接口,简单、方便。

2 VxWorks下的看门狗

VxWorks提供看门狗机制,允许将希望若干时间延迟后执行的用户函数连接到看门狗,在定时时间到达后由看门狗自动执行。看门狗机制由操作系统维持在系统时钟中断,连接到看门狗的函数同样运行在系统时钟中断服务程序中。如果操作系统由于种种原因(如在系统时钟中断前的中断或者内核状态),将不能立即执行的函数存放在tExcTask任务的队列中,则队列中的函数将以tExc-Task任务的优先级运行(通常为0)。操作系统对中断服务程序的各种限制同样适用于连接到看门狗的用户函数,如不能使用printf、semTake等。

对看门狗的操作函数有4个:创建看门狗函数,WDOGID wdCreate(void);启动看门狗函数,STATUS wdStart(WDOG_ID wdId,int delay,FUNCPTR pRoutine,intparameter);删除看门狗函数,STATUS WdDelete(WDOG_ID wdld);取消看门狗计时函数,STATUS wdCancel(WDOG_ID wdld)。

看门狗的简单使用如下:

 

首先创建看门狗,然后在启动看门狗时连接用户函数并设置延迟时间。上面程序中的 interval即为延迟时间,单位为系统时钟的tick数。缺省情况下,系统时钟每秒的tick数为60。当interval为1时,即延迟1/60 s后执行usRFunc。系统时钟的tick数可以通过sysClkRateSet函数设置。

3 异步通用定时器的设计

3.1 设计思想

虽然看门狗提供的定时机制相对简单易用,但还有许多局限性:①定时时间的单位为tick数,而不是通常使用的s或者ms。②用户函数运行在系统时钟中断服务程序中,而不是运行在任务的上下文中。这给用户函数带来许多限制(比如用户函数中不能使用内存分配、获取信号量、printf打印输出等),在这些限制下某些功能可能就无法实现。③看门狗的触发是一次性的,而通常需要周期性的定时器。④相对于Windows下的定时器接口,看门狗接口不够简洁明了。异步通用定时器的设计基于看门狗,并在此基础上做进一步的封装,提供类似于Windows的使用方式。系统时钟每秒的tick数可以通过 sysClkRateSet函数设置,一般设置为1 000,即每个tick代表1 ms。这样就可以提供分辨率为ms级的定时器,对大多数应用而言可以满足使用要求。每个定时器对应一个看门狗,同时对应一个任务,使得用户函数运行在任务中,而不是在中断中,这样可以避免操作系统对中断处理函数的种种限制。具体的做法是:在生成定时器时,启动看门狗开始定时,同时创建一个任务等待一个计数信号量(该信号量初始为空,任务处于PEND状态);当定时时间到达时看门狗释放该信号,激活任务,在任务中调用用户函数。这样做的优点在于,提高了效率,减轻了负载,减少了中断中的运算(仅仅是释放信号量);尽管多创建了一个任务,但是在定时器没有触发时任务仍处于PEND状态,对资源占用很小。

3.2 接口设计

提供类似于Windows的接口函数,定时器的唯一索引是id号,操作定时器均通过id完成。分为2种类型定时器:周期性定时器和一次性定时器。周期性定时器可以周期性地触发。一次性定时器则只触发一次,类似于倒计时定时器,触发后看门狗自动删除,相应的任务自动退出。在用户对定时器模块进行初始化后,用户可以在程序的任何地方调用定时器提供的接口。

 

3.3 具体实现

3.3.1 对看门狗的封装

基于程序设计上的考虑,将定时器的管理控制和看门狗的具体操作分开,对看门狗进行封装,CClkGenerator类封装了看门狗的所有操作,包括看门狗的创建、删除、取消和启动,保存定时器id、类型、定时周期等。值得注意的是:看门狗的回调函数并不是用户的回调函数,而是看门狗管理控制中提供的统一回调函数,回调函数中的参数为定时器的索引号。封装代码如下:

 

从类定义可以看出,用户并不能直接使用CClkGen-erator。也就是说,该类对用户而言是不可见的,屏蔽了对看门狗的直接操作,只有定时器管理控制模块才可以对其进行操作。

3.3.2 定时器管理与控制

定时器管理与控制模块负责模块初始化、多个定时器相关参数的存储管理、定时器任务的安全退出,以及用户接口的实现。

定时器的主要数据结构:定时器控制结构和存储结构。

 

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

 

[!--empirenews.page--]

用户在调用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的定时使用硬件辅助时钟中断更为合适,但是要注意操作系统对中断处理函数的限制。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭