mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Code funktioniert in main(), aber nicht über Funktion?


Autor: Axel Ro. (axelroro)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: ... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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ß.

Autor: Axel Ro. (axelroro)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.