我在Linux内核2.6.32上。 我正面临一个问题,其中两个ISR(串行和以太网)中的一个在某些情况下/在某些我不知道的情况下花费更多时间(几百微秒)。我希望每次执行ISR时都能获得时差。
什么是最好的方式(涉及的开销最低)。我没有看到ARM架构有一些TSC寄存器(read_tsc api),它可以让我直接访问其他架构提供的时间。
所以想法是 1)调用ISR的时刻测量时间 2)ISR完成的时刻测量时间。 3)获得1和2的差异将其存储在某个变量中。 4)继续执行步骤1到2,并且当步骤3中接收的值大于过去值时,覆盖它(保持/保留最大延迟值)。 当问题发生时(某些突然条件打印值)或最后10个值的数组)。
我需要在内核驱动程序中做,所以让我知道什么是最便宜的方式。
答案 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设置时钟输入。