Arduino가 특정 기능을 실행하는 속도를 결정해야합니다.Arduino 함수의 실행 속도를 측정하는 방법은 무엇입니까?
그럴 시간이 가장 좋을까요? 지금까지 스톱워치 클래스로 무언가를 찾았습니다.하지만 그렇게 할 원시 메소드가 있는지 궁금합니다.
Arduino가 특정 기능을 실행하는 속도를 결정해야합니다.Arduino 함수의 실행 속도를 측정하는 방법은 무엇입니까?
그럴 시간이 가장 좋을까요? 지금까지 스톱워치 클래스로 무언가를 찾았습니다.하지만 그렇게 할 원시 메소드가 있는지 궁금합니다.
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 = 마이크로(); 부호없는 길이 m2 = 마이크로(); 부호없는 long mt = m2 - m1; ... unsigned long delta = end - start - mt; –
@UgoRobain 이것은 처음에는 좋은 생각 인 것 같습니다. 그러나 타이밍 기능을 사용하여 타이밍 기능에서 오류를 제거하려고 시도하는 것은 본질적으로 결함이 있습니다. – krb686
좀 더 자세히 설명해 주시겠습니까? '마이크로 (micros)'를 두 번 호출하고 결과를 빼는 것이 마이크로에 걸린 시간을주지 못하는 이유는 모르겠다. 함수의 타이밍을 수행하기 전에 이것을 호출하면 '마이크로 시간'의 두 배를 뺄 수 있으므로 myFunction의 더 정확한 타이밍을 얻을 수 있습니다. –