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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.