Heim Der Blog Blog Details

Welche Arten von Speicher gibt es in Arduino?

October 10 2025
Ampheo

Anfrage

Globaler Lieferant elektronischer Komponenten AMPHEO PTY LTD: Umfangreiches Inventar für One-Stop-Shopping. Einfache Anfragen, schnelle, individuelle Lösungen und Angebote.

SCHNELLE ANFRAGE
ZUR RFQ-LISTE HINZUFÜGEN
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.

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.

Welche Arten von Speicher gibt es in Arduino?

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):

  • 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() und free()).

  • 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.

  1. Verwenden Sie das F()-Makro für Strings: Verwenden Sie F(), 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!"));

  2. Verwenden Sie PROGMEM für große konstante Daten: Für große Nachschlagetabellen, Arrays oder Strings verwenden Sie das Schlüsselwort PROGMEM, um sie direkt im Flash zu speichern. Sie müssen spezielle Funktionen verwenden, um sie wieder auszulesen.

  3. Vermeiden Sie dynamische Speicherallokation: Die Verwendung von malloc() und free() kann auf einem kleinen Mikrocontroller zu Speicherfragmentierung führen, die oft schlimmer ist als einfach nur wenig Speicher zu haben. Bevorzugen Sie statische Allokation.

  4. Wählen Sie Datentypen mit Bedacht: Verwenden Sie den kleinstmöglichen Datentyp, der für Ihre Variable ausreicht (z.B. byte oder uint8_t anstelle von int, wenn Sie nur Zahlen von 0-255 benötigen).

  5. 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.

  6. Ü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.

Ampheo