我是linux内核2.6.32。我正面临一个问题,在几个场合/在一些我不知道的情况下,两个ISR(串行和以太网)中的一个需要更多的时间(数百微秒)。我想获得每次执行ISR时的时差。
什么是最好的方法(涉及的开销最少)。我没有看到ARM架构有一些TSC寄存器(read_tsc api),这可以让我直接访问时间,因为它提供了一些其他架构。
所以想法是1) ISR被调用的瞬间测量时间2) ISR完成的瞬间测量时间。3)将1和2的差值存储在某个变量中。4)继续执行步骤1到2,当步骤3中接收到的值大于过去的值时,覆盖它(以最大延迟保持/保留值)。当问题发生时(某些突发情况打印值)或最近10个值的数组)。
我需要在内核驱动程序中做,所以让我知道什么是最便宜的方式。
OMAP3采用Cortex-A8内核。它确实有性能监控单元(PMU)。循环计数(CCNT)将对应于x86 TSC,除非您可能必须在读取之前启用它计数。在BeagleBoard帖子中有很好的信息。
在2.6.32.55我看到arch/arm/oprofile/op_model_v7.c提供了完全的访问和控制。我的需求是裸机,我使用了简单且适合我的ARM示例代码。
也可以使用OMAP3 GPT,但这将是更多的工作,例如,从PRCM获得其时钟输入设置。