www.mikrocontroller.net

Forum: Compiler & IDEs Programm vergisst die Einstellung von stdout


Autor: Thomas Finke (thomas-hn) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich verwende in meinem Programm die USART-ausgabe per printf.

Der Code kurz zusammengefasst:
#include <stdio.h>

int main( void )
{
   USART_Init();

   static FILE mystdout = FDEV_SETUP_STREAM( usart_putchar, NULL, _FDEV_SETUP_WRITE );

   stdout = stderr = &mystdout;

   printf("Test 1");

   //...an dieser Stelle folgt weiterer C-Code der das TWI verwendet

   printf("Test 2");
}

Bei diesem Programm funktioniert die Ausgabe von "Test 1", nicht aber 
die von "Test 2".

Wenn ich stattdessen folgendes verwende, funktioniert die Ausgabe von 
"Test2":
#include <stdio.h>

int main( void )
{
   USART_Init();

   static FILE mystdout = FDEV_SETUP_STREAM( usart_putchar, NULL, _FDEV_SETUP_WRITE );

   stdout = stderr = &mystdout;

   printf("Test 1");

   //...an dieser Stelle folgt weiterer C-Code der das TWI verwendet

   //Dies hier...
   stdout = stderr = &mystdout;
   printf("Test 2");

   //Oder diese Version...
   fprintf(&mystdout, "Test 2");
}

Es scheint so, als ob das Programm die Einstellung von stdout, stderr 
"vergisst". Sobald ich direkt vor dem printf die Ausgabekanäle neu 
einstelle, bzw. den fprintf verwende funktioniert das Programm wie 
gewollt.

In dem Code-Teil für TWI wird definitiv nirgends das stdout bzw. stderr 
neu geschrieben.

Der Flash ist zu 19.1% gefüllt, der RAM zu 6.2% (Angaben beim 
Kompilieren).

Werden stdout und stderr durch irgendetwas anderes, außer durch direkte 
Zugriffe, verändert?

Vielen Dank,

Thomas

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Möglicherweise erstellst du große lokale Puffer in dem TWI Code? Oder 
führst anderweitig unzulässige Speicherzugriffe dort aus.

Von allein verändert sich da nix.

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.