не верно работает SD.open
- Войдите на сайт для отправки комментариев
Сб, 09/01/2021 - 14:47
Довольно простой код, физически нужный каталог и нужный файл на карте создаются, но !f_log_term всегда возвращает true, то есть я не понимаю, открыт файл или нет и могу я в него писать или нет.
Удалять в карты пробовал - результат тот же, файл и каталог создаются но в условии f_log_term всегда определяется как false
До этого
char f_name[25] = "log/0000/00/______00.txt"; char d_name[12] = "log/0000/00"; char str[4] = ""; _DT->year_f(str); memcpy (&f_name[4], str, 4); _DT->month_f(str); memcpy (&f_name[9], str, 2); _DT->hour_f(str); memcpy (&f_name[18], str, 2); memcpy (d_name, f_name, 11); memcpy (&f_name[12], "term__", 6); Serial.println(f_name); File f_log_term; if (active != 0) { f_log_term = SD.open(f_name, FILE_WRITE); if (!f_log_term) { //f_log_term.close(); SD.mkdir(d_name); f_log_term = SD.open(f_name, FILE_WRITE); if (!f_log_term) { Serial.print("MICRO SD: Open file ERROR - "); Serial.println(f_name); Serial.println(d_name); } } } if (f_log_term) { f_log_term.close(); }
До этого у меня был код который работал, но в нем были проблемы с памятью (часть работало на String) а вот все переписал на pchar и теперь нет утечки памяти, но не работает :)
Что такое у вас _DT ? Что вы делаете действиями в стоках 4...6 ?
Что такое у вас _DT ? Что вы делаете действиями в стоках 4...6 ?
Это самописный объект работы с датами, там формируется путь и имя файла с учетом ведущих нулей
в результате получаем такую строку "log/2010/10/term__08.txt"
Возможно что то с терминатором pchar, сейчас проверю
А что такое pchar, просите?
А что такое pchar, просите?
ASCIIZ строка. Pointer to null-terminated Char.
вроде победил, основная причина в том, что базовая библиотека SDFile не сильно рассчитана на одновременную работу с несколькими файлами, да и вообще не сильно она "прямая", поковырял ее и сделал так
надо будет потом формирование строки для лога поаккуратнее сделать, но в целом сейчас все работает,
и еще мне не нравится как массивы char инициируются...
Объявите их как статик и убедитесь, что использование памяти не изменилось.