http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=62968、http://www.avrfreaks.net/index.php?name=でavr-size
説明されているように、ユーティリティを使用してRAMの静的使用量を確認できます。 PNphpBB2&file = viewtopic&t = 82536、http: //www.avrfreaks.net/index.php?name = PNphpBB2&file = viewtopic&t = 95638 、
およびhttp://letsmakerobots.com/node/27115
avr-size -C -x Filename.elf
(avrサイズのドキュメント:http ://ccrma.stanford.edu/planetccrma/man/man1/avr-size.1.html )
IDEでこれを設定する方法の例に従います。Code::Blocksで、プロジェクト->ビルドオプション->ビルド前/ビルド後の手順->ビルド後の手順には、次のものが含まれます。
avr-size -C $(TARGET_OUTPUT_FILE)
また
avr-size -C --mcu=atmega328p $(TARGET_OUTPUT_FILE)
ビルド終了時の出力例:
AVR Memory Usage
----------------
Device: atmega16
Program: 7376 bytes (45.0% Full)
(.text + .data + .bootloader)
Data: 81 bytes (7.9% Full)
(.data + .bss + .noinit)
EEPROM: 63 bytes (12.3% Full)
(.eeprom)
データはSRAMの使用量であり、コンパイル時にコンパイラーが認識している量のみです。また、実行時に作成されるもの(特にスタックの使用)のためのスペースも必要です。
スタックの使用状況(ダイナミックRAM)を確認するには、http://jeelabs.org/2011/05/22/atmega-memory-use/から
これは、現在使用されているRAMの量を決定する小さなユーティリティ関数です。
int freeRam () {
extern int __heap_start, *__brkval;
int v;
return (int) &v - (__brkval == 0 ? (int) &__heap_start : (int) __brkval);
}
そして、そのコードを使用したスケッチは次のとおりです。
void setup () {
Serial.begin(57600);
Serial.println("\n[memCheck]");
Serial.println(freeRam());
}
freeRam()関数は、ヒープの終わりとスタックに最後に割り当てられたメモリの間に存在するバイト数を返すため、スタック/ヒープが衝突する前に実質的にどれだけ大きくなるかを示します。
スタック/ヒープの衝突を引き起こしていると思われるコードの前後で、この関数の戻り値を確認できます。