INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
F-Makro für Variablen - ein kleiner Tipp
05.08.2016, 14:41
Beitrag #1
F-Makro für Variablen - ein kleiner Tipp
Moin,
wie allseits bekannt kann man bei print - Ausgaben den F-Makro benutzen. Ziel dabei ist es die auszugebenden Werte nicht im RAM zu lagern, sondern im FLASH um den Code klein zu halten. Soweit so klar.
Nachteile dabei:
1. Möchte man die gleichen Werte mehrfach ausgeben, macht das aber immer noch etliches an Schreibarbeit.
2. Die direkte Ausgabe von Variablen mittels F - Makro ist so nicht möglich

Hier ein Tipp, wie man beides umgehen kann und gleichzeitig noch einigermaßen Speicher sparen kann.
Ganz ohne F-Makro:
Code:
void setup()
{
Serial.begin(9600);
Serial.print("Das ist ein immer wiederkehrender Text");
Serial.print("Das ist ein immer wiederkehrender Text");
Serial.print("Das ist ein immer wiederkehrender Text");
Serial.print("Das ist ein immer wiederkehrender Text");
Serial.print("Das ist ein immer wiederkehrender Text");
}
void loop() {}
Sketch: 2102 / Variablen: 222
Mit F - Makro - Strings im wieder neu getippt:
Code:
void setup()
{
Serial.begin(9600);
Serial.print(F("Das ist ein immer wiederkehrender Text"));
Serial.print(F("Das ist ein immer wiederkehrender Text"));
Serial.print(F("Das ist ein immer wiederkehrender Text"));
Serial.print(F("Das ist ein immer wiederkehrender Text"));
Serial.print(F("Das ist ein immer wiederkehrender Text"));
}
void loop() {}
Sketch: 2262 / Variablen: 182
Mit F - Makro - String als Variable
Code:
#define P(x) (__FlashStringHelper*)(x)    // F-Makro für Variablen
const char text[] PROGMEM = {"Das ist ein immer wiederkehrender Text"};
void setup() {
Serial.begin(9600);
Serial.print(P(text));
Serial.print(P(text));
Serial.print(P(text));
Serial.print(P(text));
Serial.print(P(text));
}
void loop() {}
Sketch: 2112 / Variablen: 182

Vielleicht kann es ja jemand gewinnbringend einsetzen.
Grüße Ricardo

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Die Bytemühle - einfacher Zugriff auf einzelne Bytes einer Mehrbyte-Variablen ardu_arne 4 2.205 16.11.2015 19:30
Letzter Beitrag: Retian

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste