क्या सुविधा के लिए सेटअप और लूप प्रदान किया गया है?


13

Arduino स्केच में आमतौर पर एक setupऔर loopफ़ंक्शन होता है। क्या ये कार्य केवल सुविधा के लिए प्रदान किए गए हैं या क्या वास्तव में उनके विशेष उद्देश्य हैं? (उदाहरण: सेटअप और लूप में कुछ ऑपरेशन अस्वीकृत या अनुमत हैं)

क्या कोड के ये दो टुकड़े समतुल्य हैं:

क्लासिक

void setup() {
    pinMode(LED_BUILTIN, OUTPUT);
}

void loop() {
    digitalWrite(LED_BUILTIN, HIGH);
    delay(1000);
    digitalWrite(LED_BUILTIN, LOW);
    delay(1000);
}

बिना लूप का

void setup() {
    pinMode(LED_BUILTIN, OUTPUT);

    while(true) {
        digitalWrite(LED_BUILTIN, HIGH);
        delay(1000);
        digitalWrite(LED_BUILTIN, LOW);
        delay(1000);
    }
}


void loop() {
}

क्या सेटअप या लूप के बिना कोड लिखना संभव है, उदाहरण के लिए, एक mainविधि या अन्य प्रविष्टि बिंदु?

जवाबों:


10

कोड के वे टुकड़े बहुत अधिक हैं।

यदि आप Arduino स्रोत कोड देखते हैं, तो आप देखेंगे:

setup();

for (;;) {
  loop();
  if (serialEventRun) serialEventRun();
}

(मुझे यकीन नहीं है कि क्या serialEventRun()करता है)

मुझे नहीं लगता कि आप mainफ़ंक्शन की घोषणा को 'ओवरलोड' कर सकते हैं । यह भी ध्यान दें कि मुख्य फ़ंक्शन कॉल करता है init, जो कि टाइमर को कॉन्फ़िगर करता है, इसलिए millis()आदि काम करेगा।


9

क्या ये कार्य केवल सुविधा के लिए प्रदान किए गए हैं या क्या वास्तव में उनके विशेष उद्देश्य हैं?

Arduino लाइब्रेरी सीरियल हैंडलिंगloop() से संबंधित हाउसकीपिंग का एक छोटा सा हिस्सा है ।

क्या कोड के ये दो टुकड़े समतुल्य हैं:

यदि आप कभी भी सीरियल इवेंट का उपयोग नहीं करते हैं।

क्या बिना सेटअप या लूप के कोड लिखना संभव है, उदाहरण के लिए, एक मुख्य विधि या अन्य प्रवेश बिंदु?

आईडीई के माध्यम से Arduino पुस्तकालयों का सख्ती से उपयोग नहीं करते हुए; लिंकर डुप्लिकेट mainपरिभाषा या गुम setupया loopपरिभाषाओं की शिकायत करेगा ।


2

क्या बिना सेटअप या लूप के कोड लिखना संभव है, उदाहरण के लिए, एक मुख्य विधि या अन्य प्रवेश बिंदु?

पिछली बार मैं आईडीई इस्तेमाल किया, तो आप कोई साथ एक परियोजना हो सकता था .ino/ .pdeकेवल फ़ाइल, .cppफाइलें, के बाद से इसके बारे में mangling है .inoएक में .cppपरिभाषित करता है कि mainसमारोह, यदि आप उस चरण बाईपास तो आप अपने खुद परिभाषित कर सकते हैं main।

यदि IDE अब इसे अनुमति नहीं देता है (जैसा कि मैंने सुना है) तो आप Arduino पुस्तकालयों को छोड़ दिए बिना IDE के बाहर एक Makefile- आधारित बिल्ड के साथ अभी भी वही काम कर सकते हैं। मुझे पता है कि केवेट हैं:

  • #include "Arduino.h"यदि आपको लाइब्रेरी फ़ंक्शंस तक पहुँच चाहिए तो आपको चाहिए ।
  • init()यदि आप चाहते हैं कि आप लाइब्रेरी को परिधीयों के रूप में उपयोग करने के लिए लाइब्रेरी को कॉल करें ।
  • serialEventयदि आप एक serialEventहैंडलर को चलाना चाहते हैं, तो आपको उस कोड को डालना चाहिए, जिसे गेर्बेन अपने मेनलूप में बताते हैं (लेकिन अगर आपको अपना मेनलूप लिखना है तो आपको इसकी आवश्यकता नहीं है)।

1

Arduino स्केच में आमतौर पर एक सेटअप और लूप फ़ंक्शन होता है। क्या ये कार्य केवल सुविधा के लिए प्रदान किए गए हैं या क्या वास्तव में उनके विशेष उद्देश्य हैं?

वे एक अतिरिक्त फ़ंक्शन कॉल में फेंकते हैं initजो टाइमर को आरंभ करने देता है millis, microsऔर delayआगे के प्रयास के बिना काम करता है। इसके अलावा, नहीं।

यह कोड IDE के अंतर्गत संकलन (और चलता है):

int main ()
  {
  }

प्रभावी रूप से आईडीई इस तरह कोड उत्पन्न करता है:

int main ()
  {
  init ();  // set up timers
  setup (); // your own initialization
  while (true)
    loop ();  // stuff you want to keep doing
  }

उन्होंने तब से इसके साथ खिलवाड़ किया है, जैसा कि इग्नासियो वाज़केज़-अब्राम्स ने कहा, लेकिन मूल रूप से आप इसे अनदेखा कर सकते हैं। विशेष रूप से setupऔर के बारे में कुछ खास नहीं है loop।

mainजैसा मैंने ऊपर दिखाया है आप उसका उपयोग कर सकते हैं । तुम setupचाहो तो सब कुछ कर सकते हो । आप सब कुछ कर सकते हैं loopयदि आप चाहें (यदि आप इससे कभी नहीं लौटते हैं)।

याद रखें, आप यहां C ++ कंपाइलर के साथ काम कर रहे हैं। उनके नामों के आधार पर कुछ जादुई महत्व नहीं है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.