Teensy 3.1 jak trzymać dane w pamięci Flash.

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

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.