Marian wrote:
> Hallo,
>
> ich wollte nur mal wissen ob es möglich ist, einen String aus dem Flash
> direkt per Uart zu versenden.
> Also so in der Art:
>
1 | > #include <avr/io.h>
|
2 | > #include <avr/pgmspace.h>
|
3 | > #include <stdio.h>
|
4 | >
|
5 | > int main(void)
|
6 | > {
|
7 | > Uart_init();
|
8 | > while(0)
|
9 | > {
|
10 | > printf(PSTR ("Hallo Welt!"));
|
11 | > }
|
12 | > }
|
13 | >
|
>
mit printf selber geht das nicht. printf geht immer davon aus,
dass der String im SRAM liegt. Aber printf hat einen speziellen
Formatbezeichner, der ihm sagt, dass ein String aus dem
Flash kommt
printf( "%S", PSTR("Hallo Welt" ) );
(Ich weiss jetzt gar nicht, ob es einen printf_P gibt, der
den Format String im Flash erwartet, dann würde das direkt
gehen
printf_P( PSTR("Hallo Welt" ) );
)
> einen String aus dem Flash
> direkt per Uart zu versenden.
und so einfach geht das mit dem versenden über die UART auch
wieder nicht. Man kann zwar mit einer speziellen Funktion die
Ausgabe der Standardfunktionen auf die UART umleiten. Allerdings
ist es meist deutlich einfacher, die UART Funktionen (die man
selber schreiben muss), direkt zu benutzen. Nicht zuletzt deshalb,
weil die Standard Ausgabefunktionen dann doch schon einiges
an Overhead mitbringen.