Hallo Ich habe ein paar Fragen zur implementierung einer uart_getchar funktion mit timeout.(Timeout = EOF) Also EOF als int ist -1 Was sind die aus UDR ausgelesenen Daten als int 0..255 oder -128..127 die funktion sollte ungefaehr so aussehen int uart_getchar() {if (Timeout)return(-1); warte auf Empfang; Timeout starten... return((unsigned char)UDR) oder return((signed char)UDR); } in den stdio routinen wird ein Zeichen immer als signed char angesehen das macht aber die Unterscheidung zu eof unmoeglich.
Ganz verstehe ich dich nicht. Wenn du einen Wert im Bereich 0...255 (0x0000...0x00ff) zurückgibst, werden sie als Zeichen behandelt. Wenn du -1 zurückgibst (Bitmuster 0xffff), ist es EOF. Der Rückgabewert der get-Funktion ist vom Typ `int'. Du musst natürlich darauf achten, dass deine get-Funktion nicht etwa das Zeichen 0xff zu 0xffff (-1) promotet. Leider gibt's derzeit keine Unterscheidung zwischen EOF und IO error.
Hi, Wolfram, Du Ochse :-), (nicht nur ich, wir alle sind immer wieder mal Ochsen, wenn wir vor einem Berg stehen, der aus der Rückschau keiner mehr war.) FILE* fdevopen ( int(* put)(char), int(* get)(void), int opts __attribute__((unused))) An fdevopen() übergibst Du einen Zeiger auf Deine Funktion int uart_getchar(void). Dein "Berg" ist: Du gibst k e i n Character zurück, kein int8, sondern ein int16. Da ist genügend Platz für alle ASCII-Zeichen und das EOF bei Timeout. Ciao Wolfgang
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.