Arduinoが特定の機能を実行する速度を決定する必要があります。Arduino関数の実行速度を測定する方法は?
これを行うのに最適な時期はいつですか?これまでのところStopwatchクラスで何かを見つけましたが、それを行うネイティブメソッドがあるかどうかは疑問です。
Arduinoが特定の機能を実行する速度を決定する必要があります。Arduino関数の実行速度を測定する方法は?
これを行うのに最適な時期はいつですか?これまでのところStopwatchクラスで何かを見つけましたが、それを行うネイティブメソッドがあるかどうかは疑問です。
簡単な方法は、Arduinoライブラリのmillis()
またはmicros()
関数を使用することです。 micros()
で細かい穀粒の結果が得られます。例えば
:
unsigned long start = micros();
// Call to your function
myFunction();
// Compute the time it took
unsigned long end = micros();
unsigned long delta = end - start;
Serial.println(delta)
は慎重micros()
のドキュメントを読んで:時間分解能に関するいくつかの情報があります。
最小限の侵入方法は、関数呼び出しの前にポートピンをハイにし、その後にローにすることです。ポートピンにオシロスコープを置き、ハイ・タイムを測定します。
これは、立上りエッジでトリガし、立下りエッジでジッタを監視することによって、実行時間の変動性についての優れた定性的な考え方を提供します。
ありがとうございました。はい、私はオシロスコープを使用しましたが、他の目的のために使用しました。問題は私のプログラムでその変数を使用できることです。 – Eugen
'micros'関数を呼び出して結果から呼び出し時間を削除するのを忘れないでください。 符号なしlong m1 = micros(); 符号なしlong m2 = micros(); 符号なしlong mt = m2 - m1; ... unsigned long delta = end - start - mt; –
@UgoRobainこれは最初は良いアイデアのようですが、それ自体でタイミングを取ってタイミング機能からエラーを取り除くのは本質的に欠陥があります。 – krb686
詳しいことはありますか? 「マイクロ」を2回呼び出して結果を差し引いても、マイクロ秒がかかる時間はありません。 関数のタイミングを実行する前にこの関数を呼び出すと、 'マイクロ秒'の2倍の時間を引いてmyFunctionのより正確なタイミングを得ることができます。 –