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
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
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
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
In C sind Zeichenliterale (z.B. 'x') vom Typ int. Alle Standardfunktionen, die mit einzelnen Zeichen arbeiten, verwenden dafür int.
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.