надуть (распаковать) поток данных на встроенном устройстве - PullRequest
1 голос
/ 07 апреля 2019

Я собираюсь использовать сжатие для потока данных, передаваемых по медленному последовательному интерфейсу. Декомпрессия должна выполняться на недорогом микроконтроллере с ограниченными ресурсами (без ОС, без потоков, с ограниченным ОЗУ).

В аналогичной конфигурации ранее я использовал zlib's puff.c, но в этом случае a имел буфер, хранящий все данные раньше, и мог раздувать все сразу.

В моем случае у меня недостаточно памяти для буфера такого типа, поэтому мне нужно постепенно надувать поступающие данные. Поэтому вместо того, чтобы выполнять буферизацию над буфером, мне нужно было бы иметь возможность вызывать его каждый раз, когда поступают новые данные, сохраняя внутренние состояния между последующими вызовами.

Прежде чем я начну углубляться в zlib или zlibs puff.c, кто-нибудь знает, уже решена ли такая проблема где-нибудь?

Ответы [ 3 ]

0 голосов
/ 09 апреля 2019

Я использовал LZSS .Я использовал код из Харухико Окумура в качестве базы.Он использует последнюю часть несжатых данных (2K) в качестве словаря.Код, который я связал, можно изменить, чтобы он почти не использовал память, если в памяти есть все несжатые данные.С небольшим количеством Googling вы обнаружите, что множество различных реализаций со всеми видами лицензий.

Другой вариант может быть lzfx lib, который реализует LZF.Я еще не использовал это, но это кажется хорошим.Также использует предыдущие результаты, поэтому имеет низкие требования к памяти и выпускается под лицензией BSD.

0 голосов
/ 11 апреля 2019

Спасибо всем вашим комментариям и предложениям.

После расследования я либо придерживаюсь puff.c и изменяю его, либо я использую uzlib, который я нашел здесь: https://github.com/pfalcon/uzlib/

0 голосов
/ 07 апреля 2019

Алгоритм сжатия форматов файлов .GIF ( LZW , вариант LZ78) в значительной степени необходим для поддержки хэш-таблицы в памяти.Когда таблица заполняется, она очищается, и процесс повторяется, то есть таблица не увеличивается бесконечно.Нет необходимости хранить сжатые данные.Очень мало других состояний нужно поддерживать.С помощью такого алгоритма (возможно, с уменьшенным размером хеш-таблицы) вы можете распаковывать данные по мере их поступления.

Я не изучал другие алгоритмы LZ, но я ожидаю (некоторые или все?) Ихбыть похожим по природе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...