You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
50 lines
2.1 KiB
50 lines
2.1 KiB
9 years ago
|
# heatshrink
|
||
|
|
||
|
A data compression/decompression library for embedded/real-time systems.
|
||
|
|
||
|
## Key Features:
|
||
|
|
||
|
- **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.
|
||
|
- **ISC license**
|
||
|
You can use it freely, even for commercial purposes.
|
||
|
|
||
|
## Getting Started:
|
||
|
|
||
|
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_common.h`, `heatshrink_config.h`, and
|
||
|
either `heatshrink_encoder.c` or `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 `heatshrink_config.h`.
|
||
|
|
||
|
## 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_encoder.h` / `heatshrink_decoder.h` header files for API
|
||
|
documentation.
|
||
|
|
||
|
[blog post]: http://spin.atomicobject.com/2013/03/14/heatshrink-embedded-data-compression/
|
||
|
[index]: http://spin.atomicobject.com/2014/01/13/lightweight-indexing-for-embedded-systems/
|
||
|
[LZSS]: http://en.wikipedia.org/wiki/Lempel-Ziv-Storer-Szymanski
|
||
|
|
||
|
## Build Status
|
||
|
|
||
|
[![Build Status](https://travis-ci.org/atomicobject/heatshrink.png)](http://travis-ci.org/atomicobject/heatshrink)
|