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
Dział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