Hallo zusammen, ich arbeite zur Zeit mit Atmel Studio 7.0 und einem Arduino Nano mit Atmega328P. Ich bin dabei ein einstelliges 7-Segment-Display mit einem Schieberegister anzusteuern. Das funktioniert auch ganz gut. Ich kann in mein: char muster[] = {...} 1 und 0 eingeben und die jeweiligen Segmente leuchten auf. ALLES SUPER. Jetzt dachte ich mir, damit ich die Zahlen 0-9 ausgeben kann pack ich das in eine switch-case Abfrage. Jedoch kommt da immer die Fehlermeldungen: crosses initialization of 'char muster [8]' 'char muster [8]' previously declared here Könnt ihr mir bitte sagen was ich bei der switch case abfrage falsch mache. Vielen Dank!!
char * muster; case 1: muster = {0,1,...}; break; case 2: muster = {1,0,...};
Daniel F. schrieb: > Jetzt dachte ich mir, damit ich die Zahlen 0-9 ausgeben kann pack ich > das in eine switch-case Abfrage. Jedoch kommt da immer die > Fehlermeldungen: > > crosses initialization of 'char muster [8]' > 'char muster [8]' previously declared here Eine Deklaration kann nur ein Mal erfolgen. Deine Switc-Case-Geschichte kannst du dir sparen, wenn du ein Array mit 10 Einträgen und einer Breite von 8 verwendest.
Man muß das Fahrrad nicht immer wieder neu erfinden, bzw. nicht mit 5 rechteckigen Rädern. Für 7S-Konvertierung und SPI-Ausgabe gibt es reichlich Codebeispiele.
STK500-Besitzer schrieb: > Deine Switc-Case-Geschichte kannst du dir sparen, wenn du ein Array mit > 10 Einträgen und einer Breite von 8 verwendest. Vorzugsweise 8 Bit (uint8_t), das vereinfacht die SPI-Ausgabe.
Daniel F. schrieb: > Könnt ihr mir bitte sagen was ich bei der switch case abfrage falsch > mache. Du kannst nicht abhängig von einer Bedingung unterschiedliche Variablen erzeugen und dann später dann an einer Stelle die benutzen, die vorher halt erzeugt wurde. Ich würde die 8 Bit für das Muster ja einfach in einem uint8_t speichern statt in einem Array aus char.
Im Scope von switch definierst du eine Variable erneut. Das geht nicht. Zumal die beim Ende vom switch ungültig wird.
Rolf M. schrieb: > Du kannst nicht abhängig von einer Bedingung unterschiedliche Variablen > erzeugen Das geht schon - also unterschiedliche - nur dieselbe Variable mehrmals geht nicht.
Rolf M. schrieb: > Daniel F. schrieb: >> Könnt ihr mir bitte sagen was ich bei der switch case abfrage falsch >> mache. > > Du kannst nicht abhängig von einer Bedingung unterschiedliche Variablen > erzeugen und dann später dann an einer Stelle die benutzen, die vorher > halt erzeugt wurde. > > Ich würde die 8 Bit für das Muster ja einfach in einem uint8_t speichern > statt in einem Array aus char. Zumal man diese 8Bit als Konstante auch so schreiben kann:
1 | muster = 0b01101001; |
Und damit optisch jedes einzelne Bit sehen kann;
Dirk B. schrieb: > Rolf M. schrieb: >> Du kannst nicht abhängig von einer Bedingung unterschiedliche Variablen >> erzeugen und dann später dann an einer Stelle die benutzen, die vorher >> halt erzeugt wurde. > > Das geht schon - also unterschiedliche - nur dieselbe Variable mehrmals > geht nicht. Nein, auch wenn es verschiedene Variablen wären, würde das nicht so gehen. Wenn man jeder einen anderen Namen gibt, wird die gleiche Fehlermeldung kommen. Wie sollte das auch funktionieren? Was soll passieren, wenn du nach dem switch versuchst auf eine Variable zuzugreifen, die in einem der nicht ausgeführten cases definiert wurde?
Rolf M. schrieb: > Nein, auch wenn es verschiedene Variablen wären, würde das nicht so > gehen. Wenn man jeder einen anderen Namen gibt, wird die gleiche > Fehlermeldung kommen. Warum sollte crosses initialization of 'xxx' 'xxx' previously declared here kommen, wenn man es erstmals definiert. Rolf M. schrieb: > Was soll passieren, wenn du nach dem > switch versuchst auf eine Variable zuzugreifen, die in einem der nicht > ausgeführten cases definiert wurde? Das ist ein anderes Problem (welches ich aber schon angesprochen hatte).
Dirk B. schrieb: > Rolf M. schrieb: >> Nein, auch wenn es verschiedene Variablen wären, würde das nicht so >> gehen. Wenn man jeder einen anderen Namen gibt, wird die gleiche >> Fehlermeldung kommen. > > Warum sollte > crosses initialization of 'xxx' > 'xxx' previously declared here > kommen, wenn man es erstmals definiert. Ok, der zweite Fehler natürlich nicht. Der erste aber schon. > Rolf M. schrieb: >> Was soll passieren, wenn du nach dem >> switch versuchst auf eine Variable zuzugreifen, die in einem der nicht >> ausgeführten cases definiert wurde? > > Das ist ein anderes Problem (welches ich aber schon angesprochen hatte). Das ist genau das Problem. Eine Variable kann nicht an einer bestimmten Stelle vom Programm abhängig von einer Bedingung definiert oder nicht definiert sein.
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.