hallo,
ich mal wieder, bin grad dabei mich in die verschiedenen zeichenkettenoperationen mit c/c++ einzuarbeiten.
leider ist mir da noch nicht so alles klar, ich habe dazu mal verschiedene möglichkeiten versucht.
insbesondere der block vor dem serial.println bereit mir noch schwierigkeiten.
ich suche eine möglichkeit an vielen stellen zeichenketten aufzubereiten um diese später zu versenden, das muss natürlich so speicherschonend wie möglich passieren.
bei s(n)printf kann man ja so schön mit %s oder %i die zeichenketten verbinden, leider brauchen diese funktionen auch entsprechend viel speicher.
ich habe es aber auch nicht geschafft, z.b. diesen formatierungsstring und die char-arrays an eine funktion zu übergeben, um ggfs speicher zu sparen (ich gehe davon aus, dass der vielfache aufruf von z.b. s(n)printf entsprechend speicher benötigt, während der funktionsaufruf eigentlich weniger brauchen sollte.
weiterhin habe ich es nicht geschafft, z.b. den formatierungsstring per F() oder PSTR() "auszulagern".
könnte mir jemand bitte den weg weisen?
// Die Arraygrößen sind bewusst so gewählt!
char test1[100] = "Dies ist ein Test";
char test2[50] = "der einen Satz ausgibt";
char test3[150] = "";
byte bwert1 = 128; // Soll als Ascii-Ziffer ausgegeben werden
byte bwert2 = 0; // Soll als Ascii-Ziffer 0 = Ascii-Code 48 ausgegeben werden
void setup()
{
Serial.begin(115200);
/*
snprintf(test3, 150, "%s %s", test1, test2);
Der Sketch verwendet 3.470 Bytes (10%) des Programmspeicherplatzes. Das Maximum sind 32.256 Bytes.
Globale Variablen verwenden 506 Bytes (24%) des dynamischen Speichers, 1.542 Bytes für lokale Variablen verbleiben. Das Maximum sind 2.048 Bytes.
*/
/*
sprintf(test3, "%s %s", test1, test2);
Der Sketch verwendet 3.436 Bytes (10%) des Programmspeicherplatzes. Das Maximum sind 32.256 Bytes.
Globale Variablen verwenden 506 Bytes (24%) des dynamischen Speichers, 1.542 Bytes für lokale Variablen verbleiben. Das Maximum sind 2.048 Bytes.
*/
/*
test3[0] = '\0';
strcat(test3, test1);
strcat(test3, " ");
strcat(test3, test2);
Der Sketch verwendet 2.000 Bytes (6%) des Programmspeicherplatzes. Das Maximum sind 32.256 Bytes.
Globale Variablen verwenden 502 Bytes (24%) des dynamischen Speichers, 1.546 Bytes für lokale Variablen verbleiben. Das Maximum sind 2.048 Bytes.
*/
/*
memset(&test3[0], 0, sizeof(test3));
strcat(test3, test1);
strcat(test3, " ");
strcat(test3, test2);
Der Sketch verwendet 2.008 Bytes (6%) des Programmspeicherplatzes. Das Maximum sind 32.256 Bytes.
Globale Variablen verwenden 502 Bytes (24%) des dynamischen Speichers, 1.546 Bytes für lokale Variablen verbleiben. Das Maximum sind 2.048 Bytes.
*/
/*
// Nur mal ein Test um die Mehrfachverwendung zu testen
memset(&test3[0], 0, sizeof(test3));
strcat(test3, test1);
strcat(test3, " ");
strcat(test3, test2);
Serial.println(test3);
memset(&test3[0], 0, sizeof(test3));
strcat(test3, test2);
strcat(test3, " ");
strcat(test3, test1);
Serial.println(test3);
memset(&test3[0], 0, sizeof(test3));
strcat(test3, test1);
strcat(test3, " ");
strcat(test3, test1);
Serial.println(test3);
memset(&test3[0], 0, sizeof(test3));
strcat(test3, test2);
strcat(test3, " ");
strcat(test3, test2);
Der Sketch verwendet 2.164 Bytes (6%) des Programmspeicherplatzes. Das Maximum sind 32.256 Bytes.
Globale Variablen verwenden 502 Bytes (24%) des dynamischen Speichers, 1.546 Bytes für lokale Variablen verbleiben. Das Maximum sind 2.048 Bytes.
*/
/*
memset(&test3[0], 0, sizeof(test3));
strcat(test3, test1);
strcat(test3, " ");
strcat(test3, bwert2);
invalid conversion from 'byte {aka unsigned char}' to 'const char*' [-fpermissive]
*/
Serial.println(test3);
/*
Alle Blöcke vorher kommentiert, nur Serial.println wird verwendet
Der Sketch verwendet 1.786 Bytes (5%) des Programmspeicherplatzes. Das Maximum sind 32.256 Bytes.
Globale Variablen verwenden 350 Bytes (17%) des dynamischen Speichers, 1.698 Bytes für lokale Variablen verbleiben. Das Maximum sind 2.048 Bytes.
*/
}
void loop()
{
}
grüße
fly