arduino unoのメモリでオーバーフロー

どーもTOKKOです

今回は、arduinoでハマった小さなことを記事にしておこうと思います。
とりあえず、オーバーフローしました。
なんでかっていうと2次元配列を扱う事案がありまして

int [32][32] 配列名;

といったコードを書いたわけですが思った通りに値が表示されない…
中身を見てみると、どうも中身が安定していない…
これはオーバーフローかな?と思い調べたところやっぱりそうでした。

arduino unoはSRAM(まあメモリと思っています)を2kByte確保することができます。大抵のコンパイラはintを4Byteで持つのですが、arduinoは2Byteです。(shortと一緒)そのint型を32*32=1024個確保しようとするので、必要なメモリは2046Byteということで2kByteを軽く超えてしまった訳です。

そんなに多く配列作らねーよ!って思うかもしれませんが限界を知っておくのは重要ですね。一応arduinoの持つフラッシュメモリ(SRAMとは別のメモリと思ってます)が32kByteあるのでそれを使うのも良いかと思います。(ちょっと記述が異なるのでめんどくさい)

今回の場合、int型の2Byteを用いずに、1Byteのcharやbooleanを使えば1024個の配列を用意できましたがそれ以上はフラッシュメモリかSDカードという手になりそうです。

以下、参考文献
Arduinoシリーズ15種類の違い | まとめ比較表 http://ideahack.me/article/134
Arduinoで遊ぶページ Arduino Unoのメモリ http://garretlab.web.fc2.com/arduino/introduction/memory/

"arduino unoのメモリでオーバーフロー"へのコメントを書く

お名前:
メールアドレス:
ホームページアドレス:
コメント: