Chinaunix首页 | 论坛 | 博客
  • 博客访问: 365328
  • 博文数量: 48
  • 博客积分: 1084
  • 博客等级: 少尉
  • 技术积分: 496
  • 用 户 组: 普通用户
  • 注册时间: 2010-12-17 14:09
文章分类

全部博文(48)

文章存档

2014年(2)

2013年(3)

2012年(13)

2011年(24)

2010年(6)

分类: 系统运维

2012-02-09 09:33:00

 Vxworks tick理解
分类: Vxworks 37人阅读 评论(0) 收藏 举报

每个操作系统都有一个定时器timer,它不是指晶振。

     CPU的指令周期,也不是晶振的频率分之一,而是指晶振经时钟发生器出来的频率。

      操作系统总是基于某个时钟节拍来跑的。。。这个节拍的得到往往是通过硬件时钟中断得到,一般来说这个中断的优先级就比NMI低一点点,比其他的都高。。这个中断是共给操作系统用的,操作系统用他来进行调度啊什么的各种处理。

     而在vxWorks中的一个重要参数就是SYS_CLK_RATE这个参数,也就是系统时钟率。。。。它的含义是:系统时钟滴嗒在一秒钟之内发生多少次。比如说,你定义为60,那么系统时钟在1s中将发生60次中断,两次之间的时间差就是1/60s。发生中断后,操作系统可以进行任务切换啊什么的。也就是说,如果你有一个任务被挂起,则至少要过1/60s后被激活---其它中断除外啊。又假如你设置为1000,那么系统时钟1秒发生1000次中断,两个时间差就是1ms。。。而函数sysClkRateGet就是用来获取系统时钟率的,如果你没有调用sysClkRateSet()函数对系统时钟率进行重新设置的话,其返回值应该是你在config.h中定义的SYS_CLK_RATE宏的值。而函数taskDelay()是以tick数目为单位的,比如taskDelay(1)是指将调用该函数的任务延迟1个tick。。那么时间是多少呢,根据你的SYS_CLK_RATE的值,其实际时间不同,但具体时间是1/SYS_CLK_RATE。。。假如SYS_CLK_RATE是1000,那么就是1ms。。如果是60那么就大约是16.67ms。。。通常来讲,vxWorks手册建议不要将时钟率设得太高,否则它就由硬实时变得趋向于软实时了。。因为过高的时钟率使得内核调度频繁进入,可能导致一些低优先级的硬件中断不能得到及时响应。当然,也不要太担心,在x86系统中完全可以设置为1000,这样比较好使,1个tick就是1ms,跟Windows一样。呵呵。。。。。

阅读(5034) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~