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