VWorks通用定时器设计与实现_第1页
VWorks通用定时器设计与实现_第2页
VWorks通用定时器设计与实现_第3页
VWorks通用定时器设计与实现_第4页
VWorks通用定时器设计与实现_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、VxWorks通用定时器设计与实现摘要:在进行网络通信设备开发时,需要使用通用定时器。本文在研究VxWorks系统看 门狗函数的基础上,提出了基于看门狗函数的定制定时器的设计方法,可以使定制定时器的 最小周期满足网络通信设备开发的需要本文给出了定制定时器实现的思想。1概述VxWorks是Win dRiver公司开发的具有工业领导地位的高性能实时操作系统内核,具有 先进的网络功能,易于设计高效的嵌入式系统目前已成为嵌入式操作系统的首选,并将其 作为通信产品的软件平台。在进行网络通信设备开发时,需要用到定时器,如以周期为m秒对某个端口进行查询、 以周期为n分对某个设备的性能数据进行统计等。而VxW

2、orks只提供了像watchDog(看门 狗),而没有提供一个通用的定时器。本文提出的通用定时器设计方法,占用系统资源少, 运行效率高,并可根据需要定制满足要求的定时器。2通用定时器的基本原理虽然在Vxworks没有提供像windows中的定时器一样好用的定时器,但可以利用 VxWorks的看门狗来实现定时器。对看门狗的操作函数主要有三个:创建看门狗函数 WDOG_ID wdCreate(void);启动看门狗函数 STATUS wdStart(WDOG_ID wdId,int delay, FUNCPTR pRoutine, int parameter);删除看门狗函数 STATUS wdD

3、elete(WDOG_ID wdId)。 通过对看门狗启动函数进行研究发现,如果能够在看门狗的响应函数中重新启动看门狗.那 么就可以实现以一个固定的周期循环执行的定时器。以下是定时器的基本框架:void settimer(i nt in terval) int in_in terval;mn terval=sysClkRateGet()*i nterval;/* 将延时秒数转化为 ticks 数*/gm wdID =wdCreate();/* 创建看门狗 */if(gm_perfHist_wdID = NULL)pri ntf(Could not create watchdog timern)

4、;return ;if(wdStart(gm_wdID,mnterval,(FUNCPTR) action_func, interval) = ERROR)/*启动看门狗*/printf (Error in starti ng rout ine associated with timern);wdDelete(gm_wdlD);/*如果启动看门狗不成功,贝删除看门狗*/retur n;retur n;void actio n_fun c(i nt in terval) int m_i nterval;mn terval=sysClkRateGet()*i nterval;/*将 延时秒数转化为

5、 ticks 数*/ if(wdStart(gm_wdID, mnterval, (FUNCPTR)action_fnnc, interval)= ERROR) /*启动看门狗*/pr intf (Error in starti ng routi ne associated with timer、n);wdDelete(gm_wdID);retur n;/*执行用户函数*/ 用户只需调用settimer并给出以秒为单位的定时器周期,就可以建立一个定时器。3通用定时器设计通过调用settimer可实现一个基本的定时器,但在程序中对定时器的要求比较复杂。如 有可能在运行过程中,要求加人某个需用轮询

6、的函数,这样就要建立一个较为通用的定时器。 3.1通用定时器的设计思想通用定时器应能满足用户的要求.要能动态地将用户需轮询函数加入到定时器的轮询队列 中。要实现动态加载用户需轮询函数,可将用户需轮询函数串接成一个链表(链表的每个结 点称为一个定时器用户)。在每个定时器周期到期时,遍历定时器用户链表,执行用户函数, 这样就可以实现动态加载用户需轮询函数。如果轮询周期与定时器周期相同,那么加入的用户轮询函数,在第一次执行时,其周期将 会小于所要求的轮询周期,在最坏情况下,可能相差近一个周期。要解决这个问题可将定时 器的周期设置为较小,且在定时器用户结点中记录用户的轮询周期和距离轮询周期到期所剩 余

7、时间,在定时器到期时,用剩余时间减去定时器周期,如果结果小于零,就执行用户函数。 用这种方法可以解决第一次执行时的时差较大问题;另一方面,动态加载的用户函数可以以 不同的周期进行轮询。另一个问题是在定时器到期时遍历定时器用户链表并执行相关用户函数时的效率:如果用 户函数执行时间较长(如板间通信),由于函数的执行会影响链表下一个结点函数的执行。为 解决这个问题可以为每个用户函数启动一个任务。但反复地为用户创建、删除任务,会加重系统的开销。解决这个问题可以在创建定时器用户时,就为定时器用户的响应函数创建一个 任务,并将此任务挂起。当要求的轮询周期到期时,唤醒此任务;为了能够正确地对此任务 进行操作

