Nach ein paar kleinen Anpassungen bekomm ich ein wunderschönes 'a'. Allerdings gibt es noch ne warning:
uart.c: In function 'uart_getline':
uart.c:47: warning: comparison is always true due to limited range of data type
Dürfte an der -1 liegen. Das äußert sich dann darin, dass bei verwendung von uart_getline() das Programm abstürzt und neu startet. So geht es besser:
Code:
void uart_getline(char *buffer)
{
int c=0;
while ((char)c != 0x0D)
{
c = uart_getchar();
if ( (c != -1) && (c != 0x0D) && (c != 0x0A))
{
*buffer = (char)c;
buffer++;
// Achtung: Der Buffer muss groß genug
// sein, sonst kann es hier zu einem
// Überlauf kommen!!
}
}
// Wichtig: String abschließen!
*buffer = 0;
}
Dann noch ne Kleinigkeit:
In file included from test.c:5:
rs232.c:103: warning: function declaration isn't a prototype
Das ist void setup_uart(). In C muss (anders als in C++) im Kopf der Funktion in den Klammern ein void stehen, wenn keine Parameter übergeben werden.
Und noch was: deine rs232.h müsste eigentlich rs232.c heißen, weil dort die Funktionen komplett deklariert sind. Sie sollte außerdem nicht direkt inkludiert werden, sondern nur eine Headerdatei (die dann wirklich rs232.h heißen würde). Die rs232.c wird dann nur im makefile eingebunden. Das ist bei kleineren Programmen meist egal, aber wenn die c-Datei an mehreren Stellen inkludiert wird, gibt es Probleme.
Lesezeichen