Forum: Mikrocontroller und Digitale Elektronik Probleme mit Switch/Case Abfrage


von Wer B. (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

ich arbeite zurzeit an einem "Protokol" für die Übertragung von 433Mhz 
Signalen, damit es geordnet ist (synchro zwischen Arduinos).

Problem zurzeit: Der Arduino führt bei einer Switch/Case Abfrage ein 
"case" durch, obwohl die Bedingung gar nicht stimmt... ?!
Er macht "case statRec", obwohl er das eig. nicht machen dürfte.

Programmcode im Anhang

Der Fehler tritt ab "case statId" auf, vorher nicht...

Ich würde mich freuen wenn mir einer helfen könnte, denn dieser, zurzeit 
kleine Fehler, könnte später zu einen großen Problem werden...

Viele Grüße

Simon

von Wer B. (Gast)


Lesenswert?

Mir ist gerade aufgefallen, das ich einen Rechtschreibfehler hatte.

Nicht: starRec
Sonder: statRec

Warum die Arduino IDE da nichts sagt...

Trotz der Korrektur geht es immer noch nicht

von Torsten R. (Firma: Torrox.de) (torstenrobitzki)


Lesenswert?

Wenn Du einen Fehler findest, der Compiler aber nicht, könnte es daran 
liegen, dass Du und der Compiler auf unterschiedlichen Code gucken.

von Wer B. (Gast)


Lesenswert?

Torsten R. schrieb:
> Wenn Du einen Fehler findest, der Compiler aber nicht, könnte es daran
> liegen, dass Du und der Compiler auf unterschiedlichen Code gucken.

Daran liegt es nicht

von le.do (Gast)


Lesenswert?

StatId hat nur im inneren switch genug  breaks. Das äußere fällt durch 
zu statRec

von Joachim B. (jar)


Lesenswert?

le.do schrieb:
> StatId hat nur im inneren switch genug  breaks

gut gesehen!

   }

break; // fehlt

   case starRec:

von Wer B. (Gast)


Lesenswert?

Danke, dass war es!
Schade dass die IDE das nicht überprüft...

Vielen Dank

von Programmiersprachentheaterintendant (Gast)


Lesenswert?

> Schade dass die IDE das nicht überprüft...

Was soll überprüft werden?

Die *switch*-Kontrollstruktur ist in C/C++ nun mal so definiert dass 
v.o.n.u. beim ersten passenden case "eingestiegen" wird und 
anschliessend alles darunter ausgeführt wird, ausser es wird ein 
break angetroffen, dann wird die Kontrollstruktur beendet.

Hat man das Gefühl, switch sei sowas wie "1-aus-n" so liegt man 
falsch.

Man kann mit switch ein "1-aus-n" machen, wenn kein break 
vergessen geht. Jedoch kann kein Compiler/IDE/usw. erraten, wieviele 
breaks richtig sein sollen...

von Peter D. (peda)


Lesenswert?

Der : hinter dem Case verrät eigentlich schon, daß es sich um ein 
Sprung-Label handelt.
Daher ist es nur konsequent, wenn auch dahin gesprungen wird. Und 
vorhergehender Code läuft immer in ein Sprung-Label hinein.

von Patrick C. (pcrom)


Lesenswert?

Im zukunft kannst du fuer solche state-machines am besten ein enum fuer 
die states benutzen. Dann kann der kompiler detectieren ob alle 
moegliche states eingefuellt sind, sonnst gibt er ein warning.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.