私はLinuxカーネル2.6.32を使用しています。2つのISR(シリアルとイーサネット)の1つが、何度か/わからないシナリオで、より多くの時間(数百マイクロ秒)を費やしているという問題に直面しています。ISRを実行するたびに時差を取得したいと思います。
最善の方法は何でしょうか(関連するオーバーヘッドの点で最も安価です)。ARMアーキテクチャにTSCレジスタ(read_tsc api)があり、他のアーキテクチャで提供されているように時間に直接アクセスできるとは思いません。
つまり、アイデアは1)ISRが呼び出された瞬間に時間を測定します。2)ISRが完了した瞬間に時間を測定します。3)1と2の差を取得し、それをいくつかの変数に格納します。4)手順1〜2を続行し、手順3で受け取った値が過去の値よりも大きい場合は、それを上書きします(最大遅延で値を保持/保持します)。問題が発生したとき(突然の状態で値が出力されます)または最後の10個の値の配列)。
カーネルドライバーで行う必要があるので、最も安価な方法を教えてください。