2016-11-21 10 views
0

私は辞書として使用し、LEDアレイを通過する2進数の3次元配列を持っています。辞書は27文字をカバーし、各文字は30x30ピクセル(各ピクセルは0または1)をカバーします。Arduinoバイナリ配列が大きすぎます

私はIntel Edisonを使用していましたが、コードはうまくいきましたが、私はEdisonをPCに接続するのに問題があった後で(一度置き換えても)エッチンを捨てました。私はArduino Unoに切り替えましたが、配列が大きすぎるというエラーが表示されています。

今、私はブール値として配列を設定しています。とにかく、ビットとして代わりにそれを設定することによって、配列のメモリ要求を減らすためにはありますか?配列はちょうどゼロと1からなります。

は、ここでは、コードのスニップです:

boolean PHDict[27][30][30] = { 
/* A */ {{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* this is one column of thirty, that show "A" as a letter */ 

答えて

0

あなたは、各エントリは32ビットの数にパックされた30ビットが含まれてい

#include <stdint.h> 

//... 

uint32_t PHdict[27][30] = { 
{ 0x00004000, ... }, 
.... 
}; 

..として、それを書くことができます。 サイズは4kバイト未満です。

アレイを読み込むときにビットを解凍するコードと、パックされた値を生成する方法(「ホスト」コンピュータで実行されるプログラム、つまりソースコードの初期化された配列を生成する方法) )

AVRプロセッサの場合、DMの代わりにPM(フラッシュメモリ)に格納されている配列をコンパイラに伝える方法もあります - DMであれば、コンパイラは初期化を行う必要がありますとにかくPMのデータを読み込み、プログラムが開始される前にコピーするので、PMに明示的に格納することをお勧めします。 https://gcc.gnu.org/onlinedocs/gcc/AVR-Variable-Attributes.html#AVR-Variable-Attributes

実際、プロセッサのフラッシュメモリの量によっては、ビットをパックする必要なく問題を解決するには、プロセッサをPMに変更するだけで十分です。

関連する問題