Arduino – FLASH / SRAM / EEPROM geheugen

arduino logo
EEPROM icon

Deze pagina omvat een aantal geheugentips voor het gebruik van een arduino.

De Arduino kent 3 soorten geheugen:
1) FLASH, in dit geheugen wordt je sketch opgeslagen.
2) SRAM, hierin staan de variabelen en manipulatie van de sketch, dit geheugen gaat verloren wanneer de arduino uitgeschakeld wordt.
3) EEPROM, dit is “vast” geheugen voor opslag van gegevens die voor lange tijd bewaard moet blijven.

Waarom is dit belangrijk om te weten?
Wanneer je een programma (sketch) maakt met de Arduino IDE, kun je beter het geheugen beheren, door er handig mee om te gaan.

Als je bijvoorbeeld een string gebruikt, zoals “Hallo Wereld” dan wordt het opgeslagen in het SRAM geheugen, als je veel van deze variabelen of strings hebt, dan heb je al snel een geheugentekort!

Geheugenoverzicht Arduino’s:

ATMega168 ATMega328P ATmega1280 ATmega2560
Flash 
(1 Kbyte used 
for bootloader)
16 KBytes 32 KBytes 128 KBytes 256 KBytes
SRAM 1024 bytes 2048 bytes 8 KBytes 8 KBytes
EEPROM 512 bytes 1024 bytes 4 KBytes 4 KBytes

Welk geheugen moet ik gebruiken voor opslag?
Dat hangt geheel af van het gebruik van de arduino en applicatie, het geheugen is een bepaald aantal keer te (her)schrijven:

EEPROM kan tot 100.000 wis/schrijf handelingen ondervinden voordat het vergaat (end of life), en FLASH 10.000 wis/schrijf handelingen.

  • Snel veranderende variabelen kunnen het beste in SRAM wordne opgeslagen.
  • Statische strings kunnen het beste worden opgeslagen het FLASH geheugen.

Hoe gebruik ik het?
Hieronder vind je een aantal voorbeelden om verschillende geheugen te gebruiken op de arduino, de arduino IDE ondersteunt nu ook F(), welke helpt om een string in het FLASH geheugen te zetten.


FLASH geheugen

Voorbeeld om een string in het flash geheugen op te slaan.


EEPROM geheugen

Hieronder volgt een voorbeeld om het getal 123 in het EEPROM geheugen weg te schrijven, dit blijft in het geheugen staan, zelfs nadat de arduino is uitgeschakeld.

Een ander voorbeeld is om een analoge “sensor” waarde als een logboekje weg te schrijven over een uur, 3600 / 512 byte = ca. 7 seconden.


SRAM geheugen

Voor het gebruik van SRAM is geen speciale code nodig die je moet gebruiken bij het programmeren, dit geheugen wordt automatisch aangesproken met variabelen uit je sketch.

Je kan kijken hoeveel geheugen er nog vrij is op de arduino met onderstaande code, deze code is puur voor controle doeleinden, je moet het niet gebruiken in een officiële sketch.


Tips voor zuiniger geheugengebruik

1) F() alle strings, dit zal SRAM schelen.
2) Verwijder alle onnodig variabelen, functies, en #includes.
3) Gebruik de correcte array grootte!, als je bijvoorbeeld a[55] reserveert, en je gebruikt maar a[5], dan blijft altijd onnodig geheugen gereserveerd.
4) Gebruik zo veel mogelijk functies, alle parameters en variableen die naar een functie wijzen, worden automatisch geleegd.
5) Gebruik de juiste datatypen zoals int, Double, Float, voor je variabelen.