2012-04-26 3 views

답변

14

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()의 문서를 읽기 : 시간 해상도에 대한 몇 가지 정보가있다.

+0

결과에서 콜 타임을 제거하기 전에 '마이크로 (micros)'함수의 시간을 잊어 버리지 말고, 중요 할 수 있습니다. 부호없는 long m1 = 마이크로(); 부호없는 길이 m2 = 마이크로(); 부호없는 long mt = m2 - m1; ... unsigned long delta = end - start - mt; –

+0

@UgoRobain 이것은 처음에는 좋은 생각 인 것 같습니다. 그러나 타이밍 기능을 사용하여 타이밍 기능에서 오류를 제거하려고 시도하는 것은 본질적으로 결함이 있습니다. – krb686

+1

좀 더 자세히 설명해 주시겠습니까? '마이크로 (micros)'를 두 번 호출하고 결과를 빼는 것이 마이크로에 걸린 시간을주지 못하는 이유는 모르겠다. 함수의 타이밍을 수행하기 전에 이것을 호출하면 '마이크로 시간'의 두 배를 뺄 수 있으므로 myFunction의 더 정확한 타이밍을 얻을 수 있습니다. –

7

가장 방해가되지 않는 방식은 함수 호출 전에 포트 핀을 하이로 설정 한 다음 나중에 낮게 설정하는 것입니다. 오실로스코프를 포트 핀에 놓고 하이 타임을 측정하십시오.

이렇게하면 상승 에지에서 트리거하고 하강 에지에서 지터를 관찰하여 실행 시간의 가변성에 대한 좋은 질적 아이디어를 얻을 수도 있습니다.

+0

고마워. 예, 저는 오실로 스코프를 사용했지만 다른 용도로 사용했습니다. 문제는 내 프로그램에서 그 변수를 사용할 수 있어야한다는 것입니다. – Eugen

관련 문제