Remix.run Logo
Show HN: Micro-RLE ≤264-byte compression for UART/MCU logs, zero RAM growth(github.com)
7 points by CoreLathe a day ago | 2 comments

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 a day ago | parent [-]

I 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 a day ago | parent [-]

The 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.