Array einlesen in C (AVR Studio)

Gast #3804980
Lesenswert?

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
#3805010
Lesenswert?

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.
#3805014
Lesenswert?

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 ^^
Gast #3805022
Lesenswert?

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.
Gast #3805035
Lesenswert?

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 :-)
Gast #3805065
Lesenswert?

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.
Gast #3805071
Lesenswert?

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"?
Gast #3805074
Lesenswert?

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.
Gast #3805095
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren