keine versierten C- und Sketch-Spezialisten hier im Forum, die SD cards mit Arduino nutzen und das Programm selber mal testen und debuggen können?
ich verwende einen Due...
habs aber trotzdem probiert mit kürzeren Buffern => leider auch keine Änderung...![]()
keine versierten C- und Sketch-Spezialisten hier im Forum, die SD cards mit Arduino nutzen und das Programm selber mal testen und debuggen können?
Also entweder liest du dir keine Fehlermeldungen des Compilers durch oder der Arduino-Compiler ist absoluter Schrott.Code:int16_t fscanf_ ( File * stream, const char fmtstr[], ... ) { const char maxstrsize = 1024; char str[maxstrsize]; va_list args; int16_t i=0, cnt=0; int16_t chr;
Und durch die Fehlerhafte Stringgröße schreibst du wahrscheinlich irgendwohin und rennst dann hier ins Nirvana:
Zudem ist es auch ziemlich schlecht, hier nicht auf maxstrsize zu überprüfen!Code:Serial.print("fscanstr:"); Serial.println(str);
Code:strcpy(str, ""); while ( stream->available() ) { chr = stream->read() ; if (chr>=0 && chr!='\n') { str[i]=(char)chr; ++i; } else break; }
mfg
Ein char ist ein uint8 = 0-255.
Und ein normaler Compiler würde dich darauf hinweisen, dass hier ein Overflow stattfindet.
mfg
Geändert von Wsk8 (08.03.2015 um 16:28 Uhr)
Könnte es daran liegen, dass es ein 32bit Prozessor ist? Und eigentlich sollten float und double eigentlich das selbe sein...
mfg
ja, stimmt, ich arbeite meist mit dem Due!
Da muss man auch im Vergleich zum AVR sehr mit int aufpassen (32 bit statt 16),
und char ist unsigned im Gegensatz zum AVR (signed) - außer bei Ausgabestrings für Serial().
Damit es dann aber sowohl mit ARM als auch AVR funktioniert, verwende ich daher möglichst die C11 Typen ( zumindest wo ich dran denke^^).
Geändert von HaWe (09.03.2015 um 09:49 Uhr)
Lesezeichen