mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik 16 bit Integer- lowbyte verschluckt


Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sers Leute,
folgende Systemvorraussetzungen: STK500, ATMega8515, CodeVision
Compiler.
Ich habe ein Problem und zwar möchte ich eine 16 bit-Integer als 2 Byte
(highbyte, lowbyte) über uart verschicken. Das ganze geht so:

int a=420;      //420 -> 0x01A4
putchar(a>>8);  //sende highbyte  0x01
putchar(a);     //sende lowbyte   0xA4

Das Ganze ist in einem größeren Programm untergebracht, wobei mein
Flash schon mit 70% ausgelastet ist.
Das Problem ist, dass nun das lowbyte nur noch als 0x00 ankommt.
Setze ich nun diesen Programteil als eigenständiges lauffähiges
Programm auf, funktioniert die Übertragung einwandfrei.
Mit was könnte dieses Problem zusmmenhängen?
Danke bereits schon im voraus für eure postings
Gruß Christian

Autor: Gerhard Gunzelmann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

ich bin kein AVR Spezialist. Aber ist es nicht so, daß "int" die
Registerbreite repräsentiert, also hier 8 Bit ? Muß für 16 Bit nicht
sowas wie int16 spezifiziert werden ?


Gerhard

Autor: Sssssss (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!

Hast du mal das hier probiert:
int a=420;      //420 -> 0x01A4
putchar((a>>8)&0xFF);  //sende highbyte  0x01
putchar(a&0xFF);     //sende lowbyte   0xA4

Evtl vermasselt der Compiler irgendwas bei der 16->8Bit Umwandlung.

Oder shiftet er gar a um 8 nach rechts ? :-X

Autor: Jens Mundhenke (jensbert)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

die Maske für das zweite putchar ist dringend zu empfehlen, denn
putchar bekommt einen Integer als Parameter, schneidet also das
Highbyte nicht weg.

Was damit aber praktisch angefangen wird - außer im EOF-Fall ein -1
übertragen zu können -, weiss ich nicht.

Gruß

Jens

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In C sind Zeichenliterale (z.B. 'x') vom Typ int. Alle
Standardfunktionen, die mit einzelnen Zeichen arbeiten, verwenden dafür
int.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.