|
Архиватор в микроконтроллере с малым требованием к ресурсам, сделать в МК архив, который на PC можно будет штатно разжать |
|
|
|
Nov 22 2016, 08:58
|
Гуру
     
Группа: Свой
Сообщений: 2 360
Регистрация: 6-03-06
Из: Кишинев
Пользователь №: 15 025

|
Здравствуйте!
Имеется кучка файлов, которые можно поделить на две группы 1) длинные текстовые- например, лог 6 мегабайт ежедневно 2) куча коротких текстовых - например, ежедневно директория с 1440 файлами по 200 байт (ежеминутные данные)
Хочу их заархивировать с целью: группа1 - чтобы уменьшить размер (важно при передаче) группа2 - чтобы уменьшить количество файлов, просто склейка в один файл без сжатия уже подходит (то есть что-то типа tar уже достаточно) - важно для хранения.
Архивация происходит периодически и не в реальном времени- например, раз в сутки для уже собранных файлов. То есть изменять архив не нужно и скорость работы функции не важна, фоновая задача. Обязательное требование- чтобы на компьютере это можно было разжать, используя доступные в интернете стандартные архиваторы, а не писать свой распаковщик. Я точно не буду применять архиватор в нестандартный архив. И еще крайне желательно, чтобы задача не требовала больших объемов памяти (временных буферов) во время работы. При этом скорость работы практически не важна.
Вопрос: есть ли примеры решения таких задач? аппноты какие-нибудь, блоги, линки.... Обычно на МК решается обратная задача - разжать (прошивку, образ итд), да и то из нестандартного формата, а вот упаковщики в "стандартный" архив как-то не попадаются.
Ни и если кто-то может рассказать про личный опыт, что за архиватор применяли на МК, буду безмерно счастлив.
конкретно буду реализовывать на STM32F4, если это важно
|
|
|
|
|
 |
Ответов
|
Nov 25 2016, 09:13
|
Гуру
     
Группа: Свой
Сообщений: 2 360
Регистрация: 6-03-06
Из: Кишинев
Пользователь №: 15 025

|
Про контейнер- альтернативу использованию тара. Как просто контейнер- ZIP формат без сжатия выглядит гораздо приятней (заголовок короче и файл занимает столько сколько занимает). В минусах что нужно обязательно CRC32 считать и (вроде бы обязательно) перепаковывать при добавке нового файла. И еще документирован формат прекрасно- одного того "APPNOTE.TXT - .ZIP File Format Specification", на который я давал ссылку, достаточно для написания своего "упаковщика с уровнем сжатия 0". Такое ощущение, что для меня писали, все ответы прямо в спецификации есть. Цитата 4.1.3 Data compression MAY be used to reduce the size of files placed into a ZIP file, but is not required. ..... 4.1.7 Files MAY be placed within a ZIP file uncompressed or stored. The term "stored" as used in the context of this document means the file is copied into the ZIP file uncompressed. кто-то развлекался? где незамеченные мной подводные камни? вот тут еще красивей нарисовано что к чему, отличное дополнение у чисто текстовому описанию основной спецификации. Сейчас поигрался- получается что зип-контейнер (без компрессии) на 10 файлов по 175 байт занимает 3854 байта, это почти в 3 раза меньше чем длина тара для них же (10752 байта).
|
|
|
|
|
Nov 25 2016, 10:15
|
Гуру
     
Группа: Свой
Сообщений: 2 360
Регистрация: 6-03-06
Из: Кишинев
Пользователь №: 15 025

|
Цитата(ViKo @ Nov 25 2016, 12:00)  10 * 175 = 1750. "Выигрыш" ... неочевиден. Может, лучше придумать свой компактный формат логов? Типа, не писать нули подряд, записывать дельту, и т.п. ViKo, Вы что имеете в виду? Я не понял что с чем Вы сравнили. 10 файлов без контейнера занимает не 1750 байт, а 10 кластеров на диске (в лучшем случае- 20 килобайт, в худшем/стандартном - 320 килобайт) Цитата(gerber @ Nov 25 2016, 11:21)  Не, спасибо, это не буду. Тут психологический барьер: tar и zip для контейнера это нормально, а iso - это для другого
|
|
|
|
|
Nov 25 2016, 10:34
|
Знающий
   
