1

我在 linux 内核 2.6.32 上。我面临一个问题,其中两个 ISR(串行和以太网)之一在几次/在我不知道的某些情况下需要更多时间(数百微秒)。我想每次执行 ISR 时都获得时间差。

什么是最好的方法(就所涉及的开销而言最便宜)。我没有看到 ARM 架构有一些 TSC 寄存器(read_tsc api),它可以让我直接访问时间,因为它在其他架构上提供。

所以想法是1)调用ISR的那一刻测量时间2)ISR完成的那一刻测量时间。3)获得1和2的差异将其存储在某个变量中。4) 继续执行步骤 1 到 2,当步骤 3 中收到的值大于过去的值时,将其覆盖(保持/保留最大延迟的值)。当问题发生时(一些突然的条件打印值)或最后 10 个值的数组)。

我需要在内核驱动程序中做,所以让我知道什么是最便宜的方法。

4

1 回答 1

1

OMAP3 具有 Cortex-A8 内核。那确实有性能监视器单元(PMU)。Cycle Count (CCNT) 将对应于 x86 TSC,除非您可能必须在阅读之前启用它计数。BeagleBoard 帖子中的好信息。

在 2.6.32.55 中,我看到 arch/arm/oprofile/op_model_v7.c 提供了完全访问和控制。我的需求是裸机,我使用了简单且适合我的ARM 示例代码。

也可以使用 OMAP3 GPT,但这会做更多的工作,例如从 PRCM 设置其时钟输入。

于 2013-01-14T01:19:49.157 回答