Skip to content
Embedead-InsidePublic

About

A hyper-compact, zero-RAM, ultra-fast 16-bit RLE encoder/decoder for bare-metal & embedded data streams (e.g., 12-bit ADC). 12bit ADC等のデータストリームに特化した、ベアメタル環境向けの極小・メモリ消費ゼロ・超高速16bit RLE圧縮ライブラリ。

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

7 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Compact Bare-Metal RLE (16-bit)

License: MIT-0 Language: C99

C言語で書かれた、ベアメタル環境・マイコンデータストリーム(12ビットADCや各種センサーなど)に特化した、極小・メモリ消費ゼロ・超高速なランレングス圧縮(RLE)エンコーダ/デコーダです。

特徴

  • 圧倒的なコードサイズ: 複雑な条件分岐やインデックス計算を排除し、ポインタ演算とビット処理のみで構成された数行のコアロジック。
  • メモリ(RAM)消費ゼロ: 静的・動的バッファ(malloc 等)を一切使用せず、CPUレジスタ内だけで処理が完結。
  • データ肥大化の防止: データが全く連続しない最悪のケースでも、圧縮後のサイズが元のデータサイズを決して超えません(等倍を維持)。
  • 32-bit CPU 最適化: 内部カウンタや戻り値に uint32_t を採用。32ビット環境でのレジスタ処理を最速化し、65,535要素を超える巨大ストリームの処理にも対応。
  • コンパイル時設定: 有効データビット数やRLEカウンタビット数を、#define マクロで簡単に調整可能。

ビットパッキング構造(例:12ビット有効データの場合)

ポーリング(データ蓄積)の段階であらかじめ下位の不安定なノイズビットを切り捨てておくことで、1つの16ビットの箱の中に「RLEカウンタ」と「有効データ」をギューギューに詰め込みます。

 15          12   11                          0
+----------------+-------------------------------+

| RLEカウンタ - 1 | 有効センサーデータ            |
| (4ビット: 1-16) | (12ビット: 0-4095)           |
+----------------+-------------------------------+

使い方

1. 設定

ヘッダファイル(rle16.h)で、事前に切り捨てられた有効センサーデータのビット幅を定義します。

#define RLE16_VALID_BITS      12  // 例:12ビットADCデータ(下位4ビットノイズ切り捨て済み)

2. エンコード(圧縮)

データが溜まったバッファとその個数を渡します。戻り値として、生成された圧縮パケットの正確な個数が uint32_t で返ります。

#include "rle16.h"

#define BUFFER_SIZE 1000
uint16_t raw_buffer[BUFFER_SIZE];  // 切り捨て済みの生データ (0-4095)
uint16_t comp_buffer[BUFFER_SIZE]; // 圧縮データが格納されるバッファ

void compress_sample(void) {
    // 圧縮後のパケット数が uint32_t で返ります
    uint32_t compressed_count = rle16_encode(raw_buffer, BUFFER_SIZE, comp_buffer);
}

3. デコード(復元)

圧縮バッファとパケット数を渡すことで、元のデータストリームに展開します。戻り値として、復元されたデータの総数が uint32_t で返ります。1つのバッファに連続して詰め込まれたストリームデータも正確に復元可能です。

#include "rle16.h"

uint16_t decomp_buffer[BUFFER_SIZE]; // 復元データが格納されるバッファ

void decompress_sample(uint32_t compressed_count) {
    // 復元された元のデータ総数が uint32_t で返ります
    uint32_t restored_count = rle16_decode(comp_buffer, compressed_count, decomp_buffer);
}

ライセンス

このプロジェクトはMIT-0ライセンスのもとで公開されています。詳細はLICENSEファイルをご覧ください。

  • 商用利用・個人利用を問わず、完全自由に使用できます。
  • 著作権表示やライセンス文言の保持・記載義務すらありません。
  • ソースコードの改変、流用、再配布、自社製品への組み込み等、制限なくご活用いただけます。

About

A hyper-compact, zero-RAM, ultra-fast 16-bit RLE encoder/decoder for bare-metal & embedded data streams (e.g., 12-bit ADC). 12bit ADC等のデータストリームに特化した、ベアメタル環境向けの極小・メモリ消費ゼロ・超高速16bit RLE圧縮ライブラリ。

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages