2009-10-22 36 views
14

にデータを格納するための軽量圧縮アルゴリズムIはATmega168/ATmega328マイクロコントローラと私のArduinoの上に大量のデータを保存したいが、残念ながらEEPROMストレージののみ256  キロバイト/ 512  キロバイトがあります。アルドゥイーノ:EEPROM

私の考えは、圧縮アルゴリズムを使ってサイズを細くすることです。しかし、圧縮アルゴリズムに関する私の知識は非常に低く、すぐに使えるライブラリの検索は失敗しました。

したがって、ストレージサイズを最適化する良い方法はありますか?

+1

256 KBのEEPROM? ATmega168用のAtmelページ(http://www.atmel.com/devices/atmega168.aspx)によると、512バイトのEEPROM(yes、bytes)と[ATmega328](http://www.atmel。 com/devices/atmega328.aspx)には1024バイトのEEPROMがあります。それはマイクロコントローラの外部EEPROMですか? –

答えて

13

軽量になるように設計されたLZOアルゴリズムがあります。私はAVRシステムの実装があるかどうかはわかりませんが、あなた自身で実装できるものかもしれません。

あなたのチップのEEPROMで利用可能なストレージの量についていくらか誤っているかもしれません。私はデータシートによればEEPROMサイズは、次のとおり

ATmega48P:256
ATmega88P:512
ATmega168P:512
ATmega256P:1024

注これらの値は、バイト、のようKBないことあなたはあなたの質問に言及します。これは、いかなる手段によっても、「貨物」ではありません。

+2

LZOは圧縮中に明らかに8または64 KBのメモリを必要としますが、これらのプロセッサでは問題が発生する可能性があります。 – fvu

+0

アプリケーションの種類によって異なります。データがArduinoによって圧縮されるのか、何か他のものによって圧縮されてArduinoによって圧縮解除されるのかどうかは問題になりません。私は減圧の場合を想定していた。 –

+0

お寄せいただきありがとうございます。申し訳ありませんが、確かに、私はEEPROMのサイズを混ぜて、グレッグが正しいです。実際には、実際には私は減圧部分だけが必要です。まあ、私はそれを試してみましょう.. – RngTng

7

AVRには最大で数キロバイトのEEPROMしかなく、64Kフラッシュ(標準的なArduinosはありません)以上のものがほとんどありません。

保存する必要があり、イメージなどの修正が必要な場合は、Flashを使用してみてください簡単な画像の場合、粗いRLEエンコーディングは長い道のりになります。

例えば、ログに記録されたデータやオーディオなどのように、何かをランダムに圧縮すると、AVRのオーバーヘッドが大きくなります。このデータを保持するシリアルEEPROMチップを入手する方が良いでしょう。 Arduinoのサイトにはinterfacing with a 64K chipというページがあります。それ以上のものを望むなら、たとえばSPIでSDカードとのインタフェースを見てください。this audio shield

3

LZSSのようなアルゴリズムは、おそらく組み込みプラットフォームに適しています。それらは単純なアルゴリズムであり、多くのメモリを必要としません。

LZS私はよく知っている人です。これは、圧縮と解凍に2kBの辞書を使用します(辞書は、圧縮されていないデータストリームの最新の2kBです)。 (LZS was patented by HiFn、しかし私の知る限り、すべての特許が期限切れになっている。)

しかし、私は、最近のArduinosに使用ATmega328は、唯一の2キロバイトのSRAMに512バイトを持っているので、多分LZSがあまりにも大きいことがわかりそれ。私はあなたが小さい辞書で変形を使用することができると確信していますが、私はどの圧縮率を達成するか分からない。

1

LZJBは非常に短く、シンプルで軽量です。

また、FastLZは一見価値があるかもしれません。

1

「遅延許容ネットワークでのエネルギー制約付きデバイスのデータ圧縮アルゴリズム」に記載されている方法は、ATmega328で実行される可能性があります。

参考文献:C. SadlerおよびM. Martonosi、「遅延許容ネットワークにおけるエネルギー制限デバイスのデータ圧縮アルゴリズム」、Embedded Networked Sensor Systems(SenSys)2006年11月のACM会議の議事録、2006年11月.pdf。 MSPGCCのS-LZWソース:slzw.tar.gzそれは超単純なアルゴリズム、あなたはおそらく、コードのことが可能です

<mark><byte><count> 

:あなただけのいくつかの繰り返しゼロのを削除したり、そのような、Run-length encoding リピーティングバイトシーケンスを使用する場合は3月10日、2007年

0

をアップデートして保存されます数行のコードで自分自身

0

外部EEPROM(たとえばI2C経由)はオプションではありませんか?圧縮アルゴリズムを使用しても、内部EEPROMに保存できるデータのサイズが単純な方法では決まらない可能性があります。 そして、実際にkBYTESを意味する場合は、SDCard SPIに接続されています...軽量のオープンソースのFAT互換ファイルシステムがネット上にあります。

関連する問題