Printf und String im Flash

Gast #716048
Lesenswert?

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
}

Gruß,

Marian
#716053
Lesenswert?

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.
Gast #716054
Lesenswert?

Ja,
aber nicht mit printf. Dafür gibt es die Funktion printf_P.

Das zieht sich durch die ganze avr-libc. Zu vielen Funktionen gibt es 
eine _P-Variante für Daten aus dem flash.

Steht sogar alles in der Doku...

Oliver
Gast #716059
Lesenswert?

@Karl Heinz und Oliver:
Danke für die ausführliche Antwort. printf_P muss ich dann wohl 
übersehen haben.

PS:Hm ich werde das mal mit den Uartfunktionen testen, mal schauen wie 
viel das bringt :).

Ciao,

Marian

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren