Arduino फ़ंक्शन को कॉल करने के लिए सबसे तेज़ विकल्प क्या हैं digitalread()
और digitalwrite()
? AVR- विशिष्ट या चिप-विशिष्ट समाधान स्वीकार्य हैं।
Arduino फ़ंक्शन को कॉल करने के लिए सबसे तेज़ विकल्प क्या हैं digitalread()
और digitalwrite()
? AVR- विशिष्ट या चिप-विशिष्ट समाधान स्वीकार्य हैं।
जवाबों:
सीधे डिजिटल बंदरगाहों तक पहुंचें!
मैंने जिन 3 तरीकों का परीक्षण किया वे थे
- digitalWrite (पिन, LOW); digitalWrite (पिन, हाई);
- सीएलआर (पोर्ट, 0); सेट (PORTB, 0);
- PORTB | = _BV (0); PORTB & = ~ (_BV (0));
[...]
जैसा कि आप देख सकते हैं, digitalWrite को पूरा करने के लिए लगभग 56 चक्र लगते हैं, जबकि डायरेक्ट पोर्ट एड्रेसिंग में 2 चक्र लगते हैं। यह उन कार्यक्रमों के लिए समय का एक बड़ा अंतर है जिनके पास बहुत सारे IO संचालन हैं!
यह पुस्तकालय एक अच्छा विकल्प है: http://code.google.com/p/digitalwritefast/
जैसा कि ऊपर सुझाव दिया गया है, सीधे डिजिटल बंदरगाहों तक पहुंचें। लेकिन स्टाइल के साथ!
हार्ड-कोडित मूल्यों को सीधे हार्डवेयर रजिस्टरों में लिखने से, आप पठनीयता और पोर्टेबिलिटी में ढीले हो जाते हैं।
मैंने गितुब पर एक उपकरण प्रकाशित किया है जिसे मैंने एचडब्ल्यूए कहा है जो आपको हार्डवेयर के लिए एक ऑब्जेक्ट-ओरिएंटेड इंटरफ़ेस का उपयोग करने की आवश्यकता है जो कि सी ++ कंपाइलर की आवश्यकता नहीं है और उच्च दक्षता बाइनरी कोड का उत्पादन करता है।
HWA है: https://github.com/duparq/hwa
Arduino.SE पर फ़ॉक्स पहले ही इस पर चर्चा और परीक्षण कर चुके हैं। जैसा कि यह पता चला है, digitalWriteFast()
नियमित रूप से ज्यादा सुधार नहीं है digitalWrite()
। हालाँकि, डायरेक्ट पोर्ट एक्सेस, की तुलना में लगभग 35-40 गुना तेज है digitalWrite()
।
ChipKit Uno32 का उपयोग करें । यह AVR- आधारित Arduinos की तुलना में बहुत तेज है। यह आपकी समय संबंधी समस्याओं से भी निपटेगा।