1

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

4

2 回答 2

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

祝你好运!

于 2014-08-28T23:38:14.987 回答
0

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

pentiumTscGet64();
于 2014-03-24T22:58:03.923 回答