看门狗鼠标延迟2延迟怎么办

在应用编程的时候,通常会碰到需要一个任务在特定的延时之后执行一个指定的动作,如等待外设以确保数据可靠,控制扬声器发声时间以及串口通信超时重发等。这就需要利用定时器机制来计量特定长度的时间段。
&&& vxWorks作为实时嵌入式系统,提供多样的定时接口函数。下面结合我的项目经历和网上的参考资料列举一些常用的定时方式,并说明其注意事项。
一、taskDelay
&&& taskDelay(n)使调用该函数的任务延时n个tick(内核时钟周期)。该任务在指定的时间内主动放弃CPU,除了taskDelay(0)专用于任务调度(将CPU交给同一优先级的其他任务)外,任务延时也常用于等待某一外部事件,作为一种定时/延时机制。在没有中断触发时,taskDelay能很方便地实现,且不影响系统整体性能。例如写数据至EEPROM,EEPROM需要一个内部擦除时间(最大擦除时间为l0ms)。以下所提及的一个tick都假设为16.67
ms(1/60 s)。可以简单地调用taskDelay(2)来保证数据擦写完成。按理说taskDelay(1)就足以保证,为什么需要taskDelay(2)呢?
&&& 这正是taskDelay使用的一个缺陷,使用时需要注意。taskDelay(n)表示任务延时至第n个系统时钟到来的时刻,如图1所示。如果在A时刻调用taskDelay(1)仅延时5 ms,则在B时刻taskDelay(1)就刚好是一个tick周期。可见需要10 ms的延时就必须调用taskDelay(2)才能实现。taskDelay有接近一1个tick的误差存在,taskDelay(n)实际上是延时(n-1)tick~n
tick的时间。延时精度为l/n,延时1s就是taskDelay(60)的误差极限为1.6%,而taskDelay(1)的误差极限将是100%。
&&& 使用taskDelay需注意的另外一点是:即使经过n个tick,调用延时的任务也不保证返回执行状态,可能有更高或相同优先级的任务占用了CPU。看了上面的介绍,就可以用它模拟实现Sleep函数了,代码如下:
ST_VOID&sMsSleep&(ST_LONG&ms)&&{&&&&&&int&m&=&sysClkRateGet();&&&&&&m&=&1000/m;&&&&&&m&=&ms/m&+&1;&&&&&&taskDelay(m);&&}&&
ST_VOID sMsSleep (ST_LONG ms)
int m = sysClkRateGet();/*获取内核时钟频率*/
m = 1000/m;
m = ms/m + 1;/* taskDelay(n)实际上是延时(n-1)tick~n*tick的时间*/
taskDelay(m);
下面是taskDelay的延时示意图:
二、WatchDog
&&& VxWorks提供了一种通用的看门狗定时器机制。利用提供的函数,任何任务都可以创建一个看门狗定时器,经过指定的延时后,实现在系统时钟ISR的上下文中运行指定的程序。需要注意的是,看门狗定时触发的程序是在中断级别上执行,而不是在任务的上下文中。因此,看门狗定时挂接的程序编写有一定的限制,这个限制条件与中断服务程序的约束是一样的。比如,不能使用获取信号量的语句,以及像printf()这样的I/O系统函数。
&&& 通过wdCreate()可以创建一个看门狗定时器。调用wdStart()启动定时器,延时参数同taskDelay一样以tick为单位,同时还须指定定时完成后要调用的程序。如果应用程序同时需要多个看门狗函数,则应使用wdCreate()产生多个独立的看门狗ID。因为对于给定的看门狗ID,通过wdStart()只能关联一个看门狗函数。在指定的tick计数到达之前,要取消一个看门狗计时器,可以通过调用wdCancel()实现。每调用一次wdStart(),看门狗定时器只执行一次,因此对于一些要求周期性执行的应用程序,要获得该效果,则定时器函数本身必须通过递归调用wdStart()来重新启动定时器。
&&& 如果利用看门狗定时器实现延时,则存在与taskDelay一样的精度上的缺陷,以tick为基准.并且看门狗关联的函数所受的限制很大,这也是使用不便的一个方面。不过启动看门狗的任务不会被阻塞,因为wdStart()调用立即返回并继续执行。
三、sleep/nanosleep
&&& sleep()和nanosleep()是VxWorks提供的延时函数接口。但是在实际应用时,默认是没有添加的,得手动添加。sleep以s为单位,nanosleep可以提供更精确的延时;传参是时钟的结构体,参数可以精确到ns,但实际上只能做到大于或等于这个时问。因为skep或nanosleep函数延时的时间基准仍是tick,调用此函数的任务处于任务延时状态,这点与taskDelay()一致。不同的地方是,taskDelay()是用于任务调度,taskDelay(O)有其自身的含义,而sleep(O)则是没有意义的。前面提过,taskDelay(n)延时时间为(n-1)tick~ntick,而sleep/nanosleep则保证实际延时时间大于或等于设定的时间参数。实验代码如下:
void&testTimer(int&sec,int&nsec)&&{&&&&&&struct&timespec&tm;&&&&&&tm.tv_sec&=&&&&&&&tm.tv_nsec&=&&&&&&&nanosleep(&tm,NULL);&&}&&
void testTimer(int sec,int nsec)
tm.tv_sec =
tm.tv_nsec =
nanosleep(&tm,NULL);
四、高精度时钟sysTimeStamp
&&& sysTimeStamp()也称“时间戳”。是通过系统时钟实现的。刚开始也觉得费解,系统时钟的定时周期就是tick,怎么实现高精度时钟呢?通过读BSP底层代码发现,sysTimeStamp其实是通过读取该定时器的当前计数值来获取高精度定时的。通过sysTimestampFreq()函数可以得到系统时间戳的频率,它往往反映的是CPU定时器的基准频率。当然,如此高的分辨率只能是一个理想值,不同的系统不一定都能实现。毕竟该时间戳的实现方式有一个致命的弱点:通过查询方式。系统时钟定时中断是以ticb:为单位的,进一步提高分辨率读取定时器计数值(CPU的一个特殊功能寄存器),只能是查询方式实现。代码示例如下:
void&msDelay(int&ms)&&{&&&&&&int&t,t1,t2;&&&&&&t1&=&sysTimestamp();&&&&&&&do{&&&&&&&&&&t&=&0;&&&&&&&&&&&&while(t&&&sysTimestampFreq()/1000)&&&&&&&&&&{&&&&&&&&&&&&&&t2&=&sysTimestamp();&&&&&&&&&&&&&&&&if(t2&&&t1)&&&&&&&&&&&&&&&&&&t&+=&(t2-t1);&&&&&&&&&&&&&&else&&&&&&&&&&&&&&&&&&t&+=&t2;&&&&&&&&&&&&&&t1&=&t2;&&&&&&&&&&}&&&&&&}while(ms--);&&}&&
void msDelay(int ms)
int t,t1,t2;
t1 = sysTimestamp(); /*记录上一轮的时间戳*/
/*计数清零*/
while(t & sysTimestampFreq()/1000)
t2 = sysTimestamp();
/*读取当前时间戳*/
if(t2 & t1)
t += (t2-t1);
}while(ms--);
&&& 这种定时方式比较占用系统资源,且只适用于短时间的定时,但是实现方便。为确保定时准确,应在锁定中断情况下调用sysTimestamp;否则,应考虑使用sysTimes-tampLock函数。
五、辅助时钟
&&& 辅助时钟是利用目标板上CPU的另一个定时器(除了系统时钟之外)中断实现的。它可以灵活配置实现高分辨率的定时,而且容易实现ms级甚至μs级定时。VxWorks提供了一系列与系统时钟相同的操作接口,用户可以方便地挂接自己的中断处理函数,时钟分辨率的高低取决于硬件定时器的精度和用户中断函数的长短。要将辅助时钟作为精确的延时机制(如ms级延时),可以通过这种方式实现。初始化程序先调用SysAuxClkRateSet()函数设置辅助时钟中断周期为1ms(一般在contig.h文件中AUX_CLK_RATE_MIN和AUX_CLK_RATE_MAX之间,对中断频率作了限定,如果需要可以对此宏定义修改),再通过ysAuxClkConneet()?将用户处理函数连接到辅助时钟中断上,用户处理函数可以为SemGive(semTimer)释放一个同步信号量。编写一个msDelay(intms)作为其他任务调用接口,函数代码如下:
void&msDelay(int&ms)&&{&&&&&&int&i;&&&&&&sysAuxClkEnable();&&&&&&&&for(i&=&0;i&&&i++)&&&&&&&&&&semTake(semTimer);&&&&&&&&sysAuxClkDisable();&&}&&
void msDelay(int ms)
sysAuxClkEnable();
/*启动辅助定时器*/
for(i = 0;i &i++)
semTake(semTimer);
/*等待定时中断释放信号量*/
sysAuxClkDisable();
&&& 这种方式能实现十分精确的定时,调用延时的任务处于任务阻塞状态。但是使用上仍存在缺陷,不能实现多个任务同时调用,且需要CPU的一个时钟资源,如果没有多余的时钟,那么这一方法就不能实现。
&&& 另外还需要注意一点:Tornado的调试工具Browser一&SpyChart的实现原理是利用辅助定时器产生中断,并记录当前被中断的任务,由抽样数据反映各任务CPU占用率的情况。因此如果调试程序中使用了辅助定时器,那么使用Spy Chart时定时处理函数会被重新挂接,原有定时挂接的程序将得不到进行。反之,如果在Spy Chart运行之后挂接辅助定时处理函数,那么Spy Chart的运行将出现问题。实验发现,运行Spy
Chart后重新挂接辅助定时处理函数,Spy Chart即使选中自动刷新,各任务状态也不会更新。
&&& VxWorks提供的定时接口(不一定专门用于定时,也可间接实现)远不只这些。具体使用哪种方式,应根据其精度、资源状态和优先级要求而定。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:258300次
积分:4102
积分:4102
排名:第5569名
原创:93篇
转载:441篇
评论:12条
(8)(1)(1)(6)(2)(7)(4)(6)(5)(3)(6)(1)(4)(2)(8)(7)(5)(7)(1)(1)(1)(1)(2)(3)(11)(3)(18)(19)(21)(1)(6)(14)(11)(22)(54)(3)(11)(6)(23)(12)(12)(28)(22)(2)(17)(19)(24)(6)(17)(16)(32)(17)后使用我的收藏没有帐号?
所属分类: &
查看: 9|回复: 1
看门狗2有延迟怎么办
发表于 昨天&14:01
看门狗2有延迟怎么办
感觉第二代画面很不错,你说的问题我也遇到过,特玩看门狗2专区早就有答案了:/zt/132145.html/
点这里&&&&
发表于 昨天&14:01
感觉第二代画面很不错,你说的问题我也遇到过,特玩看门狗2专区早就有答案了:
指尖每日首次回帖可以赚5金币()收起回复展开回复
点这里&&&&
秀一秀那些年我们玩过的点卡,周边豪礼等你拿!《看门狗2》(Watch Dogs 2)是一款动作冒险类单机游戏,由育碧开发制作,即将登陆法国市场。不过该游戏的PC版本具体的上市时间将比预期的延迟两个星期。因此PC版本的玩家们还需要再等上一段时间。近日,游戏制作、发行和代销商育碧娱乐软件公司在其官方的博客中给玩家们带来了一个最新的消息:育碧旗下最新大作《看门狗2》(Watch Dogs 2)PC版在全球的发行时期原定于日,不过PC版本的玩家们还需要再耐心的等上一段时间,因为该作的发行时间已经延迟至日。对于此次跳票两周的时间,育碧给出的理由是:制作方将进一步完善游戏以及保证游戏能够在范围更广的各式硬件下流畅运行,从而让PC平台的玩家们得到最佳的体验。育碧表示PC版延期将提供更强画质,游戏优化,而且将公布PC版硬件配置。在《看门狗2》游戏中,玩家将扮演居住在旧金山的年轻天才黑客马可仕·哈洛威(Marcus Holloway),他与神秘黑客组织的成员们一起实施黑客行动,通过自身所掌握的技术手段以及人物之间的配合,来击溃犯罪分子用来监听和掌控市民信息的大规模操作系统。PC版最低配置要求操作系统 : Windows(R) 7、Windows 8.1、Windows 10(仅支持64位)处理器 : Intel Core i5-2400 @ 2.5 GHz/AMD FX- GHz内存:6GB显卡:NVIDIA GeForce GTX 660(2GB)/AMD Radeon HD 7870(2GB)或更高硬盘空间:50GB推荐配置要求操作系统:Windows(R) 7、Windows 8.1、Windows 10(64位)处理器:Intel Core i5 3470 @ 3.2 GHz|AMD FX 8120 @ 3.9 GHz内存:8GB显卡:NVIDIA GeForce GTX 780(3Go)、NVIDIA GeForce GTX 970(4Go)、NVIDIA GeForce GTX 1060(3Go)或更高、AMD Radeon R9 290(4Go)硬盘空间:50GB以上配置对于现如今的玩家们来说都是比较容易接受的。虽然育碧此前已经表示,《看门狗2》将会继承前作的一切优点,系统自由度更高,让玩家可以用自己想要尝试的方式探索世界。具体表现为游戏的叙事和角色部分减少,创造元素更丰富,给玩家的选择性也会更多。但是,我们仍旧是迫不及待地想看到《看门狗2》游戏上市之后的反响。《看门狗2》将于日全球上线并登陆Xbox ONE、PlayStation 4游戏平台,随后将于日登陆PC平台。
(本文由科技世界网编译,如需转载,请注明来源自&)
关键字相关信息:
根据市场调研机构NDP集团的最新销售数据…
《使命召唤13:无限战争》将于2016年…用看门狗2加速器奇游解决看门狗2延迟卡顿掉线
  看门狗2故事是这样的,剧情开始于美国的芝加哥,玩家将要扮演的是一名资深黑客AidenPierce,因为家人被坏人所杀后,决心在城市中使用自己的技术来消灭所有的坏人,惩奸除恶。在这个非常依赖着电子设备的都市之中,Pierce可以肆意的通过手机控制周围的所有电子设备,发电机、红绿灯、地下电缆等等,需要依靠电脑控制的设备都可以进行控制;
  故事到了这里是不是感觉很炫酷,但故事也在这里静止了;WHY?网络不给力,导致看门狗2延迟高,看门狗2卡顿,看门狗2掉线了;故事需要继续,就用看门狗2加速器奇游,来解决看门狗2延迟卡顿掉线等问题!
  奇游联机加速器采用全球领先的云计算加速技术,所有流量传输与拥塞的公网完全隔离,看门狗2所用的专属高速通道,目前仅用于跨国公司、金融企业以及BAT这样的行业巨头!
  用了看门狗2加速器奇游,故事就这样再次开始了......
  》》》《《《
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。}

我要回帖

更多关于 看门狗2什么时候出 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信