Biblioteca de descompressão compacta para uso incorporado

No momento, estamos criando um dispositivo para um cliente que obterá um bloco de dados (por exemplo, 5 a 10 KB) de um aplicativo para PC. Isso é um pouco simplificado, portanto, assuma que os dados devem ser passados e descompactados muito, não apenas uma vez por ano. O canal de comunicação é muito, muito lento, então gostaríamos de comprimir os dados de antemão, passar para o dispositivo e deixá-lo descompactar os dados para o flash interno. O dispositivo em si, no entanto, roda em um microcontrolador que não é muito rápido e não possui muita memória. Ele possui memória flash suficiente para armazenar o resultado e pode descompactar o bloco de dados à medida que é recebido, mas pode não ter RAM suficiente para armazenar todo o bloco de dados compactado ou descompactado (ou ambos!). E, claro, ele não tem um sistema operacional ou outro luxo.

Isso significa que precisamos de um algoritmo de descompressão suficientemente rápido que não use muita memória. A compactação pode ser lenta e feia, já que estamos fazendo isso no lado do PC. Embora o código C ou .NET seja preferido para compactação, para facilitar as coisas. O código de descompactação deve estar em C, pois é improvável que alguém tenha uma versão otimizada para ASM para o nosso controlador.

Encontramos o LZO, que seria quase perfeito para nós, mas, por padrão, possui a chamada licença "gratuita" (GPL), o que o torna totalmente inutilizável para o cliente. O autor diz que as licenças comerciais estão disponíveis mediante solicitação, mas infelizmente ele está inacessível no momento (por razões não técnicas, como dizem as notícias em seu site).

Encontrei algumas outras bibliotecas, incluindo o puff.c do zlib, e ainda estamos investigando, mas pensei em pedir sua experiência:

Qual algoritmo de compactação e / ou biblioteca você recomenda para fins incorporados, uma vez que o dispositivo de descompactação possui recursos realmente limitados e o código-fonte e uma licença comercial são necessários?

questionAnswers(7)

yourAnswerToTheQuestion