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
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
Wenn Du einen Fehler findest, der Compiler aber nicht, könnte es daran liegen, dass Du und der Compiler auf unterschiedlichen Code gucken.
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
StatId hat nur im inneren switch genug breaks. Das äußere fällt durch zu statRec
le.do schrieb: > StatId hat nur im inneren switch genug breaks gut gesehen! } break; // fehlt case starRec:
Danke, dass war es! Schade dass die IDE das nicht überprüft... Vielen Dank
> 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...
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.