Nicola666:
void Transmit(){
char* buffer="00,00,00";
sprintf(buffer, "%02d,%02d,%02d", t,m,h);
Serial.println(buffer);
}
Somwhere\SprintfX\SprintfX.ino: In function 'void Transmit(byte, byte, byte)':
Somwhere\SprintfX\SprintfX.ino:4:18: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
char* buffer = "00,00,00";
Du überschreibst eine im RAM befindliche Textkonstante mit unabsehbaren Folgen.
Schau mal wie die Variable test ihren Wert verändert:
void Transmit(byte t, byte m, byte h) {
char* buffer = "00,00,00";
sprintf(buffer, "%02d,%02d,%02d", t, m, h);
Serial.println(buffer);
}
char* test = "00,00,00";
void setup() {
Serial.begin(250000);
Transmit(10, 10, 10);
Serial.println(test);
}
void loop() {}
10,10,10
10,10,10
%02d produziert auch mehr als zwei Zeichen, wenn der Wert >100 oder <-9 ist,
aus deinem Schnipsel kann man nicht ablesen was t, m und h sein sollen, aber auch Bytes oder Chars können das.
Dann wird nicht nur eine Konstante überschrieben, sondern auch noch irgendetwas anderes,
was dahinter im Speicher liegt.
Die Variante mit sprint benötigt
Der Sketch verwendet 3378 Bytes (1%) des Programmspeicherplatzes. Das Maximum sind 253952 Bytes.
Globale Variablen verwenden 212 Bytes (2%) des dynamischen Speichers, 7980 Bytes für lokale Variablen verbleiben. Das Maximum sind 8192 Bytes.
Eine Variante ohne sprintf (und ohne Überschreiben von Konstanten)
void Transmit(byte t, byte m, byte h) {
printByte2digits(t);
Serial.write(',');
printByte2digits(m);
Serial.write(',');
printByte2digits(h);
Serial.println();
}
void printByte2digits(byte val) {
if (val < 10) {
Serial.write('0');
}
Serial.print(val);
}
char* test = "00,00,00";
void setup() {
Serial.begin(250000);
Transmit(10, 10, 10);
Serial.println(test);
}
void loop() {}
10,10,10
00,00,00
benötigt
Der Sketch verwendet 2074 Bytes (0%) des Programmspeicherplatzes. Das Maximum sind 253952 Bytes.
Globale Variablen verwenden 196 Bytes (2%) des dynamischen Speichers, 7996 Bytes für lokale Variablen verbleiben. Das Maximum sind 8192 Bytes.