Группа: Участник
Сообщений: 750
Регистрация: 1-11-11
Пользователь №: 68 088

|
Цитата(Ruslan1 @ Nov 25 2016, 13:15)  Не, спасибо, это не буду. Тут психологический барьер: tar и zip для контейнера это нормально, а iso - это для другого  Ну и зря  , если вспомнить, как устроен и пишется оптический диск, то станет понятно, что для непрерывного добавления файлов это самое оно и есть.
--------------------
"... часами я мог наблюдать, как люди работают." (М. Горький)
|
|
|
|
|
Nov 25 2016, 20:24
|
Гуру
     
Группа: Свой
Сообщений: 2 360
Регистрация: 6-03-06
Из: Кишинев
Пользователь №: 15 025

|
Цитата(gerber @ Nov 25 2016, 12:34)  Ну и зря  , если вспомнить, как устроен и пишется оптический диск, то станет понятно, что для непрерывного добавления файлов это самое оно и есть. Перепроверил: у ISO большой заголовок на диск, и он хранится в теле этого iso файла. Плюс минимальный размер сектора - 2 килобайта, и каждый файл в своем секторе. В результате стоимость входа 50 килобайт, плюс по 2 килобайта на файл. В-общем, это как переход от одной операционки к другой, выигрыша по занимаемому месту нет никакого так как нужно хранить файловые таблицы и файлы квантуются сектором 2К. Пока что zip видится лучшим контейнером. попробую накропать что-то за вечерок... CRC32 не нравится, да и промежуточный буфер(даже файл) нужен для хранения этих хвостовых central directory header, но нет в мире совершенства....
|
|
|
|
|
Nov 27 2016, 23:13
|
Гуру
     
Группа: Свой
Сообщений: 2 360
Регистрация: 6-03-06
Из: Кишинев
Пользователь №: 15 025

