void loop gefolgt von anderen “ void ” Ausdrücken

I. Ich hoffe, dies ist eine einfache Anfrage eines Neulings an Arduino und Programmierung. Ich habe verstanden, dass ein Programm, sobald es einen Abschnitt mit einer leeren Schleife betritt, eine unbegrenzte Schleife durchläuft. Ich habe jedoch kürzlich Beispiele für Skizzen gesehen, bei denen ein weiterer Abschnitt von void $$$$$ dem Schließen (von}) der Leerschleife folgt. Während ich dies schreibe, betrachte ich ein Beispiel für eine 7-Segment-Anzeige, bei der „void Num_Write (int)“ auf das Schließen der void-Schleife folgt. Wenn der Abschnitt „Schleife“ genau das tut, wie ich vermutet habe, wie wird dann auf einen folgenden Abschnitt zugegriffen?

Vielen Dank, Rob

Kommentare

Antwort

Die void loop() Abschnitt ist eine Funktion, genauso wie void setup() eine Funktion ist. Wenn Sie Ihr Arduino-Programm starten, rufen Sie eine andere Funktion auf, die Sie in der IDE nicht sehen können. Rufen Sie setup() auf und rufen Sie dann loop() wiederholt auf.

Diese andere Funktion, die Sie gesehen haben, dh void Num_Write(int n), kann entweder von setup() oder und sie führen ihre Anweisungen aus, bevor sie zu der Funktion zurückkehren, die sie aufgerufen hat. Es ist auch möglich, dass die Num_Write() andere Funktionen aufruft, bevor sie den Controller an die aufgerufene Funktion zurückgibt it.

Der Typ void wird verwendet, um nichts darzustellen (es ist tatsächlich komplexer als das, aber für diese Erklärungsebene reicht nichts aus). Andere Funktionen können Geben Sie beispielsweise andere Typen int, char, bool zurück. Wenn wir also eine Funktion hätten wie folgt:

int theMeaningOfLife(void) { return 42; } 

Dies ist eine Funktion, die eine int (an umber) also würden Sie es so nennen:

void setup() { int number = theMeaningOfLife(); } 

Es gibt einen Haken, die Funktion muss deklariert werden, bevor sie verwendet wird. Dies ermöglicht es dem Compiler wissen, worauf Sie sich beziehen. Der einfachste Weg, dies zu tun, besteht darin, die Funktion über die Funktion zu schreiben, die sie aufruft. Die zweite Möglichkeit besteht darin, die Signatur der Funktion einfach über die Funktion zu schreiben, dh:

int theMeaningOfLife(void); void setup() { int number = theMeaningOfLife(); } 

Der beste Weg (aber auf einem Arduino nicht immer praktisch) ) soll alle Funktionsdeklarationen in einer Header-Datei (.h) und den Code in einer .cpp-Datei enthalten. (Sehen Sie sich eine Bibliothek an, um zu sehen, was ich meine.)

Zusammenfassung

Es gibt nur eine Funktion, die wiederholt aufgerufen wird, nämlich die loop Funktion. Nur weil eine Funktion void zurückgibt, bedeutet dies nicht, dass sie wiederholt wiederholt wird.

Kommentare

  • Sie haben geschrieben: „ Die Funktion muss deklariert werden, bevor sie verwendet wird. ”. Tatsächlich führt die Arduino IDE Ihren Code durch einen Vorverarbeitungsschritt, der dies für Sie erledigt, was bedeutet, dass Sie es nicht selbst tun müssen. Ich würde immer noch eine gute Praxis in Betracht ziehen, um an dieser Regel festzuhalten, schon allein deshalb, weil dadurch der Code außerhalb der IDE kompilierbar wird, z. mit einem Makefile .
  • @EdgarBonet – Danke, das habe ich nie gewusst. Ich denke, ich sollte es trotzdem vergessen, sonst werde ich ' anfangen, es bei der Arbeit zu versuchen und mir am Ende die Haare ausreißen, um herauszufinden, warum [es] nicht kompilieren. 🙂

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.