这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 求助:关于tickGet()函数的问题

共6条 1/1 1 跳转至

求助:关于tickGet()函数的问题

菜鸟
2007-03-21 19:46:16     打赏

如题

我在shell下运行tickGet()函数,其返回值是284

我想请问它的单位是什么啊?

我自己认为单位应该是ms,不知道对不对

如果我想精确到微妙或者纳秒,应该怎么办呢?

请好心人帮帮我吧

谢谢




关键词: 求助     关于     tickGet     函数     问题    

菜鸟
2007-03-22 16:06:00     打赏
2楼
是tick,一般是10毫秒

菜鸟
2007-03-22 20:45:00     打赏
3楼

现在我想把单位精确到0.01或者0.1ms

我应该怎么做呢?


菜鸟
2007-03-23 04:22:00     打赏
4楼

tickGet()返回的是从系统启动开始tick计数后的总的tick数目。

tick是啥,是“滴答”,它是一个数值量,本身不能代表时间。

如果说要知道tick增加一个代表多少时间的话,那就要看系统的时钟率了。

在Shell下,sysClkRateGet()可以返回这个始终率的值。比如60。啥意思呢,就是1秒钟产生60个tick。操作系统调度是基于这个tick的,这在硬件上是个优先级很高(除了NMI以外都比它低)的时钟中断。如果你的始终率是60那么一个tick代表的时间就是1000ms/60=16.67ms。也就是tick增加一个所花的时间16.67毫秒。那么你要想你的tick是1ms一下的话,那不就是把时钟率设置成1000就可以了,因为1000ms/1000=1嘛。可以用sysClkRateSet(1000)来达到此目的。

设置成1000好使吗?就看你的需求了。嵌入式系统嘛,啥都你自己整,时钟率高了,操作系统调度频率就很高,软件响应能力增强,但硬件中断的处理就不一定是实时的了。

时钟率不是越大越好。但太小了绝对好不起来。

1ms还是不够用?用辅助时钟吧。它也中断。用起来一样。

不过,值得注意的是,千万别整很多东西挂到一个1秒钟执行1000次以上的中断里面,CPU耗不起啊。所以1ms以下的精确定时,推荐用硬件做。注意啊,实时操作系统是软件,怎么说它也是软的。


菜鸟
2007-03-29 06:27:00     打赏
5楼

谢谢楼上的解释

但是我现在是想把时间精确到us,或者至少0.01ms

但是用sysClkRateSet()函数,好像最多只能设置到8000吧

还是不能达到这个精度啊

用中断貌似太麻烦了

55555555555


菜鸟
2007-03-29 16:36:00     打赏
6楼
使用时间戳吧,宏定义是INCLUDE_TIMESTAMP,在你的定时器文件里面按照templatetimer.c的时间戳函数写。原理是读定时器的counter寄存器,不浪费额外的资源。

共6条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]