Hallo! Ich habe in einem "uint8_t rxbuffer[100]" Daten liegen. Ich möchte diese Daten in einem normalen Byte wie folgt definiert " uint8_t data1" einlesen. z.B. steht bei rxbuffer[10]: decimal 30. ( Ich sehe im Debug Modus im AVR Studio das ich diese Daten tatsächlich drinnen hab im rxbuffer) Ich habe versucht über "byte1 = rxbuffer[10];" sowohl auch mit "byte1 = *(rxbuffer+10);" die Daten einzulesen. Kein Erfolg. Was mache ich denn falsch? PS:Ich bekomme keine Fehlermeldung beim compilieren im AVR Studio Danke
Luke schrieb: > "byte1 = rxbuffer[10];" das ist richtig so. Wenn dennoch ein nicht erwartetes Ergebnis kommt, liegt der Fehler an anderer Stelle. > sowohl auch mit "byte1 = *(rxbuffer+10);" Wenn das dein Compiler ohne Warnungen frisst, solltest du die entweder die Einstellungen ansehen oder einen anderen Compiler aussuchen. Nicht alles, was syntaktisch akzeptabel ist, ergibt das gewünschte Ergebnis.
Luke schrieb: > in einem normalen Byte wie folgt definiert "uint8_t data1" einlesen. > versucht über "byte1 = rxbuffer[10];" Was denn nun?
Einfach mal ganz doof und nur der Vollständigkeit halber: Du schreibst, dass dein Datenbyte wie folgt heißt: uint8_t data1 Nachher schreibst du allerdings "byte1 = rxbuffer[10];" ist das richtig?! Habe es so verstanden, dass es wie folgt heißen soll: data1 = rxbuffer[10]; Will nicht deine Intelligenz in Frage stellen, aber manchmal hat man ein extrem großes Brett vorm Kopf ;) EDIT: Bin anscheinend nicht der einzige dem das aufgefallen ist ^^
>Was mache ich denn falsch? Setz den Breakpoint eine Zeile unter byte1 = rxbuffer[10]; >hier hin
Stefan Schmidt schrieb: > Einfach mal ganz doof und nur der Vollständigkeit halber: > Du schreibst, dass dein Datenbyte wie folgt heißt: uint8_t data1 > > Nachher schreibst du allerdings "byte1 = rxbuffer[10];" ist das > richtig?! Habe es so verstanden, dass es wie folgt heißen soll: data1 = > rxbuffer[10]; > > Will nicht deine Intelligenz in Frage stellen, aber manchmal hat man ein > extrem großes Brett vorm Kopf ;) Sorry war mein Fehler! Ich meinte natürlich: uint8_t byte1, und byte1 = rxbuffer[10]; dummy schrieb: > Setz den Breakpoint eine Zeile unter > > byte1 = rxbuffer[10]; Habe ich gemacht. Bekomme keinen Wert in byte1 obwohl im AVR Studio Debug Modus ich die Daten drinnen stehen habe.
Veränderst du an anderer Stelle vielleicht die Variable "byte1", so daß sie überschrieben wird? Evtl. in einer ISR? Oder vielleicht hast du bei einem Vergleich "=" geschrieben statt "==", das wäre dann eine Zuweisung statt einem Vergleich. Ein gern gemachter Fehler :-)
Woher weißt du, dass das byte dort nicht ist? Display, SPI...? Kommunikationsfehler?
npn schrieb: > Veränderst du an anderer Stelle vielleicht die Variable "byte1", so daß > sie überschrieben wird? Evtl. in einer ISR? > > Oder vielleicht hast du bei einem Vergleich "=" geschrieben statt "==", > das wäre dann eine Zuweisung statt einem Vergleich. Ein gern gemachter > Fehler :-) Zu beidem Nein.
Luke schrieb: > npn schrieb: >> Veränderst du an anderer Stelle vielleicht die Variable "byte1", so daß >> sie überschrieben wird? Evtl. in einer ISR? >> >> Oder vielleicht hast du bei einem Vergleich "=" geschrieben statt "==", >> das wäre dann eine Zuweisung statt einem Vergleich. Ein gern gemachter >> Fehler :-) > > Zu beidem Nein. Dann wiederhole ich nochmal die Frage von Gerald. Woher weißt du, daß der Wert nicht übernommen wird? Luke schrieb: > Bekomme keinen Wert in byte1 obwohl im AVR Studio > Debug Modus ich die Daten drinnen stehen habe. Wie stellst du das fest, daß du keinen Wert "bekommst"?
Luke schrieb: > Hier ein Screenshot mit oder ohne Optimierung? Wenn die Variablen nicht verwendet werden, optimiert er es weg. mache mal ein printf einfach rein.
Wenn das alles ist, was in deiner While-Schleife drin steht, könnte es sein, daß der Compiler die Zuweisung wegoptimiert. Denn die Variablen werden nicht weiterverwendet. Müßte auch eine Warnung vom Compiler kommen. Alternativ schalte mal die Optimierung ganz aus und debugge nochmal.
In solchen Fällen hilft ein AssemblerListing oder der Disassembler von AVR Studio, um zu sehen, ob deine C-Anweisungen überhaupt abgearbeitet werden. Wie schon geschrieben wurde: Da du die Variablen nicht weiterverwendest, könnten sie wegoptimiert worden sein.
Tatsächlich der Compiler optimiert es einfach weg. Hab die Optimierung ausgeschaltet und dann bekomme ich die Werte angezeigt. Vielen vielen Dank !!
Kann es sein, dass Byte? eine lokale Variable ist und Du eine andere, gleichnamige beobachtest? Eine weitere Möglichkeit wäre, beim letzten Kompilieren ist was in die Hose gegangen und der hinter der Anzeige liegende Code differiert. Also: Lösch' beide Beobachtungsfenster (nicht nur schließen); kompiliere den Code neu und behalte das Ausgabefenster im Auge; bau' die Beobachtungsfenster neu auf und versuch den Code erneut. Zum Code selbst: Manchmal haut die Optimierung ganze Codesequenzen raus, wenn Du die Zuweisung XXX = YYY zur ersten Variablen später nicht benutzt. Gelegentlich hilft eine Abfrage wie: if (XXX)oder die Optimierung ganz abschalten.
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.
