A data compression/decompression library for embedded/real-time systems.
Low memory usage (as low as 50 bytes)
It is useful for some cases with less than 50 bytes, and useful for many general cases with < 300 bytes.
Incremental, bounded CPU use
You can chew on input data in arbitrarily tiny bites. This is a useful property in hard real-time environments.
Can use either static or dynamic memory allocation
The library doesn't impose any constraints on memory management.
You can use it freely, even for commercial purposes.
There is a standalone command-line program,
heatshrink, but the
encoder and decoder can also be used as libraries, independent of each
other. To do so, copy
heatshrink_decoder.c (and their
respective header) into your project.
Dynamic allocation is used by default, but in an embedded context, you
probably want to statically allocate the encoder/decoder. Set
HEATSHRINK_DYNAMIC_ALLOC to 0 in
More Information and Benchmarks:
heatshrink is based on LZSS, since it's particularly suitable for compression in small amounts of memory. It can use an optional, small index to make compression significantly faster, but otherwise can run in under 100 bytes of memory. The index currently adds 2^(window size+1) bytes to memory usage for compression, and temporarily allocates 512 bytes on the stack during index construction.
For more information, see the blog post for an overview, and the
heatshrink_decoder.h header files for API