Hallo zusammen, hoffe Ihr könnt mir helfen - ich stecke an ein einer Banalität fest. Ich rufe in Programm bin_io_test_v1 die Funktion fgets zum Einlesen eines Strings auf zwei Arten auf: a) Einmal direkt in main() - der z.Z. auskommentierte Code. Dann funktioniert das wunderbar. b) Und zum zweiten über die Funktion UART_readline, welche den identischen Code in eine Funktion auslagert. Dann läuft er mir glatt über die fgets funktion hinweg, ohne auf Eingabe zu warten. Macht gerade keinen Sinn. Verdächtigt habe ich bis jetzt: - Die Benutzung von fdevopen (laut FAQ nicht reentrant) - Uart nutzt interrupts für get und put Im Detail (Kompletter Programmcode attached). /* Ask for command and store result in string s */ UART_readline(PSTR("Enter command. \r\n"), s); /* Ask for command and store result in string s */ /*printf_P(PSTR("Enter command. \r\n")); wdt_disable(); fgets(s, sizeof(s)-1, stdin); wdt_enable(WDTO_500MS); s[strlen(s)-2] = 0; // drop the ending \r\n printf_P(PSTR("You entered '%s'\r\n"),s); */ Nutze AVR Studio. Irgendwelche Ideen, an was das liegen mag? Danke Axel
Dein Problem ist "sizeof(s)-1". Wenn Du das so in der Funktion benutzt kommt da 1 (EINS) raus! Der Datentype von s ist "char*"! Und in im avr-gcc sind nun mal alle Pointer 2 Byte groß.
Hallo Gast, das wars. Hab jetzt mal einen size parameter mit eingebaut und mit sizeof(s)/sizeof(s[0]) gefüllt. Danke für die Hilfe! Grüsse Axel
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.