17

ATmega168 / ATmega328マイクロコントローラーを使用してArduinoに大量のデータを保存したいのですが、残念ながら、EEPROMストレージは256 KB /512KBしかありません。

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

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

4

8 に答える 8

16

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

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

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

質問で言及したように、これらの値はKB ではなくバイト単位であることに注意してください。これは、決して「たわごと」ではありません。

于 2009-10-22T10:01:29.837 に答える
7

AVR にはせいぜい数キロバイトの EEPROM しかなく、64K フラッシュを超えるものはほとんどありません (標準の Arduino にはありません)。

たとえば画像など、何かを保存する必要があり、めったに変更しない場合は、作業するためのスペースがはるかに多いため、Flash を使用してみることができます。単純な画像の場合、一部の粗い RLE エンコーディングが大いに役立ちます。

ログに記録されたデータ、音声など、よりランダムなものを圧縮すると、AVR に膨大な量のオーバーヘッドがかかります。このデータを保持するシリアル EEPROM チップを入手する方がよいでしょう。Arduino のサイトには、64K チップとのインターフェースに関するページがあり、これは . それ以上のものが必要な場合は、たとえばこのオーディオシールドで、SPI を使用した SD カードとのインターフェースを見てください。

于 2009-10-22T18:33:25.317 に答える
3

NASA の研究はこちら(追記)

LZWに関する1989年の記事の再投稿はこちら

シンプルに保ち、圧縮を追加するコスト/ペイアウトの分析を実行します。これには、時間と労力、複雑さ、リソースの使用、データの圧縮率などが含まれます。

于 2009-10-22T10:03:53.813 に答える
3

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

LZSは私がよく知っているものです。圧縮と解凍に 2 kB のディクショナリを使用します (ディクショナリは、圧縮されていないデータ ストリームの最新の 2 kB です)。( LZS は HiFn によって特許が取得されましたが、私が知る限り、すべての特許は失効しています。)

しかし、最近の Arduino で使用されているATmega328には 512 バイトから 2 kB の SRAM しかないため、LZS でさえ大きすぎる可能性があります。より小さな辞書でバリアントを使用できると確信していますが、達成できる圧縮率はわかりません。

于 2009-11-04T23:54:32.467 に答える
1

論文「遅延耐性ネットワークにおけるエネルギー制約のあるデバイスのデータ圧縮アルゴリズム」で説明されている方法は、ATmega328で実行される可能性があります。

参照:C。SadlerおよびM. Martonosi、「遅延耐性ネットワークにおけるエネルギー制約のあるデバイスのデータ圧縮アルゴリズム」、組み込みネットワークセンサーシステムに関するACM会議の議事録(SenSys)2006、2006年11月。.pdf。MSPGCCのS-LZWソース:slzw.tar.gz。2007年3月10日更新。

于 2010-03-31T11:13:40.603 に答える
1

また、非常に短く、シンプルで軽量なLZJBも参照してください。

また、FastLZは一見の価値があるかもしれません。LZJB よりも圧縮率が高く、解凍に必要なメモリはごくわずかです。

于 2009-11-15T05:10:35.070 に答える
0

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

于 2014-11-19T21:33:59.153 に答える
0

繰り返しゼロなどを削除したいだけの場合は、ランレングス エンコーディングを使用します。 繰り返しバイト シーケンスは次のように保存されます。

<mark><byte><count>

これは非常に単純なアルゴリズムであり、おそらく数行のコードでコーディングできます。

于 2014-11-14T09:53:32.937 に答える