Можно ли сохранить File в EEPROM?

Тема в разделе "Arduino & Shields", создана пользователем YeS, 30 ноя 2017.

  1. YeS

    YeS Гик

    Всем добрый день. Для работы с файлами с SD карты используется переменная File myFile. Можно ли её целиком запихнуть в EEPROM и затем при необходимости вытащить оттуда, чтобы считать из неё данные как из File?
     
  2. DIYMan

    DIYMan Guest

    Нет.
     
  3. null

    null Гик

    Чем вам не нравится запихнуть переменную на SD карту?
     
  4. YeS

    YeS Гик

    Тем, что при первом запуске у меня файл должен читаться с SD карты, а затем я карту вытаскиваю и при повторных запусках файл должен читаться уже из EEPROM.
     
  5. rkit

    rkit Гуру

    File содержит служебную информацию, необходимую для работы с файлом. Содержимого файла эта переменная не содержит. Поэтому сохранять File в EEPROM бессмысленно. Вам нужно сохранять содержимое файла.
     
  6. null

    null Гик

    Извиняюсь за наглость, но можно описать какой проект вы делаете и что у вас за ситуация сложилась
     
  7. DIYMan

    DIYMan Guest

    Так это не равносильно утверждению "используется переменная File myFile. Можно ли её целиком запихнуть в EEPROM", не находите?

    Если вам нужно содержимое файла при первом запуске с флешки записать в EEPROM, то ответ - да, это возможно.
     
  8. b707

    b707 Гуру

    зависит от размера :)
    А то потом придет ТС и окажется. что в файле у него полное собрание сочинений Толстого...
     
  9. DIYMan

    DIYMan Guest

    Не, от размера не зависит :) Я же нигде не писал, что содержимое файла поместится ЦЕЛИКОМ ;) Какое-то содержимое - поместится, формально ответ на вопрос - да, возможно.
     
  10. YeS

    YeS Гик

    Разумеется размер файла значительно меньше. Совсем то идиотом не считайте.
    Вопрос же имеет логичное продолжение. Как это сделать?
     
  11. DIYMan

    DIYMan Guest

    Очевиден логический ответ:

    1. Прочитать документацию и просмотреть примеры в стандартной поставке Arduino IDE, касаемо библиотек SD и EEPROM. Поверьте, там есть ВСЁ;

    2. При старте дуни выполнить следующий код:

    1. прочитать из EEPROM один (два, три, четыре, больше - на выбор) байт - и если он имеет определённое вами значение (флаг того, что в EEPROM ваши данные уже записаны) - перейти на шаг 7;
    2. открыть файл;
    3. читать из файла побайтово, тут же записывая в EEPROM прочитанный байт, адрес записи в EEPROM постоянно увеличивать, запоминать, какое кол-во байт уже прочитано;
    4. закрыть файл;
    5. записать в EEPROM признак наличия в нём данных;
    6. записать в EEPROM длину хранящихся там данных;
    7. прочитать из EEPROM длину данных;
    8. прочитать сами данные.
    Собственно, всё довольно просто, как видите.
     
  12. YeS

    YeS Гик

    Очевидность ответа к сожалению не столь очевидна, потому что Вы отвечаете не на тот вопрос. Как записать в EEPROM содержимое файла понятно и так. Вопрос стоял можно ли записать значение самой переменной myFile, чтобы впоследствии считав его, работать с ней как с File. Когда мне ответили что это возможно, я спросил как? Вы же предлагаете просто иное решение. Я думаю что в результате им и придётся воспользоваться, поскольку ответ на поставленный вопрос я не получил. Хотя мне было бы удобнее всё-таки иначе.
     
  13. DIYMan

    DIYMan Guest

    Я ответил на этот вопрос сразу. Ответ - нет. Вы ооочень невнимательны, т.к. этот ответ - первый после вашего сообщения.
     
  14. ostrov

    ostrov Гуру

    И имейте ввиду, что EEPROM весьма ненадежен. Ячейки могут менять содержимое при перепадах напряжения и прочей статики. Чтобы это как то компенсировать, я лично записываю данные трижды (для параноиков можно и больше) и сравниваю их при считывании.
     
  15. rkit

    rkit Гуру

    Открываете исходник File, пишете для класса свой потомок, который реализует любую нужную вам работу.
     
  16. DetSimen

    DetSimen Guest

    ДАЁШЬ!!!! Электронный диск на Ардуине...
     
  17. b707

    b707 Гуру

    Уточните - при последующей работе SD-карта в системе останется. или ее не будет?
    Просто в первом случае можно просто сохранить в EEPROM ссылку на файл (имя файла и путь к нему). А во втором понадобится эмулировать работу с файлом через ЕЕПРОМ, как сказал rkit. Это, как мне кажется. вам абсолютно не по силам, судя по вопросам, которые вы задаете - все нужно писать с нуля, готового нет.
     
  18. YeS

    YeS Гик

    При последующей работе SD-карты не будет. Она используется только для записи/перезаписи настроек.
     
  19. YeS

    YeS Гик

    Чёрт! А вот это совсем не комельфо (задумчиво чешу в затылке). Вариант дублирования не слишком подходит ибо EEPROM на 4 килобайта, а подсчёт показывает, что из них могут максимально потребоваться 3,5. Значит продублировать не получится.
     
  20. YeS

    YeS Гик

    Резюмируя вышесказанное пожалуй придётся писать содержимое файла в EEPROM. Всех участников благодарю за советы!