Ein Großteil des Arduino-Materials wird darunter gehandhabt. Sie werden sehen, wie viel FLASH-Speicher eine Skizze (Programm) beim Kompilieren benötigt, nicht jedoch die Größe des SRAM-Speichers. Ich musste das kürzlich auch entdecken, und so habe ich es gemacht.
Im Arduino IDE-Verzeichnis befindet sich der avr-gcc-Compiler. Es enthält auch ein Tool namens "avr-size". Gehen Sie zu Hardware / Tools / avr / bin / und es sollte dort sein.
Beim Kompilieren erstellt die IDE ein temporäres Verzeichnis in Ihrem temporären Verzeichnis und kopiert alle C (++) - Dateien in dieses Verzeichnis. Es kompiliert die Bibliotheken, Ihre Skizze (es fügt auch die erforderlichen Dinge hinzu, um sie funktionsfähig zu machen) und erstellt eine Hex- und Elf-Datei. Sie müssen lediglich Ihre Skizze kompilieren (indem Sie entweder auf Hochladen oder auf Überprüfen klicken) und in Ihrem temporären Ordner nach einem Build-Verzeichnis [Hash-Tag] suchen. Sie müssen avr-size.exe ausführen und die Elf-Datei übergeben.
Es ist eine ziemlich mühsame Konsolenarbeit, aber ich navigiere normalerweise zum Ordner bin, führe avr-size.exe aus und gebe den Pfad zu meinem temporären Ordner ein. Dies ist C: \ Benutzer [Ihr Benutzername] \ AppData \ Local \ Temp \ build [zufälliges Tag] [Skizzenname] .cpp.elf (Windows 7)
Sie könnten wahrscheinlich ein (Batch-) Skript dafür erstellen, aber da der Build-Ordner bei jeder Arduino-Sitzung konstant bleibt, stört mich das nicht.
Die Ausgabe von avr-size sieht dem sehr ähnlich (ich habe ein Xbee-Beispielprogramm kompiliert).
Wo:
- Text - Flash-Daten, die für Code verwendet werden
- Daten - Speicher mit initialisierten Daten (der Anfangswert muss auch in FLASH gespeichert werden!)
- bss - Speicher, der mit Nullen initialisiert wird (der Compiler fügt Code hinzu, damit Daten & bss initialisiert werden).
- dec & hex sind eine dezimale und hexadezimale Anzeige der kombinierten RAM- und FLASH-Größe Ihres Programms.
Die Arduino IDE, die mir gemeldet wurde, dass dieses Programm 3956 Bytes groß ist (FLASH). Dies bezieht sich auf 3924 (Code-Flash) + 32 (anfängliche RAM-Werte) = 3956 Byte FLASH. Die RAM-Nutzung ist Daten + BSS kombiniert (!) = 32 + 320 = 352 Byte SRAM-Nutzung.
Beachten Sie, dass der ATMEGA328 nur 2 KB SRAM hat und Probleme bereits auftreten können, wenn Sie darunter liegen (ich hatte unerwartetes Verhalten bei 1700 Bytes von 2048). Der ATMEGA168 verfügt über 1 KB SRAM. Alle Arduino-Megas haben 8 KB SRAM.
Als zusätzliche Anmerkung. Es gibt auch den Code "Free Memory Indicators". Sie versuchen, so viel Speicher wie möglich zuzuweisen, zu zählen, wie groß er war, und ihn freizugeben (malloc () & free ()). Wenn Sie malloc anfangs noch nicht verwendet haben, wird Ihrem Programm mehr Code hinzugefügt, für den Sie manchmal keinen Platz haben. Dies ist nicht ideal und ich habe auch nicht festgestellt, dass es stabile Ergebnisse liefert. In meinem eigenen Projekt hatte ich Ethernet + xbee + SD-Karte + eigenen Bibliothekscode auf einem Atmega328. Es war einfach nicht genug SRAM verfügbar und FLASH wurde ebenfalls knapp.
Und last but not least berücksichtigt dieser Indikator nicht den mit malloc () zugewiesenen Speicher.