Ile zostało pamięci?

W Arduino jest zwykle 2048 bajtów pamięci RAM. W niej przechowywane są zmienne programu. Czasem zdarza się, że zaczyna jej brakować i Arduino “świruje”.

Arduino IDE w wersji 1.5 pokazuje przy kompilacji zajętość pamięci RAM, ale tylko przez zmienne globalne. Jeśli używasz też pamięci dynamicznej – np. używając typu String, to rzeczywista zajętość może różnić się od tej przy kompilacji.

int freeRam ()
{
  extern int __heap_start, *__brkval; 
  int v; 
  return (int) &v - (__brkval == 0 ? (int) &__heap_start : (int) __brkval); 
}

Ta funkcja zwraca liczbę wolnych bajtów pamięci RAM w Arduino. Możesz jej użyć w kombinacji Serial.println(freeRam()); w celu podglądania ile aktualnie pamięci zajmuje program i czy niebezpiecznie nie zbliża się do jej końca.

Na koniec mały trik.
Najczęstszą przyczyną zajęcia pamięci jest używanie napisów typu Serial.print(“Ala ma kota”);. Każdy tekst do wyświetlenia jest przechowywany w pamięci RAM. Jeśli masz ich dużo to możesz zająć całą pamięć.

Można sobie z tym poradzić trzymając tekst w pamięci Flash, której jest dużo – przynajmniej 32 kB. Robi się to za pomocą definicji F().

Serial.print(F(“Ala ma kota”));

Funkcję ściągnąłem z: Arduino Playground – AvailableMemory
D
ziałanie elementów funkcji możesz zrozumieć dzięki:
Strona o tym jak działa przydzielanie pamięci w kontrolerze Arduino
Opis działania operatora warunkowego w C++

sprae

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.