除了tickGet()和tickAnnounce之外,还有其他方法可以在VxWorks中获取系统时间吗?我想测量指定任务的任务切换之间的时间,但我认为tickGet()的精度不够高,因为在taskSwitchHookAdd函数的开头和结尾的两个tickGet()值总是相同的!
发布于 2014-08-29 07:38:15
如果你想尝试和计时任务切换,我假设你需要一个至少在微秒(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。
祝好运!
发布于 2014-03-25 06:58:04
这取决于您所在的平台,但如果它是x86,那么您可以使用:
pentiumTscGet64();
https://stackoverflow.com/questions/22621492
复制相似问题