danke das muss ich mir näher zu gemüte führen.
Muss ich da unbedingt so seltsam definieren:
volatile static int counter=0;
oder geht nicht auch einfach mit
int...?
danke das muss ich mir näher zu gemüte führen.
Muss ich da unbedingt so seltsam definieren:
volatile static int counter=0;
oder geht nicht auch einfach mit
int...?
kurze Antwort: probier's aus!
lange Antwort:
ich bin bei Arduino mit seinen verschiedenen Compiler-settings für verschiedene Zielplattformen (AVR, SAM, SAMD, ESP8266) vorsichtig geworden.
Die loop() Funktion ist mir da besonders suspekt.
volatile: man weiß nie, was der Code-optimizer rausschmeißt, für welche Zielplattform auch immer, wenn mit den Werten nicht groß was passiert. Ich ging hier im Testcode auf Nummer Sicher, damit es bei dir auch wirklich sicher funktioniert, darauf verzichten kann man nach Test immer noch, aber dieser Punkt ist wschl am unkritischsten.
static: es ist eine lokale Funktion mit einer lokalen Variablen, die innerhalb der Funktion in verschiedenen Durchläufen hochgezählt oder wieder resettet wird. Gerade mit solchen Werten habe ich bereits schlechte Erfahrungen in loop() gemacht, wenn sie nicht als static deklariert waren, insb. Arduino Due (SAM) mit Scheduler und ESP8266.
Aber wie gesagt, muss vlt alles nicht unbedingt sein, probier's einfach aus.
Das dumme ist - ausprobieren geht grad nicht weil ich mein Board durch Falschpolung heute geschrottet hab! Ein Neues ist aber unterwegs...
Noch eine Frage:
die Zuweisung von 0 an den counter
(volatile static int counter=0)
befindet sich doch innerhalb der schleife. Also dürfte der Wert doch niemals >1 werden weil er bei jedem Durchgang wieder auf 0 gesetzt wird,
oder seh ich da was falsch???
nein, eben nicht, weil er static ist und in loop nur beim ersten Durchlauf zu Beginn initialisiert wird.
Ist auch so eine auf den ersten Blick seltsame und nicht ganz transparente loop-Eigenheit, eben Arduinoisch, nicht echt C++, auch deshalb gehe ich hier immer auf Nummer Sicher.
Wie es in C++ umgeformt hieße, führt hier aber jetzt zu weit.
Lesezeichen