Welche Arten von Speicher gibt es in Arduino?
Globaler Lieferant elektronischer Komponenten AMPHEO PTY LTD: Umfangreiches Inventar für One-Stop-Shopping. Einfache Anfragen, schnelle, individuelle Lösungen und Angebote.
Dies ist ein grundlegendes Konzept in der Arduino-Programmierung. Die verschiedenen Speicherarten in einem Arduino (genauer gesagt, in seinem Mikrocontroller, wie dem ATmega328P) haben unterschiedliche Aufgaben.
Hier eine Aufschlüsselung der drei Hauptspeichertypen:
1. Flash-Speicher (Programmspeicher)
-
Was es ist: Dies ist ein nicht-flüchtiger Speicher, was bedeutet, dass die Daten auch bei ausgeschalteter Stromversorgung erhalten bleiben. Er ist wie die Festplatte des Arduino.
-
Zweck: Hier wird das kompilierte Sketch (Ihr Programmcode) und alle Konstanten, die mit dem Schlüsselwort
PROGMEM
deklariert wurden, gespeichert. Der Bootloader, ein kleines Programm, das das Hochladen von Code via USB ermöglicht, befindet sich ebenfalls hier. -
Analogie: Die "Betriebsanleitung" für den Arduino. Sie teilt dem Mikrocontroller genau mit, was er beim Starten tun soll.
-
Größe (Beispiele):
-
Arduino Uno / Nano: 32 KB
-
Arduino Mega: 256 KB
-
Arduino Micro: 32 KB
-
-
Wichtiger Hinweis: Dieser Speicher kann während der normalen Programmausführung nicht verändert werden (er ist für das laufende Programm nur lesbar). Das Beschreiben ist ein komplexer Vorgang.
2. SRAM (Statischer Direktzugriffsspeicher)
-
Was es ist: Dies ist ein flüchtiger Speicher, d.h. sein Inhalt geht beim Ausschalten der Stromversorgung verloren. Es ist der Arbeitsspeicher des Arduino, ähnlich dem RAM in Ihrem Computer.
-
Zweck: Hier werden gespeichert:
-
Variablen, die von Ihrem Sketch erstellt werden (sowohl globale als auch lokale).
-
Der Aufruf-Stack (für Funktionsaufrufe und Interrupts).
-
Dynamisch allozierter Speicher (mit
malloc()
undfree()
).
-
-
Analogie: Der "Arbeitsplatz" des Arduino. Hier finden alle aktiven Berechnungen statt, und temporäre Daten sowie aktuelle Zustände werden gehalten, während das Programm läuft.
-
Größe (Beispiele):
-
Arduino Uno / Nano: 2 KB (Dies ist die häufigste Engstelle!)
-
Arduino Mega: 8 KB
-
Arduino Micro: 2,5 KB
-
-
Wichtiger Hinweis: SRAM ist auf vielen Arduino-Boards die knappste und wertvollste Ressource. Wenn der SRAM ausgeht, kann das zu Abstürzen und unvorhersehbarem Verhalten führen.
3. EEPROM (Elektrisch löschbarer, programmierbarer Nur-Lese-Speicher)
-
Was es ist: Dies ist ein nicht-flüchtiger Speicher, ähnlich wie Flash, aber er ist für kleinere Datenmengen konzipiert, die während des Betriebs gespeichert und geändert werden müssen.
-
Zweck: Er speichert langfristige Daten, die zwischen Neustarts erhalten bleiben sollen. Zum Beispiel:
-
Gerätekonfiguration / -einstellungen
-
Kalibrierdaten
-
Ein Nutzungszähler
-
Der letzte Zustand eines Systems
-
-
Analogie: Ein kleines "Notizbuch", in dem der Arduino ein paar wichtige Notizen für den nächsten Start festhalten kann.
-
Größe (Beispiele):
-
Arduino Uno / Nano: 1 KB
-
Arduino Mega: 4 KB
-
Arduino Micro: 1 KB
-
-
Wichtiger Hinweis: Er hat eine begrenzte Anzahl von Schreib-/Löschzyklen (etwa 100.000). Daher sollte nicht ständig in einer engen Programmschleife darauf geschrieben werden.
Zusammenfassungstabelle
Speichertyp | Flüchtigkeit | Zweck | Analogie | Typische Größe (Uno) |
---|---|---|---|---|
Flash | Nicht-flüchtig | Speichert das Programm-Sketch & den Bootloader | Betriebsanleitung | 32 KB |
SRAM | Flüchtig | Speichert Variablen & Laufzeitdaten | Arbeitsplatz | 2 KB |
EEPROM | Nicht-flüchtig | Speichert langfristige Daten zwischen Neustarts | Notizbuch | 1 KB |
Praktische Tipps zur Speicherverwaltung
Da SRAM so begrenzt ist, ist seine Verwaltung für komplexe Sketche entscheidend.
-
Verwenden Sie das
F()
-Makro für Strings: Verwenden SieF()
, wenn Sie konstante Strings an den Serial Monitor senden, um sie im Flash zu behalten, anstatt sie in den SRAM zu laden.-
Anstatt:
Serial.println("Hallo, Welt!");
-
Verwenden Sie:
Serial.println(F("Hallo, Welt!"));
-
-
Verwenden Sie
PROGMEM
für große konstante Daten: Für große Nachschlagetabellen, Arrays oder Strings verwenden Sie das SchlüsselwortPROGMEM
, um sie direkt im Flash zu speichern. Sie müssen spezielle Funktionen verwenden, um sie wieder auszulesen. -
Vermeiden Sie dynamische Speicherallokation: Die Verwendung von
malloc()
undfree()
kann auf einem kleinen Mikrocontroller zu Speicherfragmentierung führen, die oft schlimmer ist als einfach nur wenig Speicher zu haben. Bevorzugen Sie statische Allokation. -
Wählen Sie Datentypen mit Bedacht: Verwenden Sie den kleinstmöglichen Datentyp, der für Ihre Variable ausreicht (z.B.
byte
oderuint8_t
anstelle vonint
, wenn Sie nur Zahlen von 0-255 benötigen). -
Reduzieren Sie globale Variablen: Bevorzugen Sie lokale Variablen, wo möglich, da diese auf dem Stack erstellt und beim Verlassen der Funktion wieder freigegeben werden, was SRAM spart.
-
Überwachen Sie Ihren Speicher: Sie können Funktionen wie
freeMemory()
aus bestimmten Bibliotheken verwenden, um während der Entwicklung und Fehlersuche den verfügbaren SRAM zu prüfen. Die Compiler-Ausgabe der Arduino-IDE zeigt ebenfalls, wie viel Flash und SRAM Ihr Sketch verwendet.
Verwandte Artikel
- ·Wie verwendet man ein Kameramodul mit einem Mikrocontroller?
- ·Wie verbindet man Arduino mit anderen Mikrocontrollern oder Geräten?
- ·Wie verbindet man einen externen Speicher mit einem FPGA?
- ·Welcher Mikrocontroller ist am besten, um Motorsprung zu steuern?
- ·Wie verbindet man einen Arduino mit Bluetooth-Modulen?
- ·Welche Sprache ist am besten für Robotik, IoT, KI, Spiele oder Web-Apps?
- ·Wie nutzt man Arduino für IoT-Anwendungen?
- ·Wie erstelle ich ein physisches Mikrocontrollerprojekt mit nuller Grundlage?
- ·Warum sind 4-Bit-Mikrocontroller noch nicht abgeschafft?