Spiffs (SPI Flash File File System)
V0.3.7
Copyright (C) 2013-2017 Питер Андерссон (Pelleplutt1976 на gmail.com)
Для юридических вещей см. Лицензию. По сути, вы можете сделать все, что хотите с источником. Используйте, изменяйте, продавайте, распечатайте, закатайте и курите - пока я не буду нести ответственность.
Люблю слышать отзывы!
ВВЕДЕНИЕ
Spiffs - это файловая система, предназначенная для SPI или флэш -устройств на встроенных целях.
Spiffs разработан с учетом следующих характеристик:
- Маленькие (встроенные) цели, разреженная оперативная операция без кучи
- Можно стерто только большие области данных (блоки)
- Стереть сбросит все биты в блоке на один
- Написание притягивает один на нулевы
- Нули можно только потянуть в стирание.
- Выравнивание износа
ЗДАНИЕ
mkdir build; make
В противном случае настройте переменную builddir вверху makefile как что -то, противоположное build по умолчанию. Проверка здравомыслия на хосте через make test и обратитесь к .travis.yml для официальной углубленной процедуры тестирования. См. Вики для интеграции Speffs в проекты, а Spiffsimg от Nodemcu - хороший пример по этому вопросу.
ФУНКЦИИ
Что делает Spiffs:
- Специально разработан для низкого использования оперативной памяти
- Использует буферы оценки оцветных операций, независимо от количества файлов
- Posix-подобный API: открыть, закрывать, читать, написать, ищите, статируется и т. Д.
- Он может работать на любой или вспышке, не только SPI Flash - теоретически также на встроенной вспышке микропроцессора
- Многочисленные конфигурации Spiffs могут работать на той же цели - и даже на том же устройстве Flash SPI
- Реализует статическое выравнивание износа
- Встроенные проверки согласованности файловой системы
- Высоко настраивается
Что не делает Spiffs:
- В настоящее время Spiffs не поддерживает каталоги. Он производит плоскую структуру. Создание файла с Path TMP/myfile.txt создаст файл с именем tmp/myfile.txt вместо myfile.txt в Directory TMP .
- Это не стек в реальном времени. Одна операция записи может длиться намного дольше, чем другая.
- Плохая масштабируемость. Spiffs предназначена для небольших устройств памяти - нормальные размеры для вспышек SPI. Выходить за рамки ~ 128mbyte, вероятно, плохая идея. Это побочный эффект цели дизайна, чтобы использовать как можно меньше оперативной памяти.
- В настоящее время он не обнаруживает и не обрабатывает плохие блоки.
- Одна конфигурация, один двоичный. Там нет двойного двоичного файла, которые обрабатывают все типы конфигураций.
УВЕДОМЛЕНИЕ
0.4.0 находится в стадии строительства. Это полное переписывание и изменит основную структуру. Следовательно, он не будет совместимы с более ранними версиями файловой системы. API такой же, с незначительными модификациями. Некоторые флаги конфигурации будут удалены (так как они обязательны в 0,4,0), а некоторые функции могут упасть до 0.4.1. Если у вас есть какие -либо заботы или вопросы, это можно обсудить в выпуске № 179
Больше информации
См. Вики для настройки, интеграции, использования и оптимизации Speffs.
Для дизайна см. Docs/Tech_spec.
Для общего драйвера SPI Flash, посмотрите это.
История
0,3,7
- Исправлено предотвращение поиска отрицательных смещений #158
- Исключено с фиксированным дескриптором файла не обновлено для нескольких FD в том же файле #157
- Страница с фиксированным кэшем не закрыта для удаленных файлов #156
- Исправлена ошибка Lseek, когда именно стремится к концу полностью индексированного первого уровня LUT #148
- Проблема с фиксированным выравниванием износа № 145
- Исправлена попытка написать за пределами Flash #130,
- Установите смещение файла при поиске конца #121 (спасибо @sensslen)
- Исправлены поиск в девственных файлах #120 (спасибо @sensslen)
- Дополнительные метаданные файла #128 (спасибо @cesanta)
- Структура тестирования AFL #100 #143 (спасибо @pjsg)
- Обновления испытаний
Новые функции API:
-
SPIFFS_update_meta, SPIFFS_fupdate_meta - обновления метаданных для файла
Новая конфигурация определяет:
-
SPIFFS_OBJ_META_LEN - включить возможность добавить дополнительные метаданные в файлы
0,3,6
- Исправлена ошибка диапазона в индексе отображение памяти #98
- Добавить картирование памяти индекса #97
- Оптимизировать Spiffs_read для больших файлов #96
- Добавьте временный кэш для открытия файлов #95
- Более надежный GC #93 (спасибо @dismirlian)
- Исправлена двойная запись одинаковых данных в определенных ситуациях кэша
- Исправлена открытая ошибка в read_only сборки
- Файл не виден в spiffs_readdir #90 (спасибо @benpicco-tmp)
- Очистка кода загрузки кэша #92 (спасибо @niclash)
- Фиксированная асимметрия блокировки/разблокировки #88 #87 (спасибо @jackjefferson, @dpruessner)
- Обновления испытаний
Новые функции API:
-
SPIFFS_ix_map - Метаданы индекса карты в память для файла -
SPIFFS_ix_unmap - Метаданы uncaps Индекс для файла -
SPIFFS_ix_remap - Изменения смещения файла для карты метаданных индексов -
SPIFFS_bytes_to_ix_map_entries - утилита, получить длину необходимого вектора для данной суммы байтов -
SPIFFS_ix_map_entries_to_bytes - утилита, получить номер байта, вектор может представлять собой длину
Новая конфигурация определяет:
-
SPIFFS_IX_MAP - Включить возможность для карты метадан -данных индекса в память для более быстрого чтения -
SPIFFS_TEMPORAL_FD_CACHE - Включить временный кэш для быстрее открытия файлов -
SPIFFS_TEMPORAL_CACHE_HIT_SCORE - для настройки височного кэша
0,3,5
- Исправлена ошибка в проверке FS
- API возвращает фактические коды ошибок #84) (спасибо @nails)
- Исправить предупреждения компилятора для не GCC #83 #81 (спасибо @nails)
- Невозможно оправиться от полного FS #82 (спасибо @rojer)
- Определите Spiffs_o_* Flags #80
- Проблема с длинными именами файлов #79 (спасибо @psjg)
- Дубликат имени файла Исправление ошибки #74 (спасибо @igrr)
- Spiffs_eof и spiffs_tell вернуть неправильное значение #72 (спасибо @artempisarenko)
- Банч обновлений TestFrame #77 #78 #86 (спасибо @dpreussner, @psjg ao)
0,3,4
- Добавлен пользовательский файл обратного вызова.
- Исправлена ошибка статистики с помощью ID OBJ.
- Spiffs_probe_fs добавлен
- Добавьте возможность скомпилировать версию Spiffs только для чтения
- Сделайте магию в зависимости от длины FS, если это необходимо (см. #59 & #66) (спасибо @hreintke)
- Выставлен Spiffs_open_by_page_function
- Файл нулевого размера не может быть искать #57 (спасибо @lishen2)
- Добавить функции Tell и EOF #54 (спасибо @Raburton)
- Сделайте API String Params const #53 (спасибо @Raburton)
- Сохранить user_data во время Mount () #51 (спасибо @rojer)
Новые функции API:
-
SPIFFS_set_file_callback_func - зарегистрировать обратный вызов Информации о событиях файлов -
SPIFFS_probe_fs - Последующая вспышка SPI, пытаясь выяснить размер FS -
SPIFFS_open_by_page - Откройте файл по Page Index -
SPIFFS_eof - проверяет, достигнут ли конец файла -
SPIFFS_tell - возвращает текущее смещение файла
Новая конфигурация определяет:
-
SPIFFS_READ_ONLY -
SPIFFS_USE_MAGIC_LENGTH
0,3,3
Может быть не совместимы с 0,3,2 структурами. Смотрите выпуск № 40
- Возможность добавления целочисленного смещения в ручки файлов
- Функция усечения предполагает слишком мало бесплатных страниц #49
- Ошибка в Funcate Function #48 (спасибо @paweldefee)
- Обновить spiffs_gc.c - удалить ненужный параметр (спасибо @paweldefee)
- Обновление документов по интеграции (спасибо @paweldefee)
- Исправить усечение указателя на 64-битных платформах (спасибо @igrr)
- Файлы нуля нельзя прочитать #44 (спасибо @rojer)
- (Подробнее) Правильный расчет MAX_ID в obj_lu_find #42 #41 (спасибо @lishen2)
- Проверьте правильный код ошибки в obj_lu_find_free #41 (спасибо @lishen2)
- Моар комментарии к Spiffs_lseek (спасибо @igrr)
- Фиксированная накладка в Spiffs_page_object_ix #40 (спасибо @jmattsson @lishen2)
- Исправлен тест GC_QUICK (спасибо @jmattsson)
- Добавить флаг spiffs_excl #36
- Spiffs_close может встать молча, если кеш включен #37
- Пользовательские данные в обратном вызове #34
- Игнорирование синглтонской сборки в настройке кэша (спасибо, Лука)
- Ошибка компиляции фиксирована #32 (спасибо @chotasanjiv)
- Выровнять cand_scores (спасибо @hefloryd)
- Исправьте предупреждения по сборке, когда Spiffs_cache равен 0 (спасибо @ajaybhargav)
Новая конфигурация определяет:
0,3,2
- Ограничьте размер кэша, если дано слишком много кеша (спасибо pgeiem)
- Новая функция - контролируемая стирание. #23
- Spiffs_rename утечки файлов дескрипторы #28 (спасибо Benpicco)
- Перенос DBG Print определяет в тестовой структуре для params_test.h
- Lseek должен вернуть полученное смещение (спасибо Hefloryd)
- Фиксированный тип на DBG IFDEFS
- Предупреждение о тишине о сравнении подписанного/без знака, когда Spiffs_obj_id составляет 32 бит (спасибо Benpicco)
- Возможная ошибка в test_spiffs.c #21 (спасибо Yihcdaso-Yeskela)
- Кэш может писать слишком часто #16
- Даже обновления Moar Testrunner
- Обновление структуры тестирования и некоторые добавленные тесты
- Некоторые мысли для следующего поколения
- Тестируйте сигсев, когда у меня есть слишком много секторов № 13 (спасибо в одиночку, Wolfx2)
- GC может быть неоптимальным #11
- Исправить вечный чтение, когда objheader в последнем блоке, последняя запись
Новые функции API:
-
SPIFFS_gc_quick - позвонить неинтразивному GC -
SPIFFS_gc - вызовите полномасштабный навязчивый GC
0,3,1
- Удалили два предупреждения о возврате, был слишком триггерхаппи при выпуске
0,3,0
- Добавлено существующая изначальная проверка при создании файлов
- Много статического анализа ошибок № 6
- Добавлены переименовать фанк
- Исправить длину spiffs_read при чтении за пределами размера файла
- Добавлено чтение за пределами длины файла Testcase
- Сделано построить немного более настраиваемой
- Изменено имя в Speffs от «errno» на «err_code» из -за конфликтов, компилирующихся в Mingw
- Улучшенные проверки GC, исправили ошибку добавления, более надежный усек
- GC проверяет Preempts GC, усекает еще менее разборчиво
- Выравнивание структуры, необходимое для некоторых целей, определить в Spiffs Config #10
- Spiffs Mailystem Magic, определяется в конфигурации
Новая конфигурация определяет:
-
SPIFFS_USE_MAGIC - включить или отключить магический проверку на креплении -
SPIFFS_ALIGNED_OBJECT_INDEX_TABLES - выравнивание для определенных целей
Новые функции API:
-
SPIFFS_rename - переименовать файлы -
SPIFFS_clearerr - очищает последний errno -
SPIFFS_info - возвращает информацию об использованных и общих байтах в FS -
SPIFFS_format - форматирует файловую систему -
SPIFFS_mounted - проверяет, установлена ли файловая система