Hallo,
ich verwende in meinem Programm die USART-ausgabe per printf.
Der Code kurz zusammengefasst:
1 | #include <stdio.h>
|
2 |
|
3 | int main( void )
|
4 | {
|
5 | USART_Init();
|
6 |
|
7 | static FILE mystdout = FDEV_SETUP_STREAM( usart_putchar, NULL, _FDEV_SETUP_WRITE );
|
8 |
|
9 | stdout = stderr = &mystdout;
|
10 |
|
11 | printf("Test 1");
|
12 |
|
13 | //...an dieser Stelle folgt weiterer C-Code der das TWI verwendet
|
14 |
|
15 | printf("Test 2");
|
16 | }
|
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":
1 | #include <stdio.h>
|
2 |
|
3 | int main( void )
|
4 | {
|
5 | USART_Init();
|
6 |
|
7 | static FILE mystdout = FDEV_SETUP_STREAM( usart_putchar, NULL, _FDEV_SETUP_WRITE );
|
8 |
|
9 | stdout = stderr = &mystdout;
|
10 |
|
11 | printf("Test 1");
|
12 |
|
13 | //...an dieser Stelle folgt weiterer C-Code der das TWI verwendet
|
14 |
|
15 | //Dies hier...
|
16 | stdout = stderr = &mystdout;
|
17 | printf("Test 2");
|
18 |
|
19 | //Oder diese Version...
|
20 | fprintf(&mystdout, "Test 2");
|
21 | }
|
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