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