Arduino: digitalread () और digitalwrite () के लिए तेजी से विकल्प?


13

Arduino फ़ंक्शन को कॉल करने के लिए सबसे तेज़ विकल्प क्या हैं digitalread()और digitalwrite()? AVR- विशिष्ट या चिप-विशिष्ट समाधान स्वीकार्य हैं।


3
इसे और आपके अंतिम प्रश्न को पढ़कर, ऐसा लगता है कि आप बहुत जल्दी कुछ करना चाहते हैं। मुझे लगता है कि यह क्या है और कितनी तेजी से उपयोगी हो सकता है, इस पर विवरण देना।
ओली ग्लेसर

@ ओली, अच्छा विचार, धन्यवाद। वर्तमान परियोजना आर सी ट्रांसमीटरों के लिए एक ट्यूनिंग प्रणाली है। यह अच्छी तरह से काम करता है, लेकिन मैं आरसी पीडब्लूएम सिग्नल को डिकोडिंग कुशल बनाना चाहता हूं ताकि मैं अन्य परियोजनाओं के लिए समान रूपरेखा का उपयोग कर सकूं। यहाँ मेरे पास अब तक क्या है पर एक राइटअप है
मार्क हैरिसन

जवाबों:


18

सीधे डिजिटल बंदरगाहों तक पहुंचें!

मैंने जिन 3 तरीकों का परीक्षण किया वे थे

  • digitalWrite (पिन, LOW); digitalWrite (पिन, हाई);
  • सीएलआर (पोर्ट, 0); सेट (PORTB, 0);
  • PORTB | = _BV (0); PORTB & = ~ (_BV (0));

[...]

यहाँ छवि विवरण दर्ज करें

जैसा कि आप देख सकते हैं, digitalWrite को पूरा करने के लिए लगभग 56 चक्र लगते हैं, जबकि डायरेक्ट पोर्ट एड्रेसिंग में 2 चक्र लगते हैं। यह उन कार्यक्रमों के लिए समय का एक बड़ा अंतर है जिनके पास बहुत सारे IO संचालन हैं!



2

जैसा कि ऊपर सुझाव दिया गया है, सीधे डिजिटल बंदरगाहों तक पहुंचें। लेकिन स्टाइल के साथ!

हार्ड-कोडित मूल्यों को सीधे हार्डवेयर रजिस्टरों में लिखने से, आप पठनीयता और पोर्टेबिलिटी में ढीले हो जाते हैं।

मैंने गितुब पर एक उपकरण प्रकाशित किया है जिसे मैंने एचडब्ल्यूए कहा है जो आपको हार्डवेयर के लिए एक ऑब्जेक्ट-ओरिएंटेड इंटरफ़ेस का उपयोग करने की आवश्यकता है जो कि सी ++ कंपाइलर की आवश्यकता नहीं है और उच्च दक्षता बाइनरी कोड का उत्पादन करता है।

HWA है: https://github.com/duparq/hwa


1
"उच्च दक्षता बाइनरी कोड" वास्तविक माप के साथ-साथ बहुत अधिक आधिकारिक होगा।
दिमित्री ग्रिगोरीव

2

Arduino.SE पर फ़ॉक्स पहले ही इस पर चर्चा और परीक्षण कर चुके हैं। जैसा कि यह पता चला है, digitalWriteFast()नियमित रूप से ज्यादा सुधार नहीं है digitalWrite()। हालाँकि, डायरेक्ट पोर्ट एक्सेस, की तुलना में लगभग 35-40 गुना तेज है digitalWrite()


0

ChipKit Uno32 का उपयोग करें यह AVR- आधारित Arduinos की तुलना में बहुत तेज है। यह आपकी समय संबंधी समस्याओं से भी निपटेगा।


1
मुझे नहीं लगता कि तेजी से हार्डवेयर खरीदना यहाँ सबसे अच्छा जवाब है, कम से कम तब तक नहीं जब तक आप अपने वर्तमान हार्डवेयर की सीमा तक नहीं पहुँच जाते और यह तय कर लेते हैं कि आपको कुछ और तेज़ चाहिए।
जॉन एल

1
क्यों घटता है? वह सबसे तेज़ समाधान चाहता था , न कि केवल एक तेज़, जो मैंने प्रदान किया है। किसी को भी तेजी से Arduino- आधारित समाधान सुझा सकते हैं?
लियोन हेलर

12
क्योंकि ChipKit एक Arduino नहीं है, बल्कि एक Arduino संगत प्लेटफ़ॉर्म है। इसका मतलब यह है कि हालांकि पोर्ट स्विचिंग तेज है, फिर भी कुछ पुस्तकालयों के पुनर्लेखन की एक बड़ी संभावना है। ईथरनेट, XBee, SD कार्ड लाइब्रेरी पूरी तरह से काम नहीं कर सकते हैं। इसके अलावा, मार्क विशेष रूप से digitalRead / Write के वैकल्पिक फ़ंक्शन कॉल के लिए कहता है, न कि एक नए प्लेटफ़ॉर्म (doh) के लिए।
हंस

2
हार्डवेयर बदलना कभी भी अच्छा उपाय नहीं है। बहुत कम से कम आप कुछ अच्छे सीखने से चूक जाते हैं और कभी नहीं सीखेंगे कि हार्डवेयर का कुशल उपयोग क्या होगा।
रिक_2047

1
@ Rick_2047 मैं "कभी नहीं" नहीं कहूंगा - यदि आवश्यकता नई है या विस्तारित या मात्रा बढ़ जाती है, तो यह विकल्प के रूप में देखने के लिए समझ में आता है। लेकिन मैं मानता हूं कि सकल सॉफ़्टवेयर अक्षमताओं पर आँख बंद करके हार्डवेयर फेंकना अपरिहार्य है - कभी-कभी यह काम भी नहीं करता है क्योंकि उच्च प्रदर्शन सिस्टम अपने स्वयं के ओवरहेड को जोड़ सकते हैं और कभी-कभी कुछ कार्यों के लिए सरल की तुलना में धीमी गति से समाप्त हो सकते हैं। आपके द्वारा उपयोग किए जाने वाले प्लेटफ़ॉर्म या चिंतन के बारे में सीखने के लिए वास्तव में कोई विकल्प नहीं है।
क्रिस स्ट्रैटन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.