2014-03-24 132 views
0

除了tickGet()和tickAnnounce之外,是否还有VxWorks中的系统时间?我想测量指定任务的任务切换之间的时间,但我认为tickGet()的精度不够好,因为开始时的两个tickGet()值和taskSwitchHookAdd函数的结尾始终是相同的!在Vxworks中获取系统时间

回答

0

这取决于你是什么平台上,但如果是86,那么你可以使用:

pentiumTscGet64(); 
+0

所以你知道这个函数有多精确吗? – Zeinab

+0

TSC以CPU的时钟速率递增。 –

2

如果您正在寻找尝试和时间任务切换,我会假设你需要一个计时器至少在微秒(美国)水平。

通常情况下,定时器/时钟这种细粒度只能由你所运行的平台提供。如果您正在使用嵌入式系统,您可以尝试阅读您的电路板支持包(如果有的话)的手册以查看是否有任何功能提供访问电路板上的各种定时器。

的更低水平的解决方案将是弄清楚,在系统上运行的处理器,然后写一些简单的汇编代码来轮询所述处理器的内部时基寄存器(TBR)。这可能需要对正在运行的处理器进行一些研究,但可以轻松完成。 如果您在基于PPC处理器上运行,你可以使用下面的代码读取TBR:

loop: mftbu rx #load most significant half from TBU 
mftbl ry #load least significant half from TBL 
mftbu rz #load from TBU again 
cmpw rz,rx #see if 'old' = 'new' 
bne loop #repeat if two values read from TBU are unequal 

来源:http://www-inteng.fnal.gov/Integrated_Eng/GoodwinDocs/pdf/Sys%20docs/PowerPC/PowerPC%20Elapsed%20Time.pdf

祝你好运!