PgmPrint - Funktion

Hallo,

hab in einer Sketch-Vorlage den "PgmPrint" Befehl gefunden. Da gehts irgendwie um Datenlogging. Ich sehe, daß der Befehl was an die serielle übergibt. Hab auch schon im Internet gesucht, aber so richtig dokumentiert ist der Befehl m.E. nicht.

Hat da jemand weitergehende Infos für mich?

Gruß/hk007

Hallo, das ist eine Funktion aus der SD Library und dient dazu den auszugebenden String im Flash (Program) Memory abzulegen statt im SRAM. Die unübersichtliche Variante der Funktion wird dazu ersetzt. Siehe dazu https://github.com/adafruit/SD/blob/master/utility/SdFatUtil.h

#define PgmPrint(x) SerialPrint_P(PSTR(x))
/** Store and print a string in flash memory followed by a CR/LF.*/

Gruß Reinhard

Hi Reinhard,

danke für die Erklärung. Soll RAM sparen oder?

Der Unterschied zwischen dem:

 myserialPC.println("Free RAM: ");
  myserialPC.println(FreeRam());

und dem:

  PgmPrint("Free RAM: ");
  myserialPC.println(FreeRam());

ist dann dieser, daß ich im RAM-Speicher genau die 10 Byte des Textes zusätzlich zur Vefügung habe.

Hab ich das richtig interpretiert?
Allerdings kann man dann doch nur auf 1. serielle ausgeben oder?

gruß/hk007

Was macht "myserialPC.println" ? Scheint in einer Library definiert zu sein. Um die Frage zu beantworten, müsste ich die Library kennen.

Soll RAM sparen oder?

Genau, die Menge hängt davon ab, wie oft die Funktion genutzt wird, weil die Definition und das Sub auch Platz kosten. Schau dir mal diese Seite an, da gibts einige Infos dazu http://linux.dd.com.au/wiki/Arduino_Static_Strings In diesem Fall wird auf die erste serielle Schnittstelle ausgegeben, aber das lässt sich ja durch eine eigene Definition ändern.

Was macht "myserialPC.println" ? Scheint in einer Library definiert zu sein. Um die Frage zu beantworten, müsste ich die Library kennen.

oh sorry....

#define myserialPC Serial2  // Monitoring über "Serial-2"

Ich hab für das Projekt einen Mega, bei dem die 2. Serielle fest mit meinem PC verbunden ist. Zum Codetesten nutz ich aber manchmal einen Uno. Der hat ja nur eine Serielle. Da kann ich dann über die #define alle Ausgaben auf einmal umschalten.

Wenn das Pgmprint nur dazu ist, um RAM zu sparen, dann werd ich das ganze "Gerümpel" wohl Stück für Stück raus operieren. Bei meinem Mega ist es mit dem RAM nicht so dramatisch :) und ich weiss genau, wenn ich es jetzt schon schwer verstehe, dann kapier ich die Software, wenn ich mir sie in ein paar Wochen wieder ansehe, gar nicht mehr.

gruß/hk007

EDIT: Super Erklärung in dem Link. Danke!!