Forum: Mikrocontroller und Digitale Elektronik Arduino/C - sprintf_P() - Ersetzender String im Flash


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Wurstel (Gast)


Lesenswert?

Hallo,

hab eine Konstante "a" im Flash Bereich eines AVR:

const char PROGMEM a[] = "Eis ist %s";

Diese kopiere ich in eine SRAM Variable "buffer":

char buffer[20];

sprintf_P(buffer, a, "lecker");

und füge noch eine Zeichenkette an. Das funktioniert auch soweit. Ich 
möchte aber nun das "lecker" auch noch im Flash ablegen und ich weiß 
nicht wie ich das anstellen soll.

sprintf_P(buffer, a, F("lecker"));

funktionert nicht. Gibt es hierfür eine Lösung?

: Verschoben durch User
von Carl D. (jcw2)


Lesenswert?

printf holt der String aus dem Flash, wenn statt %s %S benutzt wird.
Der Zusatz "_P" bewirkt nur, daß der Format-String aus dem Flash gelesen 
wird.

: Bearbeitet durch User
von Daniel A. (daniel-a)


Lesenswert?

Für strings im flash gibt es den format string %S, also grosses statt 
kleines s. Eventuell könnte man PSTR statt F verwenden.

von Wurstel (Gast)


Lesenswert?

Super! Funktioniert! Danke!

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]
  • [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.