|
В-общем, реализовал tar с дописыванием в архив новых файлов по нужде. Имею желание в будущем добавить gzip и получить tgz. сам по себе zip - тупик, если нужно даже сжать много файлов. Как контейнер он лучше чем tar, а дальше сплошные минусы и по сложности подготовки(нужно много данных хранить даже просто для организации контейнера,) и в будущем сжатия большого не даст. А делать zip для контейнера и потом еще раз сжимать этот зип как один файл- это мазохизм, уж лучше стандартный путь, через тар. Ну и с таром дописывание- это норма, а не изврат как с зипом. Кстати, с Таром тоже хватило эротики- описание только на первый взгляд понятное, пришлось и в исходники за деталями залезть, а они не самые простые. Первые(простые)- не годятся, так как формат поменяли по дороге, по этой же причине в интернете разброд и шатание, могу найти противоречащие друг другу описания. Более того- разные программы дают разный файл, и по хедеру и по длине, например ТоталКомандер и 7-zip, но не отказываются раскодировать файлы друг друга- видна повышенная толерантность и пофигизм к содержимому неосновных полей хедера и финальному маркеру  (7Zip- лучше, я не нашел отклонений от описания в полученном с его помощью файле). следующий виток- gzip, но тут вроде есть готовое, хочу попробовать mini_gzip
|
|
|
|
Сообщений в этой теме
Ruslan1 Архиватор в микроконтроллере с малым требованием к ресурсам Nov 22 2016, 08:58 Огурцов есть же какой-то зип открытый, только возьми и ско... Nov 22 2016, 09:18 AlexandrY Цитата(Ruslan1 @ Nov 22 2016, 10:58) Я то... Nov 22 2016, 09:40 Ruslan1 Цитата(AlexandrY @ Nov 22 2016, 11:40) Те... Nov 22 2016, 10:50 SasaVitebsk Цитата(AlexandrY @ Nov 22 2016, 12:40) Но... Nov 22 2016, 16:47  AlexandrY Цитата(SasaVitebsk @ Nov 22 2016, 18:47) ... Nov 22 2016, 17:10 aiwa minilzo
(__http://www.oberhumer.com/opensource/lzo... Nov 22 2016, 12:20 Ruslan1 Цитата(aiwa @ Nov 22 2016, 14:20) minilzo... Nov 22 2016, 13:03  HardEgor Цитата(Ruslan1 @ Nov 22 2016, 20:03) Прич... Nov 22 2016, 13:48   Ruslan1 Цитата(HardEgor @ Nov 22 2016, 15:48) tar... Nov 22 2016, 17:09  blackfin Цитата(Ruslan1 @ Nov 22 2016, 16:03) Все ... Nov 22 2016, 19:19 vladec zip-ы, rar-ы, tar-ы и т.п. требуют для своей работ... Nov 22 2016, 12:39 AlexandrY Цитата(vladec @ Nov 22 2016, 14:39) zip-ы... Nov 22 2016, 12:51 SasaVitebsk Речь шла о текстовом документе.
Скажем так. Пробов... Nov 22 2016, 19:06 Ruslan1 Цитата(SasaVitebsk @ Nov 22 2016, 21:06) ... Nov 22 2016, 19:14  SasaVitebsk Цитата(Ruslan1 @ Nov 22 2016, 22:14) ... Nov 22 2016, 19:19 makc Посмотрите на https://github.com/atomicobject/heat... Nov 22 2016, 20:25 AlexandrY Цитата(makc @ Nov 22 2016, 22:25) Посмотр... Nov 22 2016, 21:38  Ruslan1 Хм. Или никто не знает, или посчитали несущественн... Nov 24 2016, 23:38  makc Цитата(AlexandrY @ Nov 23 2016, 00:38) Хо... Nov 25 2016, 03:46    ViKo Цитата(Ruslan1 @ Nov 25 2016, 13:15) ViKo... Nov 25 2016, 10:23     Ruslan1 Цитата(ViKo @ Nov 25 2016, 12:23) В вашем... Nov 25 2016, 10:55      ViKo Цитата(Ruslan1 @ Nov 25 2016, 13:55) Вы, ... Nov 25 2016, 11:20       Ruslan1 Цитата(ViKo @ Nov 25 2016, 13:20) Понятно... Nov 25 2016, 12:45      AlexandrY Цитата(Ruslan1 @ Nov 25 2016, 12:55) Вы, ... Nov 25 2016, 11:24       Ruslan1 Цитата(AlexandrY @ Nov 25 2016, 13:24) Чт... Nov 25 2016, 11:42      mantech Цитата(Ruslan1 @ Nov 25 2016, 13:55) Вы, ... Nov 25 2016, 13:36 gerber Ещё ISO есть. Nov 25 2016, 09:21 firew0rker Я применила для такой задачи (сбор и ежесуточное а... Dec 7 2016, 03:29 Alechek Цитата(firew0rker @ Dec 7 2016, 08:29) Дл... Dec 7 2016, 05:15 firew0rker Так мне и надо было распаковать 1 файл на МК.
Если... Dec 7 2016, 06:27 AlexandrY Цитата(firew0rker @ Dec 7 2016, 08:27) Ес... Dec 7 2016, 06:55  firew0rker Цитата(AlexandrY @ Dec 7 2016, 13:55) Пок... Dec 7 2016, 08:43   AlexandrY Цитата(firew0rker @ Dec 7 2016, 10:43) mi... Dec 7 2016, 09:32    firew0rker Цитата(AlexandrY @ Dec 7 2016, 16:32) Да ... Dec 7 2016, 13:04     Ruslan1 Спасибо, но на линукс ради архиватора переходить н... Dec 7 2016, 19:58      jcxz Цитата(Ruslan1 @ Dec 7 2016, 22:58) У мен... Jan 3 2017, 16:50       Ruslan1 Цитата(jcxz @ Jan 3 2017, 18:50) Как я по... Jan 3 2017, 19:30
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|