Forum: Compiler & IDEs sprintf_P & PSTR


von Jens F (Gast)


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!

von Gast (Gast)


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).

von Werner B. (Gast)


Lesenswert?


von Jens F (Gast)


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?

von Sven P. (Gast)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.