Arduino Memory

Fra HTX Arduino
Spring til navigation Spring til søgning

Den klassiske Arduino (som Arduino UNO) har en ret begrænset hukommelse, så når man begynder at skrive lidt større programmer til den, så kan det være en rigtig god ide at have styr på hvordan hukommelsen er organiseret i en Arduino, og hvordan man sparer på hukommelsen.

Adafruit har en godt skrevet artikelserie[1], som beskriver teknikken ret godt.

Der er hukommelse som programmet kan læse og skrive i under program-afviklingen - betegnet SRAM, eller bare RAM. Denne hukommelse nulstilles når man slukker for arduinoen

Der er den hukommelse hvor programmet gemmes i, som betegnes Flash-Memory. Det er den del man skriver ned i når man uploader et nyt program.

Endelig er der hukommelse af typen EEPROM, som programmet kan skrive i (det er noget langsommere end RAM), men det har den fordel, at værdierne gemmes efter arduinoen har været slukket.

Problemer med hukommelsen

Man kan selvfølgelig komme i problemer med at man har skrevet for meget kode, så det ikke kan være i Flash-Memoryen. Det vil compileren advare om.

EEPROM skal man typisk selv have styr på hvor og hvor meget man bruger - det klassiske der kan gå galt her, er hvis man laver overlap eller genbruger det samme hukommelse til flere ting.

Der hvor det rigtigt kan skabe problemer er ved SRAM, fordi der er 3 anvendelser af RAM'en, som kan komme i konflikt, og det kan ske under programafviklingen, uden at man får en reel advarsel.

De 3 anvendelser er

  • statiske variabler - det har compileren styr på, og er dermed det eneste der kan advares om ved compile time.
  • dynamiske variabler, så som String variabler (kan variere i størrelse). Det allokeres i Heap, som er et dynamisk område
  • stack som er der hvor parametre og returadresser placeres, når der kaldes en funktion, så jo dybere man kalder, des mere hukommelse bruges

Det efterfølgende kommenterer nogle af de problemer der kan opstå.

Måling af hukommelsen

Da programmer bruger hukommelsen på forskellig vis, så kan det være smart at kunne "måle" hvor meget hukommelse der er fri. Til dette angiver adafruit en rutine de har lånt[2]

Når problemet opstår

Problemet opstår på et tidspunkt, og det er typisk der hvor man er ved at tilføje de sidste dele til et projekt, eller sætte forskellige kodedele sammen.

Det djævelske ved det er, at det ikke kommer med en klar fejl, når det er Arduino. På en PC, så vil styresystemet opdage fejlen, og gode compilere vil komme med en tydelig advarsel, der indikerer hvad problemet er. Arduinoen kan i værste fald bare begynde at opføre sig "sært", fx ved at den resetter spontant en gang imellem.

Løsningen er at optimere sin brug af hukommelsen - det er ikke altid simpelt, men det kan være nødvendigt. Læs artiklerne fra adafruit, de siger meget om teknikken.

De typiske mistænkte

Render man i problemer, så er der nogle ting, som specielt kan give problemer:

SD-kort sluger rigtigt meget hukommelse i en Arduino - typisk mere end halvdelen i en UNO, bare ved simple filhåndteringer.

Nogle typer displays bruger også meget hukomelse (specielt farvedisplays).

String() typen kan spise ret meget hukommelse, da den allokeres dynamisk.

Referencer

  1. Arduino hukommelse gennemgået af Adafruit.com
  2. Rutine til måling af fri hukommelse under afsnittet SRAM
Kom i gang med Arduino
Grundlæggende forståelse for Arduino Arduino Hardware - Arduino Prototype Print - Blink Eksempel - Overblik - Serial Monitor - Simple Komponenter - Software og Udviklingsmiljø
Programmering af Arduino Anvendelse af Eksempler - Klasser og Objekter - Programafvikling i Arduino - Test af Programmer
Dokumentationsformer Dokumentation med Kode og Flowchart - Dokumentation med State-machines - Flowchart - Pseudokode - Program-kommentarer - Systemdokumentation - Syntaksfarvning - Blokdiagram - Pulsplaner - UML
Opkoblinger til Arduino Moduler og Biblioteker - Driver - Opkobling af Hardware - Simple Komponenter - Tips til anvendelse af ben på Arduino UNO
Kompliceret Programmering Arduino kombineret med Processing - Kommunikation fra Arduino til Processing - Kommunikation fra Processing til Arduino - CopyThread Multitasking - Dokumentation med State-machines - Tid og Samtidighed i Software - Arduino Memory
Kompliceret Hardware I2C - Andre Processorboards - Internet of Things (IoT)
Oprindelige Dokumenter PDF-Version - Forfattere
Software Udviklingsteknikker Agile metoder - Brugertest - SCRUM

Fasemodellen - Kravspecifikation - Databasedesign - Struktur eller Arkitektur - Softwaretest

Projekter Afstand programforslag - Lysmåling - Projektforslag - Prototyper
Undervisningsforløb 4t Valgfag til Folkeskolen - Læsevejledning 4t Valgfag - Materialer til 4t Valgfag - Undervisningsnoter 4t Valgfag - Undervisningsplan 4t Valgfag - Slides til Undervisning

Kort Valgfag til Folkeskolen - Læsevejledning Kort Valgfag - Materialer til Kort Valgfag - Undervisningsnoter Kort Valgfag - Undervisningsplan Kort Valgfag