rlic - マイコン向け低燃費リアルタイム圧縮ライブラリ Copyright(C) 2010 K_Yaguchi. All rights reserved. ********************************************************************** 低容量マイコン向けの圧縮/解凍ライブラリです。 最小1バイト(8bit)のバッファでリアルタイムに解凍するので、 圧縮データをROMに焼いておいて解凍しながら取り出す。といった使い方ができます。 int=32bitの場合、大体30バイト程度のRAM消費で動作します。(スタックとバッファ除く) 【用途】 ・データを圧縮してROMに焼きたい ・通信データを圧縮したい ・etc リソースがほんのちょっとROM容量を超えるせいで上位ROMを購入せざるを得ない時などにご活用ください。 【動作環境】 ROM 2KB 推奨10KB RAM 64byte 推奨 1KB AVR,PIC,H8,R8CなどCコンパイラが使えれば大体動くと思います。 手元にあったルネサス製R8C/2D(開発環境HEW)で動作確認はできました。 【使用上の注意】 char型は8bitと仮定して作っていますが、それ以外でも動くと思います。 支障が出る場合は、rlic.hのuint8の定義を変更してください。 typedef unsigned BYTE uint8 など。(BYTE=8bitの型と仮定) また、なるべく一般的なCの書き方をしているつもりですが、 コンパイラによっては文法エラーが出る可能性がありますので、その場合ソースを適時書き換えてください。 【使い方】 ・rlic.cとrlic.hをお使いの環境へ適切に追加します。(プロジェクトなど) ・rlic.hをインクルードします。 ・rlic.cをコンパイル/リンクしてください。 特別なライブラリは使用していませんので、本ライブラリ単体で動作します。 関数は全部で3つ。 rlic_setup() 初期化 rlic_compress() 圧縮 rlic_uncompress() 解凍 それぞれ使い方は、関数の解説及びサンプルを参照ください。 ※必要なバッファ 圧縮時: ソース1byte バッファ3byte 解凍時: ソース1byte バッファ1byte アルゴリズムの都合上、圧縮時のバッファは大きめに(できれば256バイト以上)とらないと ほとんど圧縮できない場合があります。 解凍時は1バイトあれば充分です。 【サンプルプログラム】 Windowsで動作するコンソールアプリケーションをサンプルとして添付しています。 ソースも添付してあるので、使い方の見本にしてください。 rlic.exeに圧縮させたいファイルをD&Dすると 元ファイル名.enc 圧縮したファイル 元ファイル名.csv 圧縮内容をcsv化したもの 元ファイル名.dec 解凍したファイル の3つができます。 .csvファイルはCソースへ圧縮データの内容を書き出したい時に使えます。const unsigned char data[]={...}; の...の部分。 .decは元ファイルと全く同じ内容になりますので、元ファイルと比較して正しく元に戻せているかチェックできます。 【圧縮アルゴリズム】 RLE(ランレングス,連長圧縮)です。 同データが連続していればいるほど圧縮率が高くなります。 手元の圧縮し易そうなbmp画像(256色x1024x768=769KB)は53KBくらいになりました。(圧縮率20%のjpegと同等) ちなみにそのjpegをこのライブラリで圧縮したら、なんと2倍に膨張しました。 こういうアルゴリズムです。 【このライブラリの取り扱いなど】 個人、法人、業務用に関わらず自由に複製、配布して構いません。 ソースコードの改変も自由です。 改変後のソースコードには元著作名を入れてください。 使用することにより生じた障害・不具合等に対する保障は出来かねますのでご了承ください。 【履歴】 2010.01.24 初版 K_Yaguchi http://www5b.biglobe.ne.jp/~kouta_y/