Официальный сайт компании Arduino по адресу arduino.cc
Перезапись на SD-карту
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Ср, 02/08/2017 - 13:41
Как записывать на SD карту или удалять с нее файл - знают практически все. А что делать, если мне в таблицу каждые 15 секунд надо перезаписать данные? Вроде в библиотеке нет функции перезаписи или стирания данных. Я бы каретку в начал файла бы переместил, да тоже об этом особо не пишут. Подскажите, пожалуйста?
Я бы каретку в начал файла бы переместил
Ну и помещайте, кто не даёт-то? У объекта File есть метод seek ( seek(uint32_t pos) ). Параметр - позиция каретки. Поможет ли это Вам, не знаю, но каретку перемещайте куда хотите.
Апну тему.
Как решили вопрос?
Необходимо на карту памяти перезаписывать переменные раз в 3-5мин. В файле записано такое:
Время работы в скундах;
15;
осталось часов до ТО ;
145;
15 и 145 нужно перезаписывать. Сейчас поступаю так, сначала удаляю файл, затем создаю новый с новыми переменными:
Всё работает. Но в процессе отладки столкнулся с проблемой. если обесточить ардуинку в ненужное время, между удалением и созданием файла, файл и переменные пропадают.
Может есть какойто вариант при котором переменные просто перезаписываются???
- Содаете новый файл с временным именем,
- пишете в него нужную информацию,
- удаляете старый,
- переименовываете новый.
- Содаете новый файл с временным именем,
- пишете в него нужную информацию,
- удаляете старый,
- переименовываете новый.
Проблема остаётся таже. в момент удаляем- переименовываем.
sany_sch, а сколько, по-вашему, времени занимает удаление-переименовывание файла, и как вы так точно в эти миллисекунды умудряетесь так часто отключать питание? Может быть, вам не хватает flush() или sync()?
Проблема остаётся таже. в момент удаляем- переименовываем.
Оставляйте временный. Копируйте в стандартный. Тогда всегда будет либо один, либо оба файла целых. Т.е. максимум - потеря последней записи во временный файл.
sany_sch, а сколько, по-вашему, времени занимает удаление-переименовывание файла, и как вы так точно в эти миллисекунды умудряетесь так часто отключать питание? Может быть, вам не хватает flush() или sync()?
Я сам так думал. но вот как раз во время отладки и попал на такое. Правда там перезапись шла через секунду, а не раз в 3-5 мин. Но факт есть факт. А здесь весь смысл в сохранении данных. Поэтому и спросил, возможно есть простое решение задачи.
Сейчас остановился на ведении двух файлов. и при запуске ардуинки в сетапе сравниваю переменные. и выбираю ту что больше (так по скетчу получается).
Проблема остаётся таже. в момент удаляем- переименовываем.
Оставляйте временный. Копируйте в стандартный. Тогда всегда будет либо один, либо оба файла целых. Т.е. максимум - потеря последней записи во временный файл.
примерно на таком варианте и остановился. Но хочется более простых решений.
- Содаете новый файл с временным именем,
- пишете в него нужную информацию,
- удаляете старый,
- переименовываете новый.
Проблема остаётся таже. в момент удаляем- переименовываем.
Это невозможно.
И, кстати, удаляем-переименовываем - это не один момент, а разные. Может, в этом все дело?
Проблема остаётся таже. в момент удаляем- переименовываем.
Это невозможно.
И, кстати, удаляем-переименовываем - это не один момент, а разные. Может, в этом все дело?
Я понимаю что разные. Вот мы удалили файл и в этот момент выключилось питание. Временный переименовать не успели. Запустили Ардуинку снова, она открыла файл. Но так как файла нет, она его создала. Всё, все переменные равны 0.
Ну а сообразить, что если нет файла со стандартным именем, следует проверить временным, - не судьба?
sany_sch, честное слово, Вы задаете какие-то детсадовские вопросы, на которые можно найти ответ менее чем за секунду раздумий.
Логика работы контроллера более чем в 90% случаев совпадает с обычной человеческой. Вот что бы сделали лично Вы, если бы обнаружили, что на карточке, где должен быть файл с определенным именем, его нет?
Ну а сообразить, что если нет файла со стандартным именем, следует проверить временным, - не судьба?
sany_sch, честное слово, Вы задаете какие-то детсадовские вопросы, на которые можно найти ответ менее чем за секунду раздумий.
Логика работы контроллера более чем в 90% случаев совпадает с обычной человеческой. Вот что бы сделали лично Вы, если бы обнаружили, что на карточке, где должен быть файл с определенным именем, его нет?
Андриано, Вы, наверное, не внимательно читали. Я писал:
Сейчас остановился на ведении двух файлов. и при запуске ардуинки в сетапе сравниваю переменные. и выбираю ту что больше (так по скетчу получается).
Это примерно то же что и предлагаете вы. То есть выход я нашел. А на форум зашел узнать, нет ли стандартных, более простых решений. Например, изменять не весь файл, а только переменную. Или наличие других библиотек дающих возможность напямую писать и сохранять переменные. Но наверное плохо объяснил, необезсудьте...