Embedded Coldfire上的高分辨率计时器(MCF5328)

Embedded Coldfire上的高分辨率计时器(MCF5328),embedded,uclinux,coldfire,Embedded,Uclinux,Coldfire,我继承了一个嵌入式项目,它需要一些简单的每个函数的性能评测。它由一个运行uClinux(2.6.17.7-uc1)的Coldfire(MCF5328)组成 我不是Coldfire或uClinux(或Linux)方面的专家,请原谅我的无知 在Windows中,我只需使用QueryPerformanceCounter访问x86高分辨率计时器。记录前后的计数器并比较差异 我了解到Linux在QueryPerformanceCounter上有许多变体: 时钟时间/分辨率 getnstimeofday

我继承了一个嵌入式项目,它需要一些简单的每个函数的性能评测。它由一个运行uClinux(2.6.17.7-uc1)的Coldfire(MCF5328)组成

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

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

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

  • 时钟时间/分辨率
  • getnstimeofday
  • ktime_x
甚至可以通过

  • 获取循环
这些在该设备正在运行的uClinux构建上都不可用。因此,操作系统似乎没有高分辨率定时器访问


这是否意味着Coldfire本身不提供此类功能?还是uClinux端口的作者遗漏了它们?硬件上有我可以使用的东西吗?我将如何使用它?

鉴于您的内核有多旧,您可能不支持高分辨率计时器


如果您正在编写内核驱动程序,那么API是不同的。如果
get\u cycles()
被删除,可能意味着您的CPU体系结构不支持循环计数器。由于您的内核非常旧,除了编写直接查询某些计时器硬件的驱动程序之外,这可能是您能做的最好的了。

我最终在Coldfire上使用了四个DMA计时器中的一个。这是一个简单的事情,使定时器作为一个自由运行,非中断生成,计数器。这提供了一个12.5ns的计数器(80Mhz)。

clock_gettime
的情况下,linux/time.h甚至没有它。如果我创建一个声明来构建它(有问题的驱动程序模块动态链接到内核),设备就会崩溃,因为内核中不存在该函数。对于ktime_x函数,它们存在于发行版的头文件中,但同样不存在于内核中。在get_cycles的情况下,标头将其定义为一个内联函数,返回零(即,它未实现)。我在分发文件中发现了确切的posix timers.c文件,这意味着由于某种原因,该特定文件没有内置。我猜可能有1001个原因导致它无法构建,其中一个原因是在1001个东西列表中的某个地方有一个#define或config设置。是的,这是一个内核驱动程序,我的直觉是硬件不支持它。我希望有一个快速的解决方案,因为我只需要更改单个模块的工作方式,并且需要分析这些更改,这样我就不会比以前多消耗N个周期。do_gettimeofday没有足够的分辨率。