QNX6.5如何修改时钟频率

那位高手知道如何时钟频率,我在6.5下测试了发现QNX的精度大概在2ms-3ms之间,有没有办法改变,提高他的时钟分辨率,VxWorks是在制作BSP中就可以自定义,不知道QNX可以不,高手给指点一下?

系统的标准时钟是1ms

有ClockPeriod()函数可以修改这个。但提高系统时钟频率会增加系统开销,提得太高的话,会导致用户程序得不到CPU时间。所以 ClockPeriod()我记得有个上限,最快你也只能提到 10us(好像)。

如果你确实需要us级的准确时钟的话,正确的做法是在系统里另找一个高频中断源,用它来做你程序自己的时钟源。

谢谢给予提示,我测试发现,最高到10 us,但是发现,不是很稳定,有时候是+/- 10us, 当设置为100us时候,有时候到+/-200us,不过大多还在100us!

你是怎样测试的?要确定稳定不稳定,你需要挂时钟中断来观察。

如果你只是在程序里设timer,那确实会出现你说的情况。这个,是有意为之,具体你可以看看下面两篇文章。

http://www.qnx.com/developers/articles/article_834_1.html
http://www.qnx.com/developers/articles/article_826_2.html

Thank you!
我的测试很简单,首先设置时钟分辨率,然后就是在usleep(x)前后分别调用ClockCycles()获取usleep消耗的时钟节拍数,通过时钟节拍数来计算usleep(x)真正消耗的时间,理论上计算的值应该是在(x)+/-分辨率的;
也许是我target是在虚拟机,没有在真机,但是现在主频get到的是2.7G,应该不存在;
我会认真阅读你提供的文档,谢谢!

对,你用usleep/sleep()来检查的话,就会有一个tick的差别,这个是实时系统的标准,应该跟虚拟机没关系。

具体原因可以看那两篇文章。Brain Stecher是QNX内核大牛,在那篇文章里对时钟有清楚的介绍。