В настоящее время мы создаем устройство для клиента, которое получит блок данных (например, 5-10 КБ) из приложения для ПК.Это немного упрощено, поэтому предположим, что данные должны передаваться и распаковываться много раз, а не только раз в год.Канал связи очень, очень медленный, поэтому мы хотели бы заранее сжать данные, передать их на устройство и позволить ему распаковать данные во внутреннюю флэш-память.Само устройство, однако, работает на микроконтроллере, который не очень быстрый и не имеет много памяти.Он имеет достаточно флэш-памяти для хранения результата и может распаковывать блок данных по мере его получения, но может не иметь достаточно оперативной памяти для хранения всех сжатых или несжатых (или даже обоих!) Блоков данных.И, конечно, у него нет операционной системы или другой роскоши.
Это означает, что нам нужен достаточно быстрый алгоритм распаковки, который не использует много памяти.Сжатие может быть медленным и уродливым, поскольку мы делаем это на стороне ПК.Код C или .NET предпочтительнее для сжатия, чтобы упростить процесс.Код распаковки должен быть на C, поскольку маловероятно, что кто-то имеет оптимизированную для ASM версию для нашего контроллера.
Мы нашли LZO, который был бы почти идеален для нас, но у него есть так называемое «бесплатное»лицензия (GPL) по умолчанию, что делает ее полностью непригодной для нашего клиента.Автор говорит, что коммерческие лицензии доступны по запросу, но, к сожалению, в настоящее время он недоступен (по нетехническим причинам, как говорят новости на его сайте).
Я нашел несколько других библиотек, включая puff.cот zlib, и мы все еще исследуем, но я подумал, что я бы попросил вашего опыта:
Какой алгоритм и / или библиотеку сжатия вы рекомендуете для встраиваемых целей, учитывая, что устройство декомпрессии действительно ограничило ресурсыа исходный код и коммерческая лицензия требуются?