mikrocontroller.net

Forum: Compiler & IDEs sprintf_P & PSTR


Autor: Jens F (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich bin ein recht unerfahrener AVR-Hobbybastler.

Schon in mehreren Beispielprogrammen habe ich folgendes Konstrukt 
gefunden:
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!

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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).

Autor: Werner B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Such dir mal was über Harvard-Architektur und dann gehe ins Tutorial.
(z.B. http://de.wikipedia.org/wiki/Harvard-Architektur)

http://www.mikrocontroller.net/articles/AVR-GCC-Tu...

Autor: Jens F (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.