问题描述
我继承了一个嵌入式项目,该项目需要一些简单的按功能进行性能分析。它由运行uClinux(2.6.17.7-uc1)的Coldfire(MCF5328)组成。
我不是Coldfire或uClinux(或Linux)的专家,所以请原谅我的无知。
在Windows中,我只需使用“ 0”即可访问x86高分辨率计时器。记录前后的计数器并比较差异。
我了解到Linux在QueryPerformanceCounter上有很多变体:
clock_gettime / res
getnstimeofday
ktime_x
甚至可以通过以下方式访问时间戳计数器
get_cycles
这些设备在运行该设备的uClinux上均不可用。因此,似乎操作系统没有高分辨率计时器访问权限。
这是否意味着Coldfire本身不提供此类功能?还是uClinux端口的作者遗漏了它们?我可以使用硬件上的某些东西,如何使用?
解决方法
考虑到内核的年龄,您可能不支持高分辨率计时器。
如果要编写内核驱动程序,则API是不同的。如果将“ 1”存根,则可能意味着您的CPU体系结构不支持循环计数器。由于您的内核很老,因此writing2ѭ可能是您所能做的最好的事情,而无需编写驱动程序直接查询某些计时器硬件。
, 我最终在Coldfire上使用了四个DMA定时器之一。使计时器成为自由运行,不中断生成的计数器是一件简单的事情。这提供了一个12.5ns的计数器(在80Mhz)。