Speichermanagement

Lesezeit: 4 Minuten

Der Spe­ich­er der Arduinos wird für größere Pro­gramme oft knapp. Das geschieht beson­ders dann, wenn viele ⇒Vari­able und ⇒Arrays ver­wen­det wer­den oder die Anweisung ⇒Serial.print häu­fig benutzt wird.
Allerd­ings unter­schei­den sich die ver­schiede­nen Arduinos in der ⇒Spe­icher­ausstat­tung.

Es gibt ver­schiedene Möglichkeit­en, den ver­wen­de­ten Spe­ich­er zu opti­mieren.

Ver­wen­dung von Vari­ablen mit dem ger­ingst­möglichen Spe­icherbe­darf

Je nach Ver­wen­dungszweck und der benötigten Größe soll­test du den Vari­ablentyp ver­wen­den, der die Anforderun­gen erfüllt und gle­ichzeit­ig den ger­ing­sten Spe­icher­platz beansprucht.

Vari­ableGel­tungs­bere­ichSpe­icherbe­darfBeze­ich­nung in C
byteGan­zahlen 0 bis 2551 Byte (8 Bits)signed char
intGanz­zahle­nahlen ‑32.768 bis 32.7672 Bytes (16 Bits)int16_t
unsigned intGanz­zahlen 0 bis 65.5354 Bytes (32 Bits)uint16_t
long-2.147.483.648 bis 2.147.483.6474 Byte (32 Bits)int32_t
unsigned long0 bis 4.294.967.2954 Byte (32 Bits)uint32_t
floatDez­i­malzahlen4 Byte (32 Bits)float

F‑Makro

In vie­len Pro­gram­men wer­den ⇒Serial.print/Serial.println-Anweisun­gen aus­ge­führt. Jede dieser Anweisun­gen belegt Spe­icher­platz im ⇒SRAM. Da es sich aber nicht um einen unverän­der­lichen String han­delt, ist die Spe­icherung im SRAM nicht notwendig.

Das F‑Makro sorgt dafür, dass der Text nicht im SRAM verbleibt, er wird vielmehr im deut­lich größeren ⇒Flash abgelegt und stellt so Spe­icher­platz für Vari­ablen im SRAM zur Ver­fü­gung.

Beispiel:

PROGMEM

PROGMEM weist den Com­pil­er an, die Dat­en im ⇒Flash-Spe­ich­er abzule­gen.

Dies gilt aber nur für Vari­able, die einen unverän­der­lichen Wert (Kon­stante) haben. Sie müssen glob­al im Kopf des Pro­gramms definiert wer­den.

Das Pro­gramm erstellt ein Array von beliebi­gen Zahlen klein­er als 255. Anschließend wird eine zufäl­lige Posi­tion im Array bes­timmt und die sich dort befind­ende Zahl wird angezeigt.

So sieht es aus:

Das fol­gende Pro­gramm wurde ohne die Opti­mierung des Spe­icher­platzes erstellt:

Das Pro­gramm mit Opti­mierung:

  • es wurde ein Vari­ablentyp ver­wen­det, der weniger Spe­icher­platz ver­braucht (byte statt int)
  • alle kon­stan­ten Vari­ablen wur­den mit PROGMEM definiert
  • alle Serial.print/Serial.println-Anweisungen wer­den mit dem ⇒F‑Makro aus­ge­führt

Ein weit­eres, aus­führlicheres Beispiel:

Obwohl das Pro­gramm deut­lich umfan­gre­ich­er ist, wird nicht mehr Spe­ich­er ver­braucht.

Das Pro­gramm ohne Opti­mierung benötigt mehr als dop­pelt so viel Spe­ich­er:



Letzte Aktualisierung: Nov. 12, 2025 @ 19:15