PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : LED ....ein Verbotener Variablenname beim Arduino ???



oderlachs
12.03.2018, 19:37
Heute habe ich lange gegrübelt was ich falsch mache, bis ich der Variablen "LED" einen anderen Namen "Led" zugewiesen habe und der Sketch sich compilieren lies.


/*
Blink Zeile

*/

int Led[8] = {0,1,2,3,4,5,6,7};
;

void setup() {
for (int i= 0;i<= 07;i++)
{
pinMode(Led[i], OUTPUT);
}
}

void loop()
{
for (int i=0;i<= 07;i++)
{
digitalWrite(Led[i], HIGH);
delay(100);
digitalWrite(Led[i], LOW);
delay(100);
}
}


Es war mir bisher unbekannt das ich diesen Namen LED nicht verwenden darf.....weil es meine Angewohnheit ist,
so was (Variablen, eigene Definitionen) alles GROSS zu schreiben und auch mit LED kein Problem hatte.
Oder soll es am Array liegen, was ich auch nicht nachvollziehen kann..könnte ???
Habe schon nachgedacht das es vielleicht an der neueren Arduinoversion > 1.8 liegen könnte ??
Damit Ihr Euch nicht wundert über den Code, er ist für ein Atmega32L Board, das per Arduino-IDE programmiert wird.

Was sagt der Fachmann dazu ???

Über eine eventuelle Antwort wäre ich dankbar :)

Gruss Gerhard

Klebwax
12.03.2018, 22:57
Heute habe ich lange gegrübelt was ich falsch mache, bis ich der Variablen "LED" einen anderen Namen "Led" zugewiesen habe und der Sketch sich compilieren lies.
Die wirkliche Fehlermeldung wäre hilfreich.

Es war mir bisher unbekannt das ich diesen Namen LED nicht verwenden darf
Der Code deutet auf Arduino und C++ hin, da gelten aber wohl die gleichen Regeln wie in C. Da sind nur die reservierten Worte wie if, case, etc verboten, alles andere ist erlaubt. Bestimmte Namen sollte man aber nach den üblichen Konventionen vermeiden, z.B. die mit einem Unterstrich anfangen.


.....weil es meine Angewohnheit ist,
so was (Variablen, eigene Definitionen) alles GROSS zu schreiben
Das ist unglücklich, weil diese Schreibweise für Präprozessor-Macros üblich ist. Fehler sind so leichter zu erkennen, weil der Compiler ein doppeltes #define für den gleichen Macroname leicht erkennt und anzeigt.

Sollte ein #define LED xxxx in irgeneinem der Headerfiles das Problem sein, müsste die IDE einem etwas anzeigen, sobald man LED ausgeschrieben hat.

Also LED als Variablenname ist sicher nicht verboten, es wird woanders schon benutzt sein.

MfG Klebwax

i_make_it
13.03.2018, 06:24
Such mal unterhalb von Arduino/Libraries/ nach Keywords.txt (jede Library kann eine haben, muß aber nicht).
Wenn meim Start der Arduino IDE die Librarys eingelesen werden, werden auch die dort definierten Keywords eingelesen.
Selbst wenn eine nakte IDE kein Problem mit "LED" hat, kann es sein das einfach das Vorhanden sein einer Lib in der das als Keyword definiert ist, das Verhalten verändert.
Selbst wenn man sie nicht included.
Genauso ist das mit Libs die nicht mehr gepflegt werden und die plötzlich beim Compilieren mit Warnungen aufpoppen obwohl man sie im aktuellen Sketch nicht nutzt.
Der einfachste Weg ist dann den entsprechenden Lib Ordner einfach löschen oder wohin zu verschieben, wo die IDE sie nicht sucht.

https://oberguru.net/elektronik/arduino-keywords.txt.html

oderlachs
13.03.2018, 08:05
Danke Euch...
Ja Klebwax, Du sagst es "reservierte Wörter/Namen" ich bin nicht drauf gekommen, "Speicherleck" ;)

Nun bislang habe ich "LED" in den keywort.txt nicht gefunden ...sind ja ..zig Dateien , aber ich wollte die Compilermeldung nochmals sehen.
So habe ich aus "Led" wieder "LED" gemacht(Suchen/Ersetzen) und siehe da..... keine Fehler, compiliert und funktioniert.

Da soll mir doch mal wer einen Storch braten, warum ging es erst nicht und jetzt doch..keine Veränderung am PC, Arduino, Libs usw... ???

Gruss

Gerhard

i_make_it
13.03.2018, 09:11
Ghost in the machine?

Aber da bestätigt sich wider mal das Sprichwort:
Have you try to turn it off and on again?

Rebooten noch mal probieren.
Wenns dann wieder geht, auf den unfähigen OS Hersteller, Applikationshersteller etc. schimpfen und es unter "unnötige Verzögerung" verbuchen.

Bei mir haben sich auch schon zig Libs mit ihren keywort.txt angesammelt.
Oft wenn man mal versuchen will ob man sich mit einer Lib xy nicht das Leben einfacher machen kann.

Sinnvoll ist sich eine Textdatei zu machen, in der man jede Lib die man installiert reinschreibt und warum man die installiert hat, bzw. in welchem Projekt man die tatsächlich nutzt.
Dann kann man auch mal nachträglich wieder entrümpeln.

oderlachs
13.03.2018, 09:52
Du hast recht i_make_it !

Es sammelt sich wirklich was an , ein "locate -i keywords.txt"(linux) ergab 432 Dateien im Arduinobereich.....
Ich verwende schon mehrere Skechbook-Ordner(Namen) wegen der Übersichtlichkeit und auch der beiden verschiedenen Arduino Versionen.
Brauch da noch sowas Uraltes für meine ersten Roboter und Uralt Ardu - Clone (Made in Poland).
Muss mal sehen nach welcher Ordnungsmethode ich da Übersicht reinbringe.

Gerhard

P.S. man lernt doch nie aus