在Vxworks中获取系统时间

时间:2014-03-24 21:58:59

标签: time task vxworks execution-time task-switching

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

2 个答案:

答案 0 :(得分:3)

如果你想尝试和时间任务切换,我会假设你需要一个至少在微秒(us)级别的计时器。

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

更低级别的解决方案是找出系统上运行的处理器,然后编写一些简单的汇编代码来轮询处理器的内部时基寄存器(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

在基于x86的处理器上,您可以考虑使用RDTSC汇编指令来读取时间戳计数器(TSC)。在vxWorks上,pentiumALib有一些库函数(pentiumTscGet64()pentiumTscGet32()),这些函数将使用C更容易读取TSC。

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

祝你好运!

答案 1 :(得分:0)

这取决于你所使用的平台,但如果它是x86,那么你可以使用:

pentiumTscGet64();