VXWORKS 几种定时机制

编程过程中,出于需要,大家或多或少要用到定时/延时。VxWorks下提供了几种定时/延时机制,根据收集的一些资料和VxWorks相关文档,在学习和上机实验的基础上,对它们的使用以及我所遇到的问题做一个总结,希望对大家能有所帮助。不正确之处,恳请斧正。A 1 taskDelay-k~ taskdelay()提供了一个简单的任务睡眠机制,也常用于需要定时/延时机制的应用中。它的格式是STATUS taskDelay(int ticks /* number of ticks to delay task */),可以看出使用该函数实现延时的单位为tick(一般系统中一个tick都是ms级的)。在VxWorks下可以这样使用taskDelay()函数:taskDelay(sysClkRateGet()*1)。函数sysClkRateGet()返回系统的时钟速率,单位是tick数/每秒(利用函数sysClkRateSet()可以改变系统的时钟速率)。在POSIX中有一个与taskdelay()相对应的函数――nanosleep()(下文中有介绍)。这两个函数仅仅是延时单位不同,效果是相同的。&aM 利用taskdelay(),可以将调用的任务移动到具有相同优先级的就绪队列尾部。特别的,可以通过调用taskdelay(0),将cpu交给系统中其他相同优先级的任务。延时为0的调用只能用于taskdelay()中,nanosleep()认为这种调用是错误的。8 taskdelay()会导致调用的任务在指定的延时期间(以ticks计数)放弃cpu,使任务处于DELAY状态(因此,其不能用于中断服务程序中)。通常其受到任务调度的影响,但在等待一些与中断无关联的外部条件时,其是有用的。如果调用的任务受到一个信号,指出其没有被阻塞或被忽略,taskDelay()将返回ERROR,并在信号处理程序运行后设置errno为EINTR。WEPim 2 WatchDog.ePUPo VxWorks提供了一个看门狗定时器(watchdog timer)机制,利用提供的函数,任何任务都可以创建一个看门狗定时器,经过指定的延时后,实现在系统时钟ISR的上下文中运行指定的程序。在VxWorks中,看门狗定时器作为系统时钟中断服务程序的一部分来维护。因此,与看门狗定时器相联系的函数运行在系统时钟中断级。在使用看门狗定时器实现定时/延时时,经过指定的时间,应用程序中断在系统时钟中断优先级上面,然而,如果内核不能立即执行这个中断服务程序,这个任务就被排队到tExcTask 工作队列中去,处在 tExcTask 工作队列中的任务的优先级为 tExcTask (通常是 0)。对于使用看门狗定时器的中断服务程序,仍然必须遵守一般的ISR所要遵守的规则。pu 通过wdCreate( )可以创建一个看门狗定时器。调用wdStart()启动定时器,延时参数以tick为单位,同时还要指定定时完成后要调用的程序。如果你的应用程序需要多个看门狗函数,使用wdCreate( )为每个需求产生独立的看门狗ID。因为对于给定的看门狗ID,只有最近的wdStart()有效。在指定的tick计数到达之前,要取消一个看门狗计时器,可以调用wdCancel()实现。x 每调用一次wdStart(),看门狗定时器只执行一次。对于一些要求周期性执行的应用程序。要获得该效果,定时器函数本身必须通过递归调用wdStart()来重新启动定时器。C_/p 利用看门狗定时器,调用的任务不会被阻塞:因为wdStart()调用是立即返回的。使用该方法实现延时,关联函数所受限制太大,好多系统调用不可用,郁闷也…HAkir 3 timer(POSIX) 9cA 3.1 timer~Kn, VxWorks提供IEEE的POSIX 1003.1b标准定时器接口。使用这种定时器机制,在指定的时间间隔后,任务向自身发信号。定时器是建立在时钟和信号之上。n 程序可以创建创建、设置和删除一个定时器。当定时器到达期限,将向任务发送默认的信号(SIGALRM)。< 使用timer的一般流程:Xr;,0n /* 创建定时器 */[]9,* if(timer_create(CLOCK_REALTIME,0,&mytimer)==ERROR)=s return(ERROR);) /* 用户程序与定时器相连 */{K if(timer_connect(mytimer,(VOIDFUNCPTR)my_handler,0)==ERROR)w^bW' return(ERROR);b /* 设置定时器值 */Kh_kR9 if(timer_settime(mytimer,0,&value,0)==ERROR)g return(ERROR);dU /* 一段延时 */|KF 。。。。。。&uf5 /* 删除定时器 */h v- if (timer_delete(mytimer)==ERROR) Zul return(ERROR);H@< 在使用定时器时,容易忽略定时结束后任务向自身发信号这一处理步骤。即在定时结束后,要向创建定时器的任务发送信号,如果此时任务已不存在,定时程序将不能执行,提示的错误是“interrupt: timerWdHandler : kill failed (timer=******,tid=******,errno=0x16)”(有一个《关于timer(定时器)中几个函数的疑问!》帖子,其中提到该问题)。在上机时,我设置了一个较长时间的定时器,在创建定时器任务中使用相等的延时操作(taskDelay()、nanosleep()随便哪个都行),此时程序正常运行,定时结束后正确地执行关联到定时器的程序;再次运行,在定时结束前,我在shell下删除掉创建定时器的任务,定时结束后又出现上述的错误。因此,使用POSIX定时器时,一定要注意不能让创建定时器的任务在触发定时程序之前结束,否则。。。准备reset吧bbQ 3.2 nanosleep()k3] 函数nanosleep()的功能与VxWorks提供的taskDelay()类似,nanosleep()允许指定以秒和纳秒为单位的定时/延时时间,taskDelay()以tick作为定时/延时时间。两者只是延时单位不同,而不是精度不同,都由系统时钟频率决定。与taskDelay()一样,使用nanosleep()实现定时/延时的任务也受调度的影响,在实际操作中一定要注意这一点。*K*b 使用nanosleep()时,定时参数使用的是结构itimerspe中的it_value,可以指定it_value中的秒和纳秒为定时/延时时间。函数的使用较为简单,不再赘述。Ud0F 4 其它rI*y 使用带有超时值timeout的msgQReceive()、semTask()也可以实现延时(有使用这种方式来进行延时的人吗?不有吗?有吗?不有吗?有吗?不有吗?。。。)。% 该方法将阻塞任务,让其等待超时,利用该方法实现延时可以使用函数semTask(…,timeout)、msgQReceive(…,…,…,timeout)。调用任务被放进阻塞队列中(注意,使用semTask和msgQReceive时,time的值不能是NO_WAIT,如果指定NO_WAIT的话,将立即返回,也就达不到延时的效果了^_^)。如果你希望任务不被阻塞,还能继续执行,sorry,此法不行,使用看门狗吧。T`fQ 当阻塞的任务满足继续执行的条件后,将被放入ready队列。这里要注意的是,任务被放入ready队列并不意味着立刻就被执行。想想看,如果比它高优先级的任务正在占用资源,或也在等资源,那么…延时将是不确定的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/435374.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

git 每次都要输入用户名密码_Git向GitHub提供代码

一.前期准备工作首先建立一个GitHub账号&#xff0c;这个账号和密码邮箱要记住&#xff0c;如果忘记了也可以找回&#xff0c;会麻烦一些。在官网下载一个Git,可以自己根据默认进行安装&#xff0c;这样也是没有问题的&#xff0c;如果系统盘的空间不够大&#xff0c;可以安装到…

C# Socket 入门5 UPD 结构体 与 C++ 通信

1. 同样&#xff0c; 我们先看看这一个比简单的 结构体 代码 usingSystem;usingSystem.Collections.Generic;usingSystem.Text;usingSystem.Runtime.InteropServices;namespaceCSharp_Socket_5{ ///<summary>///通信消息格式 ///</summary>[Serializable] …

坐标点获取并显示

在工作当中经常遇到根据名称获得相应坐标的情况,我们可以利用百度地图api来获取对应地点的坐标。 例如: 目前我们手中有需要获取大学坐标的名称,想要获取其坐标,并将其进行可视化显示。 以下是要查询的大学名称(现实当中可以是几千条数据) 以下是我们查询的结果 …

LSGO软件技术团队2015~2016学年第十周(1102~1108)总结

团队简述&#xff1a; LSGO软件技术团队成立于2010年10月&#xff0c;主要从事的应用方向为互联网与移动互联网&#xff08;UI设计&#xff0c;前端开发&#xff0c;后台开发&#xff09;&#xff0c;地理信息系统&#xff1b;研究方向为数据分析与计算机视觉。成立几年来为学校…

matlab中GUI的属性检查器中的XLimMode是什么_如何在Matlab中使用GUI做一个简易音乐播放器? ---- (二)GUIDE...

咕咕怪由于昨天有重要的事情所以咕了一天的文章 &#xff08;感觉写得挺基础的&#xff0c;对各个部分有一定了解的童鞋可以直接跳过了解的部分用Matlab做一个app有几种办法呢&#xff1f;同样的&#xff0c;帮助文档告诉了我们答案&#xff1a;三种。英语好的童鞋看完这张图应…

VxWorks下几种定时延时方法的小结

1 taskDelay taskdelay()提供了一个简单的任务睡眠机制&#xff0c;也常用于需要定时/延时机制的应用中。 它的格式是 STATUS taskDelay(int ticks /* number of ticks to delay task */ )&#xff0c; 可以看出使用该函数实现延时的单位为tick&#xff08;一般系统中一个…

C#中ToString格式大全

C 货币 2.5.ToString("C") &#xffe5;2.50 D 十进制数 25.ToString("D5") 00025 E 科学型 25000.ToString("E") 2.500000E005 F 固定点 25.ToString("F2") 25.00 …

DDMMSS.SS转为DD

有时候甲方会给我们一些坐标&#xff0c;但是在arcgis中是无法直接显示的 这是因为该格式是DDMMSS.SS的格式&#xff0c;而arcgis支持的是DD格式的&#xff0c;其中dd单位是度&#xff0c;mm单位是分&#xff0c;ss.ss单位是秒 所以要在arcgis中显示我们需要将其转换为DD的格式…

LSGO软件技术团队2015~2016学年第十一周(1109~1115)总结

团队简述&#xff1a; LSGO软件技术团队成立于2010年10月&#xff0c;主要从事的应用方向为互联网与移动互联网&#xff08;UI设计&#xff0c;前端开发&#xff0c;后台开发&#xff09;&#xff0c;地理信息系统&#xff1b;研究方向为大数据处理与机器学习。成立几年来为学校…

maven springboot 除去指定的jar包_SpringBoot的运行机制

SpringBoot打包机制先看一眼spring-boot的maven插件打包后的target目录&#xff1a;其中有一个.jar.original的文件&#xff0c;一个.jar文件&#xff0c;其中.jar.original才是原始的jar包&#xff0c;而.jar文件是经过spring-boot的maven插件处理过后的jar&#xff0c;spring…

VxWorks中Timer机制

[摘要] Timer是实时操作系统的一个重要组成部分。本文结合近阶段的学习和实验情况&#xff0c;对VxWorks中的时间函数和定时器作了一些探讨。主要介绍了Timer的机制&#xff0c;相关的函数&#xff0c;并给出了一些具体的例子。 一. Tick Tick是指每秒中定时器中断的次数。POS…

LINK : fatal error LNK1104: 无法打开文件“LIBCD.lib”

出现这类问题一般是由于所运行的项目是VC6&#xff08;或者vs2003)创建的&#xff0c;而后又用VS2005或者更高版本工具打开项目导致的&#xff0c;原因都是因为LIBCD.lib文件被更改了.要解决问题的话&#xff0c;只要在链接设置那里忽略它就没问题了。 解决办法是&#xff1a; …

TVDI计算流程

TVDI计算过程 下载数据的网站: https://ladsweb.modaps.eosdis.nasa.gov/search/ 所需数据modis的16天的ndvi数据(MOD13A2)和每8天的LST数据(MOD11A2) 北半球选择Terra,南半前选择Aqua,因为两个卫星旋转是相对的,太阳高度角不同,会有些许误差 利用modis处理工具(MRT)…

LSGO软件技术团队2015~2016学年第十二周(1116~1122)总结

团队简述&#xff1a; LSGO软件技术团队成立于2010年10月&#xff0c;主要从事的应用方向为互联网与移动互联网&#xff08;UI设计&#xff0c;前端开发&#xff0c;后台开发&#xff09;&#xff0c;地理信息系统&#xff1b;研究方向为大数据处理与机器学习。成立几年来为学校…

POSIX定时器

最强大的定时器接口来自POSIX时钟系列&#xff0c;其创建、初始化以及删除一个定时器的行动被分为三个不同的函数&#xff1a;timer_create()(创建定时器)、timer_settime()(初始化定时器)以及timer_delete(销毁它)。 创建一个定时器&#xff1a; int timer_create(clockid_t …

python append函数_让你python代码更快的3个小技巧!速度提高了一倍还多

大家好&#xff01;今天呢&#xff0c;我们来聊一聊如何加速你的 python 代码。Python 语言的优点可以列举出许多&#xff0c;语法简单易懂、模块丰富、应用广泛等等。但是世界上没有有完美的东西&#xff0c;python 一个明显缺点就是运行速度慢&#xff0c;至少跟 C 语言没法比…

扣扣保镖我喜欢

扣-扣-保-镖还是挺好用的&#xff0c;上次360召回之后&#xff0c;网上的下载链接都失效了&#xff0c;不过今天偶然发现我的硬盘上还有一份。。就打开试试&#xff0c;结果没事的哈。 qq版本&#xff1a;qq2010正式版 sp2.1(1861) 趣盘下载地址&#xff1a;http://oskycar.qup…

栅格计算面积

1.进行栅格重分类 2.重分类 3.打开属性&#xff0c;查看像元大小 4.打开属性表 5.添加字段 6.打开字段计算器 7.计算结果如下&#xff08;单位一般为平方米&#xff09;

autotools使用

Makefile固然可以帮助make完成它的使命&#xff0c;但要承认的是&#xff0c;编写Makefile确实不是一件轻松的事&#xff0c;尤其对于一个较大的项目而言更是如此。那么&#xff0c;有没有一种轻松的手段生成Makefile而同时又能让我们享受make的优越性呢&#xff1f;本节要讲au…

LSGO软件技术团队2015~2016学年第十三周(1123~1129)总结

团队简述&#xff1a; LSGO软件技术团队成立于2010年10月&#xff0c;主要从事的应用方向为互联网与移动互联网&#xff08;UI设计&#xff0c;前端开发&#xff0c;后台开发&#xff09;&#xff0c;地理信息系统&#xff1b;研究方向为大数据处理与机器学习。成立几年来为学校…