Forum: Compiler & IDEs uint 16 bit Ausgabe


von verzweifelter (Gast)


Lesenswert?

Hallo liebe Community,

Plattform: Atmega 32, eigenes Modul in Ethersex

ich probiere etwas verzweifelt in C eine Ausgabe hinzubekommen:

Ich habe eine 16bit Variabele, die ich in hexadezimaler Schreibweise in 
ein Char-Array schreiben möchte, folgenden Code habe ich:
1
//output ist groß genug
2
  uint16_t var=60000;
3
  char buffer[3];
4
  itoa((var& 0xff00)>>8,buffer,16); //Die niedrigen 8 Bit auf 0 setzten und dann die höheren 8 auf die niedirgen 8 schieben
5
  output[0]=buffer[0];
6
  output[1]=buffer[1];
7
  itoa((var &0xff),buffer,16);//Die höheren 8 Bit ausblenden
8
  output[2]=buffer[0];
9
  output[3]=buffer[1];
10
  output[4]='\0';

in diesem Fall arbeitet alles sauber und ich habe eine Ausgabe von 
"ea60", was vollkommen korrekt ist.

Wenn ich nun die erste Zeile durch:
1
uint16_t var=fenster_ist;

ersetzte(auf fenster_ist wird in keiner anderen Funktion zugegriffen), 
so kriege ich als Ausgabe "0ff".

Im Dateikopf steht:
1
uint16_t fenster_ist=60254; //hex:eb5e

Ich bin so langsam mit meiner Weisheit am Ende, würde mich über jede 
Hilfe freuen!

von Klaus W. (mfgkw)


Lesenswert?

An diesen Zeilen sehe ich nichts, was zu 0ff führt.
Vielleicht steckt der Fehler in dem Teil, den wir nicht sehen dürfen?
Evtl. noch eine lokale Variable fenster_ist?

Trotzdem:
- wenn die auszugebende Zahl nur eine Stelle hat, würde itoa()
  auch nur die eine ausgeben.
  Du gehst aber stillschweigend davon aus, daß es immer zwei Byte
  sind.
  Ich würde mir eine Funktion machen, die immer die gewünschte
  Anzahl ausgibt und notfalls mit Nullen auffüllt.
- Wenn du ohnehin nach output kopierst, wieso lässt du itoa()
  bzw. die bessere Funktion nicht gleich dorthin schreiben?
- Das Ausmaskieren der unteren Bits in itoa((var& 0xff00)>>8,buffer,16)
  ist überflüssig, weil sie beim Schieben sowieso herauspurzeln und
  weg sind.

von verzweifelter (Gast)


Lesenswert?

Vielen Dank für deine Hilfe, haben den Fehler gefunden.

Das Make/Config-File hatte einen Fehler, es wurde eine Bootfunktion mit 
gelinkt, die dafür gesorgt hat, dass fenster_ist am Anfang auf 255 
steht(wer rechnen kann 0xff), sobald wie diese Funktion deaktiviert war, 
kam die korrekte Ausgabe.

Kennt jemand ne gute Klapse?!

Nochmal vielen Dank

itoa sollte in Buffer schreiben, damit ich ggf. noch einen zweiten 
Integer mit ausgaben kann.

[closed]

von Klaus W. (mfgkw)


Lesenswert?

verzweifelter schrieb:
> itoa sollte in Buffer schreiben, damit ich ggf. noch einen zweiten
> Integer mit ausgaben kann.

kannst du doch trotzdem, z.B. indem du output+2 als Zieladresse angibst.

[reopened]

von verzweifelter (Gast)


Lesenswert?

Noch ein kleiner Fehler:

itoa ist für signed int
utoa ist für unsigned Variante

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.