реклама на сайте
подробности

 
 
> Архиватор в микроконтроллере с малым требованием к ресурсам, сделать в МК архив, который на PC можно будет штатно разжать
Ruslan1
сообщение Nov 22 2016, 08:58
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 360
Регистрация: 6-03-06
Из: Кишинев
Пользователь №: 15 025



Здравствуйте!

Имеется кучка файлов, которые можно поделить на две группы
1) длинные текстовые- например, лог 6 мегабайт ежедневно
2) куча коротких текстовых - например, ежедневно директория с 1440 файлами по 200 байт (ежеминутные данные)

Хочу их заархивировать с целью:
группа1 - чтобы уменьшить размер (важно при передаче)
группа2 - чтобы уменьшить количество файлов, просто склейка в один файл без сжатия уже подходит (то есть что-то типа tar уже достаточно) - важно для хранения.

Архивация происходит периодически и не в реальном времени- например, раз в сутки для уже собранных файлов. То есть изменять архив не нужно и скорость работы функции не важна, фоновая задача.
Обязательное требование- чтобы на компьютере это можно было разжать, используя доступные в интернете стандартные архиваторы, а не писать свой распаковщик. Я точно не буду применять архиватор в нестандартный архив.
И еще крайне желательно, чтобы задача не требовала больших объемов памяти (временных буферов) во время работы. При этом скорость работы практически не важна.


Вопрос: есть ли примеры решения таких задач? аппноты какие-нибудь, блоги, линки....
Обычно на МК решается обратная задача - разжать (прошивку, образ итд), да и то из нестандартного формата, а вот упаковщики в "стандартный" архив как-то не попадаются.

Ни и если кто-то может рассказать про личный опыт, что за архиватор применяли на МК, буду безмерно счастлив.

конкретно буду реализовывать на STM32F4, если это важно
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
k155la3
сообщение Nov 25 2016, 07:17
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 123
Регистрация: 8-03-09
Из: Днепр
Пользователь №: 45 848



Архиватору требуется большой объем памяти для анализа инф-ии.
Если у Вас логи "типовые", то для создания словаря для паковки можно их (логи) слить
на PC, и получить "словарь", который потом прошить в контроллер.
Т.о. в контроллере будет не поный архиватор, а его урезанная часть,
с примитивным анализом - только на цепочки повторяющихся символов.
и упаковку "словарных" комбинаций.
Go to the top of the page
 
+Quote Post
Ruslan1
сообщение Nov 25 2016, 09:13
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 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 байта).
Go to the top of the page
 
+Quote Post
ViKo
сообщение Nov 25 2016, 10:00
Сообщение #4


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(Ruslan1 @ Nov 25 2016, 12:13) *
Сейчас поигрался- получается что зип-контейнер (без компрессии) на 10 файлов по 175 байт занимает 3854 байта, это почти в 3 раза меньше чем длина тара для них же (10752 байта).

10 * 175 = 1750. "Выигрыш" ... неочевиден. biggrin.gif
Может, лучше придумать свой компактный формат логов? Типа, не писать нули подряд, записывать дельту, и т.п.
Go to the top of the page
 
+Quote Post
Ruslan1
сообщение Nov 25 2016, 10:15
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 360
Регистрация: 6-03-06
Из: Кишинев
Пользователь №: 15 025



Цитата(ViKo @ Nov 25 2016, 12:00) *
10 * 175 = 1750. "Выигрыш" ... неочевиден. biggrin.gif
Может, лучше придумать свой компактный формат логов? Типа, не писать нули подряд, записывать дельту, и т.п.

ViKo, Вы что имеете в виду? Я не понял что с чем Вы сравнили. 10 файлов без контейнера занимает не 1750 байт, а 10 кластеров на диске (в лучшем случае- 20 килобайт, в худшем/стандартном - 320 килобайт)

Цитата(gerber @ Nov 25 2016, 11:21) *
Ещё ISO есть.

Не, спасибо, это не буду. Тут психологический барьер: tar и zip для контейнера это нормально, а iso - это для другого sm.gif
Go to the top of the page
 
+Quote Post
ViKo
сообщение Nov 25 2016, 10:23
Сообщение #6


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(Ruslan1 @ Nov 25 2016, 13:15) *
ViKo, Вы что имеете в виду? Я не понял что с чем Вы сравнили. 10 файлов без контейнера занимает не 1750 байт, а 10 кластеров на диске (в лучшем случае- 20 килобайт, в худшем/стандартном - 320 килобайт)

В вашем устройстве с микроконтроллером есть диск (с кластерами)? blink.gif Или вы хотите место на компьютере, куда передаете, сэкономить? rolleyes.gif Тогда там и сжимайте, на компьютере. biggrin.gif
Вам обязательно накапливать ежеминутные данные в виде отдельного файла? Складывайте в ежечасные. rolleyes.gif
Go to the top of the page
 
+Quote Post
Ruslan1
сообщение Nov 25 2016, 10:55
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 2 360
Регистрация: 6-03-06
Из: Кишинев
Пользователь №: 15 025



Цитата(ViKo @ Nov 25 2016, 12:23) *
В вашем устройстве с микроконтроллером есть диск (с кластерами)? blink.gif Или вы хотите место на компьютере, куда передаете, сэкономить? rolleyes.gif Тогда там и сжимайте, на компьютере. biggrin.gif
Вам обязательно накапливать ежеминутные данные в виде отдельного файла? Складывайте в ежечасные. rolleyes.gif

Да, у меня есть кластеры (в виде файловой системы). На компьютере сэкономить место - не первостепенная задача, но там тоже проблема есть, если не архивировать (inode table совсем не резиновая). Нет, это не для передачи архив, это резервное хранилище на случай оффлайновой работы и разборок в случае проблем. А передаются данные пофайлово в онлайне, так же и обрабатываются, ежеминутно. но в хранилке локальной остается копия, которая должна совпадать с переданным оригиналом.

Вы, вероятно, не сталкивались с подобным, у меня сейчас ситуация следующая: за 100 дней накапливается почти полтора миллиона файлов, занимающие 4 гигабайта (если кластер 32к) на устройстве хранения, при этом собственно файлы имеют общий объем 24 мегабайта.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Nov 25 2016, 11:20
Сообщение #8


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(Ruslan1 @ Nov 25 2016, 13:55) *
Вы, вероятно, не сталкивались с подобным, у меня сейчас ситуация следующая: за 100 дней накапливается почти полтора миллиона файлов, занимающие 4 гигабайта (если кластер 32к) на устройстве хранения, при этом собственно файлы имеют общий объем 24 мегабайта.

Понятно. Если это резервный архив, то почему не делать один файл на час или день? А на компе своей утилиткой выделять ежеминутные данные, когда это в исключительном случае потребуется. Зачем эта 100% идентичность? Тем более, все равно объединяете в один файл. Вам, конечно, виднее.
Еще и на количестве записей на диск сэкономите.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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
|||- - 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   Цитата(Ruslan1 @ Nov 25 2016, 13:15) Не, ...   Nov 25 2016, 10:34
|- - Ruslan1   Цитата(gerber @ Nov 25 2016, 12:34) Ну и ...   Nov 25 2016, 20:24
|- - Ruslan1   В-общем, реализовал tar с дописыванием в архив нов...   Nov 27 2016, 23:13
- - 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


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 20:42
Рейтинг@Mail.ru


Страница сгенерированна за 0.01513 секунд с 7
ELECTRONIX ©2004-2016