2

我继承了一个嵌入式项目,该项目需要一些简单的按功能进行性能分析。它由运行 uClinux (2.6.17.7-uc1) 的 Coldfire (MCF5328) 组成。

我不是 Coldfire 或 uClinux(或 Linux)方面的专家,所以请原谅我的无知。

在 Windows 中,我会简单地使用QueryPerformanceCounter来访问 x86 高分辨率计时器。记录前后的计数器并比较差异。

我了解到 Linux 在 QueryPerformanceCounter 上有许多变体:

  • clock_gettime/res
  • 得到时间
  • ktime_x

甚至可以通过以下方式访问时间戳计数器

  • get_cycles

这些都不适用于此设备正在运行的 uClinux 版本。因此,操作系统似乎没有高分辨率计时器访问权限。

这是否意味着 Coldfire 本身没有提供这样的功能?或者 uClinux 移植的作者是否将它们排除在外?硬件上是否有我可以使用的东西,以及如何使用它?

4

2 回答 2

1

考虑到您的内核有多旧,您可能不支持高分辨率计时器。

如果您正在编写内核驱动程序,则 API 是不同的。如果get_cycles()被剔除,则可能意味着您的 CPU 架构不支持循环计数器。由于您的内核非常旧,do_gettimeofday因此可能是您能做的最好的事情,而不是编写驱动程序来直接查询某些计时器硬件。

于 2011-06-17T23:47:11.307 回答
1

我最终在 Coldfire 上使用了四个 DMA 定时器之一。将定时器启用为自由运行、不产生中断的计数器是一件简单的事情。这提供了一个 12.5ns 的计数器(80Mhz)。

于 2011-06-21T18:37:46.487 回答