Hallo,
Ich habe eine kleine Funktion geschrieben, zum anhängen einer NMEA-Checksumme an einen NMEA-Datensatz. Dabei habe ich das Problem, dass bei jedem 20.-30. Datensatz die Checksumme nicht korrekt übergeben wird. Wenn ich das überprüfe, und vor dem Return die Checksumme per Serial.print ausgebe, sehe ich, dass die soweit i.O. ist. Nur die Übergabe scheint nicht hinzuhauen (es steht dann einfach nur eine "4" da). Ich nehme an, da das restliche Programm sehr groß ist (Binary sketch size: 18492 bytes), dass sich da was in den Variablen überscheibt. Die Checksumme hänge ich in einem anderen Programmteil per strcat an den Datensatz an. Also so
strcpy( outbuf, "NMEA-Datensatz ohne CS");
strcat( outbuf, checksum(outbuf));
strcat( outbuf, "\r\n");
Serial.print(outbuf);
Ich schätze also, dass mit sprintf nun den Speicher zu stark beansprucht, und suche nach einer Alternative. Alles was ich bisher zum Ersetzen von sprinft gefunden habe, bezog sich eher auf das umwandeln von floats nach ASCII.
Hat jemand eine Idee?
Gruß
J
char* checksum(char* csbuf){
char CSout[4];
// Vorige Checksumme löschen
int cs=0;
// Ohne '$'
for (int n=1; n < strlen(csbuf)+1; n++) {
// berechnen der Checksumme
cs ^= csbuf[n];
}
// Formatieren in zweistellig, führende Null in HEX
sprintf(CSout, "*%02X\0" , cs);
return CSout;
}