Forum: Mikrocontroller und Digitale Elektronik Anfänger - Char-Variable nach Double kopieren


von Ian (Gast)


Lesenswert?

Hallo liebes Forum,

ich habe eine Verständnisfrage. Warum funktioniert es nicht, wenn ich 
den Inhalt einer char-Variable einer double-Variable zuweise? 
Andersherum ist es mir klar, da der Wertebereich von Double größer ist.
1
unsigned char Var1;
2
double Var2;
3
4
Var1 = 50;
5
6
Var2 = Var1;

Var2 ist immer 1117519872 und nicht wie gewollt 50;

von Peter II (Gast)


Lesenswert?

Ian schrieb:
> Var2 ist immer 1117519872 und nicht wie gewollt 50;

sicher? Wo sieht du denn die 1117519872? Nicht das die Ausgabe nur 
falsch ist.

von Gustav (Gast)


Lesenswert?

Ian schrieb:
> Var2 ist immer 1117519872 und nicht wie gewollt 50;

Nein, ist es nicht. Der Code stimmt so.

Was auch immer du machst, dir den Variableninhalt anzeigen zu lassen, 
ist der Fehler.

von Ian (Gast)


Lesenswert?

Danke für die schnellen Antworten.

Ich debugge mit dem JTAGICEmkIII und dort wird mir dieser Wert 
angezeigt.

von Oliver S. (oliverso)


Lesenswert?

Tja, dann ist die Anzeige falsch, oder du bedienst den Debugger nicht 
richtig.

Ganz allgemein wird hier gerne der Rat gegeben, die Grundlagen einer 
Programmiersprache zunächst mal auf einem PC zu lernen. Da sind die 
Werkzeuge sehr viel vollständiger und einfacher zu bedienen.

Oliver

von HollaDieWaldfee (Gast)


Lesenswert?

Welcher Controller ist es denn. Muss hier vielleicht für Double noch 
eine Bibliothek hinzugelinkt werden?

von San L. (zwillingsfreunde)


Lesenswert?

Ian schrieb:
> Ich debugge mit dem JTAGICEmkIII und dort wird mir dieser Wert
> angezeigt.

Wenn ich in den letzten Jahren etwas gelernt habe: Vertraue keinem 
Debugger. Verlass dich da nicht all zu sehr drauf. Vielleicht kannst du 
die 50 ja anders darstellen. Kannst sie Beispielsweise an einem PORT 
zuweisen und an diesen LED's anschliessen, dann müsste theoretisch 50 in 
Binär dargestellt werden.

Hatte bereits oft ähnliche Probleme. Wie gesagt, nicht zu stark auf die 
Dinger verlassen, sondern lieber alternative Prüfmethoden anwenden.

von Yalu X. (yalu) (Moderator)


Lesenswert?

1117519872 ist das als Integer-Zahl dargestellte Bitmuster der
32-Bit-Floatingpoint-Zahl 78.00000.

Kann es sein, dass Var1 nicht 50, sondern 78 ist?

Dann liegt es daran, dass der Debugger aus irgendeinem Grund den
Datentyp von Var2 fälschlicherweise als int32_t oder uint32_t annimmt.
M.W. wird im Atmel Studio hinter dem Zahlenwert auch der Typ angezeigt.
Daran kannst du erkennen, ob das Bitmuster der Variable als int32_t oder
als float/double interpretiert wird.

von Ian (Gast)


Lesenswert?

Also der Wert ist ok, der Debugger zeigt den Wert tatsächlich falsch an. 
Bitmuster ist double.

Vielen Dank für die Antworten!

von Sepp (Gast)


Lesenswert?

Noch rin Tipp:

Evtl. ist das die Adresse?

von Yalu X. (yalu) (Moderator)


Lesenswert?

Probier mal Folgendes:
1
unsigned char Var1;
2
double Var2;
3
unsigned long Var3;
4
5
Var1 = 50;
6
Var2 = Var1;
7
Var3 = Var2;

Welchen Wert zeigt der Debugger für Var3 an?

Was für eine Controller verwendest du, einen 8-Bit- oder einen
32-Bit-AVR?

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.