Qwertty wrote:Обмен влезет в 1К, но это неудобно. В идеале надо два буфера по 512 байт иметь. Лучше поставить М32. Не так это дорого для разового девайса.
Идеал не нужен. От файловой системы нужно создание файла, запись в файл, открытие файла и изменение размера файла.
Ты не разбирался с реализацией файловой системы SD карт?
FAT на SD карте ничем не отличается от FAT на HDD. Карта пишется секторами по 512 байт. Есть область для данных и есть область самой FAT. Это таблица кластеров. Кластер - один или 2/4/8/16... сектора. Так вот когда ты создаешь файл в файловой системе то создается запись с именем и прочими атрибутами и в ней содержится ссылка на первый кластер. Ты его пишешь посекторно и когда запишешь полностью должен найти не занятый кластер и в таблице кластеров указать для уже использованного следующий - тот который нашел. Сделать цепочку. Т.е. читать и писать область самой файловой системы. Но секу в это время продолжает слать данные. Их надо где то хранить. Поэтому создается буфер для данных и буфер для фат. Накапливаешь данные в буфере данных и сливаешь их на карту. Дальше проверяешь надо ли для следующих данных использовать следующий кластер и если да - ищешь его. Этим не надо самому заниматься, это сделает библиотека FAT, если ты конечно не решишь написать ее самостоятельно. Но пока библиотека обновляет область фат буфер в 512 байт она будет использовать по своему усмотрению. Есть дурацкий способ - не искать новый кластер. А иметь всего один файл на карте и соответственно тупо писать его в последовательные кластеры. Но бывают битые кластеры например. И если в цепочке попадется такой, то потеряешь данные. Или если на карте уже есть что нибудь - затрешь. Да и вообще - одного файла лога мало. Поэтому на чтение обычно хватает и 1К памяти - данные то пока работаем с файловой системой сами с карты не считаются. И больше 1К - если предполагается запись, особенно с асинхронного источника. Такого как пакеты с секу. Ну либо ставь М8 и забей на потери пакетов во время работы с фат карты. Впрочем может и так удастся. Если пакеты редко и небольшие, то может и в своем небольшом буфере сохранятся. Попробуй petitFAT - она в принципе оптимизирована для 1К ОЗУ. И использует всего 1 буфер в 512 байт. Но придется выкручиваться с хранением приходящих пакетов или терять их.
Qwertty wrote:FAT на SD карте ничем не отличается от FAT на HDD. Карта пишется секторами по 512 байт. Есть область для данных и есть область самой FAT. Это таблица кластеров. Кластер - один или 2/4/8/16... сектора.
>>>>>
Это все общие рассуждения на тему - Что такое FAT.
Меня же интересуют конкретные варианты реализации FAT на SD. Пробовал ли ты прошивать примеры или разбирался с документацией.
Qwertty wrote:Попробуй petitFAT - она в принципе оптимизирована для 1К ОЗУ. И использует всего 1 буфер в 512 байт. Но придется выкручиваться с хранением приходящих пакетов или терять их.
petitFAT не может изменять размер файла, не может создать файл. Для чтения файлов подходит хорошо, но не для записи.
Ну и? Я - пробовал и не раз. Свою не писал - использовал FatF. Все прекрасно читало и писало. Тебе стало от этого чем то проще?
Что petitFat пишет только в существующий файл это понятно. Именно так пытаются обойти нехватку памяти. Это костыль, но он не требует поиска пустого кластера. А этот поиск довольно много времени занимает иногда, когда карта не пуста. Вот и выбирай - поставить потолще контроллер, ужаться с М8 и урезанной библиотекой или написать свою библиотеку работы с файловой системой. И как то придумать как обойти крайне желательное наличие двух буферов по размеру сектора. Т.е. 512+512 байт.
Не с огромным, но на запись логов хватит точно. Если именно мегу охота - то М32. Можно всеми любимый кортекс. Это не ЭБУ, тут сбой не приведет к фатальным последствиям.