2012-04-26 20 views
8

मुझे उस गति को निर्धारित करने की आवश्यकता है जिसके साथ Arduino एक निश्चित कार्य निष्पादित करता है।Arduino फ़ंक्शन के निष्पादन की गति को मापने के लिए कैसे करें?

ऐसा करने का सबसे अच्छा समय क्या होगा? अब तक मुझे स्टॉपवॉच क्लास के साथ कुछ मिला है, लेकिन मुझे आश्चर्य है कि ऐसा करने के लिए कोई मूल तरीका है या नहीं।

उत्तर

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

परिणाम से अपने कॉलटाइम को हटाने के लिए पहले 'माइक्रोस्कोस' फ़ंक्शन को न भूलें, यह महत्वपूर्ण हो सकता है। unsigned long m1 = micros(); हस्ताक्षर किए गए लंबे m2 = micros(); हस्ताक्षरित लंबे एमटी = एम 2 - एम 1; ... हस्ताक्षरित लंबे डेल्टा = अंत - शुरू - mt; –

+0

@UgoRobain यह पहली बार एक अच्छा विचार जैसा प्रतीत होता है, लेकिन यह समय-समय पर त्रुटि का उपयोग करके त्रुटि का प्रयास करने और इसे हटाने के लिए त्रुटिपूर्ण रूप से त्रुटिपूर्ण है। – krb686

+1

क्या आप विस्तृत कर सकते हैं? मुझे नहीं लगता कि क्यों 'माइक्रोस्कोस' को दो बार कॉल करना और परिणामों को घटाना मुझे माइक्रोस्को द्वारा लिया गया समय नहीं देगा। यदि आप अपने फ़ंक्शन के समय को करने से पहले इसे कॉल करते हैं तो आप दो बार 'माइक्रोस्को' अवधि घटा सकते हैं और इसलिए मेरे फ़ंक्शन का अधिक सटीक समय प्राप्त करने के लिए प्राप्त कर सकते हैं। –

7

कम से कम घुसपैठ करने वाला तरीका फ़ंक्शन कॉल से पहले एक पोर्ट पिन सेट करना और बाद में कम करना है। बंदरगाह पिन पर एक ऑसिलोस्कोप रखो और उच्च समय मापें।

यह बढ़ते किनारे पर ट्रिगर करके और गिरते किनारे पर जिटर देखकर निष्पादन समय की विविधता का एक अच्छा गुणात्मक विचार भी दे सकता है।

+0

बहुत बहुत धन्यवाद। हां, मैंने एक ऑसिलोस्कोप का उपयोग किया, लेकिन अन्य उद्देश्यों के लिए। समस्या यह है कि मुझे अपने प्रोग्राम में उस चर का उपयोग करने में सक्षम होना चाहिए। – Eugen