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
Gast
#1693405
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
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.