8、,就要在定时器用户结点的数据结构中增加一个关联任务标识。在创建定时器用户 时,由用户指明是否为其响应函数创建关联任务。这样,在定时器遍历定时器用户链表时, 如果检测到关联任务为无效值时,就直接执行用户函数,而不创建新的任务。根据通用定时器的设计思想,可以设计出通用定时器结构如附图所示:时宙通用老和射就锻血仇沏系统初始化时,将设置并启动一个默认的周期为1秒的定时器0,此定时可以满足大部 分用户的要求;如果此定时器不能满足用户的要求,也可以定制自己的定时器,在不需要使 用定制的定时器时,要将其删除,否则由于定时器要占用一定的系统资源,而造成系统资源 的浪费。但系统默认定时器0是无法删除的。用户可以

9、将需要以一定周期运行的函数加入到符合要求的定时器的用户队列中,这样用户 的函数就可以以一定周期运行当用户认为已经加入定时器用户队列的函数,不需要再周期 性运行时,可以将其从队列中删除。3.3通用定时器的数据结构通用定时器的数据结构分为两部分,即定时器数据结构和定时器用户数据结构。定时器数据结构:描述定时器的信息。包括用于标识此定时器的ID、用于分配定时 器用户ID的有效索引值、定时器的周期、定时器所用的看门狗ID以及定时器用户 队列定时器用户数据结构:描述每个加入定时器的用户的信息。主要有定时器用户ID、 用户指定的轮询周期、距离用户指定周期到期剩余时间、用户响应函数及响应函数 所带的参数以及

10、参数长度。为了方便不同用户使用,应将响应函数所带参数设置为 无符号指针,这样用户就可以设置任何一种数据类型。如果用户参数较多,可以采 用结构指针。3.4通用定时器的具体实现通用定时器的实现主要包括下面几类函数:定时器核心实现函数:将定时器的实现框架进行扩充,使其能够以较小的周期运行。当一周期到期时,依次遍历定时器的用户链表,将每个定时器用户结点的剩余时间域减去定时器 周期,如果小于零,说明用户指定的周期已经到期,则执行用户的响应函数。如果此结点的关联任务ID域为一个有效值,则唤醒相应的任务,否则直接执行用 户响应函数。定时器初始化函数:主要完成的操作是首先设置一个全局的定时器链表针,建立一个系

11、 统默认定时器0并启动这个默认定时器,在用户开始使用定时器时,一定要对定时器系统 进行初始化。创建定制定时器函数:在系统初始化后默认创建了一个的定时器,但这个定时器可能不能 完全满足用户的要求,有的可能要求首次运行其响应函数的时差精度小于1秒,因此定制定 时器的周期允许小于1秒。考虑到VxWorks中的实际情况,这里规定定时的最小周期为0.1 秒。wxWorks中的看门狗是以click为时间单位,1秒等于60个click。因此.如果要求的 周期太小,导致定时器占用的CPU时间过长而降低系统性能。要注意的是在vxWorks中不提供强制类型转换,所以,在使用此函数时,如果输入参数为 整数则应以小数

12、形式给出,例如:参数为15,则要输入15.0。删除定制定时器函数:当用户不再使用定制的定时器时,要删除自己创建的定制定时器。 输入的参数为已经存在的定时器的ID创建定时器用户函数:要将一个需轮询的用户函数动态地加入到一个符台要求的定时器 中,必须在这个定时器的定时器用户链表中为这个用户函数创建一个相应的结点,这样就可 以按用户要求的周期去周期性地调用用户响应函数。根据通用定时器设计,如果用户响应函 数执行时间较长则要为其创建一个任务。创建定时器用户时,需要指定以下参数: timerlD:定时器ID,如果使用默认定时器,则设置为0;如果使用用户定制定时器,则要填入由定制定时器函数返回的定时器ID。interval:用户要求的运行周期;actio nFu nc:用户要求周期性运行的函数;param :用户函数的参数指针;pgram_fe n:用户函数参数的长度;createTask:是否为用户响应函数创建一个任务,1:创建,0:不创建。删除定时器用户函数:当用户不再需要对定期轮询某个函数时,要将其从定时器用户链 表中删除。4定时器的应用在使用通用定时器之前,要先初始化定时器系统,这样就会在系统中,生成一个周期为1 秒的定时器,如果用户要

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论