3 ms·
Show HN: Micro-RLE ≤264-byte compression for UART/MCU logs, zero RAM growth
I needed to stuff twice the telemetry through the same 115 kbaud line on a Cortex-M0+ that only had 8 kB flash left.
Micro-RLE is the smallest drop-in I could come up with: 264 B of Thumb code, 36 B of state, no malloc, worst-case 14 cycles/byte and still lossless for every 8-bit pattern.
On the usual sensor streams (ADC, IMU, GPS) it’s 33-70 % smaller than raw output and boots in < 600 µs, so you can fire-and-forget from main() before the PLL even locks.
Repo is a single .c file and a 3-function API—replace the weak emit() hook with your UART / DMA / ring-buffer and you’re done.
Size proof: arm-none-eabi-size micro_rle.o
text data bss
264 0 36
MIT licensed, link in the repo. Happy to hear where else this fits!
- dmitrygr 11mo agoI am thinking of my trace prints and they are usually text which actually does not compress too well with RLE. English doesn’t have too many repeated letters. LZ (even with a tiny window) would work better. That is to say: I am doubting the 33-70% compression
- CoreLathe 11mo agoThe 33-60 % figure is for repetitive firmware logs (periodic status lines, hex dumps, etc.) where the XOR-delta between successive bytes is zero most of the time. The headline should read “compresses repetitive logs”; sorry for the noise.
- deleted 11mo ago[deleted]