sprintf_P & PSTR

Gast #940496
Lesenswert?

Hallo,

ich bin ein recht unerfahrener AVR-Hobbybastler.

Schon in mehreren Beispielprogrammen habe ich folgendes Konstrukt 
gefunden:
1
sprintf_P( tctpbuffer , PSTR("Testnachricht"));

Was genau macht die Funktion sprintf_P und wofür ist die Funktion PSTR?

Habe schon ein wenig gegoogled aber leider bin ich nicht recht fündig 
geworden...

Vielen Dank für alle Antworten!
Gast #940506
Lesenswert?

Hallo die Funktion macht im Prinzip dasselbe wie sprintf,
die Konvention _P angehängt heißt das bestimmte Parameter
(welche genau, siehe Doku) im Programm-Flash liegen, welcher beim AVR
im GCC nicht mit dem normalen RAM-Speicher verwechselt werden darf.

PSTR bringt die Zeichenkette "Testnachricht" auch in den Programm-Flash,
das geht logischerweise nur für konstante Werte.

Damit paßt alles zusammen, Variable liegt im Flash und die Funktion
weiß es (und greift über readprogmem Befehle drauf zu).
Gast #940517
Lesenswert?

OK, was die Funktion macht is mir jetzt klar, aber warum macht man das? 
Wo liegt der Vorteil?

Ist es nicht so, dass der Programmspeicher meist nur einige 1000 
Schreibzugriffe unterstützt?

Zerstöre ich mir damit nicht mit der Zeit meinen eigenen Prozessor?
Gast #940519
Lesenswert?

Jens F wrote:
> OK, was die Funktion macht is mir jetzt klar, aber warum macht man das?
> Wo liegt der Vorteil?
>
> Ist es nicht so, dass der Programmspeicher meist nur einige 1000
> Schreibzugriffe unterstützt?
>
> Zerstöre ich mir damit nicht mit der Zeit meinen eigenen Prozessor?

Nö, du schreibst mit der C-Zeile da oben ja nix rein. Die Sache ist die: 
Entweder der AVR läd sämtliche Stringkonstanten aus dem Flash 
(Konstanten überhaupt) ins RAM und macht von dort aus weiter, oder aber 
er liest direkt aus dem Flash und gut.

Den Speicher im Flash brauchts beide Male, nur das RAM wird durch den 
Progmem-Kram (..._P und PSTR) nicht so sehr belastet.

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