глюк записи в SD
- Войдите на сайт для отправки комментариев
Ср, 05/12/2018 - 21:53
Здравствуйте уважаемые коллеги.
вот всю голову сломал...
String logstring = "";
char* log_filename ="log2.csv";
//**********************************************************
dataFile = SD.open(log_filename, FILE_WRITE);
if (dataFile) {
logstring = "Date,Time";
dataFile.print(logstring);dataFile.flush();
Serial.print(logstring);
for (byte i = 0; i <54 ; i++){
logstring = ",";
logstring += i;
dataFile.print(logstring);dataFile.flush();
Serial.print(logstring);
}
dataFile.close();
в сериал выводит
Date,Time,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53
в файл пишет
Date,Time,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42
пробовал формировать всю лог-строеу и потом ее писать одним махом, тоже недописывает, только до 51, причем, если пишутся именно какие то строки, то может оборвать строку. пробовал разбивать запись на два куска 0-27 и 27-54 , все то же самое...
вроде бы и мега не забита насмерть.
Скетч использует 35494 байт (13%) памяти устройства. Всего доступно 253952 байт.
Глобальные переменные используют 4863 байт (59%) динамической памяти, оставляя 3329 байт для локальных переменных. Максимум: 8192 байт.
может кто подскажет куда копать?
кажется зацепился.
проверил не выгрузку лога, а сам лог на SD, там все ОК.
проблема в коде выгрузки, брал откуда то готовый , на коротких строках он отрабатывал нормально , а вот на длинной затыкается в неожиданных местах.
//*************** если есть запрос по порту 32000 - выгрузка лог файла ********* EthernetClient client1 = server1.available(); if (client1) { while (client1.connected()) { if (client1.available()) { char c = client1.read(); if (readString.length() < 100) { readString += c; } if (c == '\n') { myFile = SD.open(log_filename); client1.println(F("HTTP/1.1 200 OK")); client1.println("Content-Disposition: form-data; name=\"description\""); client1.println("Content-Type: text/text"); client1.println(); byte cB[64]; int cC=0; while (myFile.available()) { cB[cC]=myFile.read(); cC++; if(cC > 63) { client1.write(cB,64); cC=0; } } myFile.close(); client1.println(); delay(10); client1.stop();}}}} //*************** конец обработки запроса по порту 32000 ***********************то есть, если файл закончился раньше, чем счетчик блока, то незаполненный полностью блок пропадает.
когда лог большой, то это было незаметно ,я списывал на обрывы коннекта и глюки сети, но вот на единичной записи вылезло во-всю красоту :))
решается добавлением
перед закрытием файла.