Teensy mimo swoich rozmiarów ma dużo pamięci jak na kontroler.
Pamięci RAM jest 64 KB. Trafiają do niej wszystkie zmienne programu i bibliotek.
Zmienna typu byte:
byte zmienna = 1;
Zajmuje 1 bajt. Takich zmiennych zmieści się w Teensy ponad 64 tysiące.
Zmienna typu int:
int zmienna = 1000;
Zajmuje 4 bajty, więc takich zmieścisz 16 tysięcy.
Wielokrotnością zmiennej są tablice, które pozwalają trzymać wiele danych pod jedną nazwą.
int tablica[4] = {2, 4, 6, 8};
Pod nazwą “tablica” znajdują się 4 liczby. Ponieważ tablica jest typu int, liczby zajmują w niej 4 (rozmiar int) * 4 (elementy tablicy) = 16 bajtów.
Pamięci Flash jest 256 KB. Czyli 4 razy więcej niż RAM. Znajduje się w niej głównie kod programu. Ta pamięć z punktu widzenia programu jest tylko do odczytu. Zapisuje się ja podczas wrzucania programu z komputera na Teensy.
W każdym programie są pewne zmienne, których dane nie będą zmieniane przez program. Są to np zmienne z numerami pinów, z napisami, obrazki lub wygląd czcionek dla wyświetlacza graficznego.
int ledPin = 13;char napis[] = “Ala ma kota”;
byte font[8] = {0x00, 0x01, 0x3, 0x7, 0xf, 0x1f, 0x3f, 0x7f, 0xff};
Można łatwo sprawić, by te zmienne nie zajmowały pamięci RAM i znajdowały się tylko we Flash. Trzeba zrobić z nich stałe (tylko do odczytu). Robi się to bardzo prosto za pomocą etykiety “const”.
const int ledPin = 13;
const char napis[] = “Ala ma kota”;
const byte font[8] = {0x00, 0x01, 0x3, 0x7, 0xf, 0x1f, 0x3f, 0x7f, 0xff};
Tym prostym ruchem stałe, które program będzie odczytywał, będą trzymane w pamięci programu Flash i można ich używać jak dawnej.
Czemu się tym tak ekscytuje? Ponieważ w Arduino było mało pamięci RAM (2 kB). Żeby deklarować w jego programie stałe z pamięci Flash, trzeba było używać specjalnej etykiety PROGMEM. Aby odczytać stałe z takiej pamięci trzeba było używać specjalnych funkcji pgm_read_byte, pgm_read_world. W Teensy i na kontrolerach ARM jest prościej :-).
Dla kompatybilności Teensy 3.1 też potrafi obsługiwać bibliotekę “avr/pgmspace.h”. Więc nie trzeba przerabiać bibliotek dla Arduino korzystających z tego.
sprae