如何衡量ISR执行时间?

时间:2013-01-11 22:21:45

标签: time linux-device-driver interrupt isr

我在Linux内核2.6.32上。 我正面临一个问题,其中两个ISR(串行和以太网)中的一个在某些情况下/在某些我不知道的情况下花费更多时间(几百微秒)。我希望每次执行ISR时都能获得时差。

什么是最好的方式(涉及的开销最低)。我没有看到ARM架构有一些TSC寄存器(read_tsc api),它可以让我直接访问其他架构提供的时间。

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

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

1 个答案:

答案 0 :(得分:1)

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

在2.6.32.55中,我看到arch / arm / oprofile / op_model_v7.c提供了完全的访问和控制。我的需求是裸机,我用ARM example code这很简单,对我有用。

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

相关问题