🐙

Arduino(6) メモリ不足対応

2021/08/16に公開

はじめに

実装を進めていくと、コンパイルした後に「動作が不安定になります」といった文言が表示されるようになり、実際正しく動作しなくなってました。この対応を考えます。

どうしたかというと

SD対応の為に、SD.h/SPI.hインクルードするだけで、グローバル変数のバイト数がものすごく大きくなります。ArduinoUnoは仕様を見ると、SRAMが2kバイトらしく、警告で出ているバイト数と割合的に合うので、グローバル変数のこのSRAMで保持されて、最大2kバイトって事の様です。これを回避するには、SRAMを増やすしかないか。
Arduinoには仕様の違うMegaがある様で、以下違い。

Uno Mega
フラッシュメモリ 32KB 256KB
SRAM 2KB 8KB
デジタルI/Oピン 14本 54本
アナログ入力ピン 6本 16本
クロック速度 16MHz 16MHz
これですね、Megaを使用しましょう。
左がMegaです。右は今まで使用してたUno

なんとUnoとはピンコンパチなので、Ethernetシールドもそのまま使用できます。
Megaでコンパイルすると、今までの赤字の警告は消えて、

グローバル変数の使用率も21[%]に改善されました。技術的には何の面白味も無いですが、解決とします。

残件

次は、ようやく赤い警告も無くなったので、憂いなくソースを合体させて動作確認を実施してきます。

Discussion