PROGMEM
Datayı SRAM yerine Flash’ta depolamaya yarar.
Sadece pgmspace.h’ta tanımlanan değişken tiplerinde işe yarar. Kendisi de pgmspace.h’ta tanımlandığından yazdığınız programda kullanmak için pgmspace.h’ı da programa eklemelisiniz.
#include <avr/pgmspace.h>
Kullanımı:
değişken_tipi değişken_adı[] PROGMEM = {değişken1, değişken2, değişken3, …}
PROGMEM bir değişken değiştirici (variable modifier) olduğundan değişken tanımlanırken hangi sırada kullanıldığının önemi yoktur. Şu şekillerde de kullanılabilir:
değişken_tipi değişken_adı[] PROGMEM = {}
değişken_tipi PROGMEM değişken_adı[] = {}
PROGMEM değişken_tipi değişken_adı[] = {}
PROGMEM kullanımı iki aşamalı bir işlemdir, datayı Flash’a yazmak için olduğu gibi okumak için de özel yöntemler vardır.
PROGMEM için kullanabileceğiniz değişken tipleri şunlardır:
prog_char signed char tipindedir, 1 byte alan kaplar (-127, 127 arası)
prog_uchar unsigned char tipindedir, 1 byte alan kaplar (0’dan 255’e kadar)
prog_int16_t signed int tipindedir, 2 byte alan kaplar (-32.767, 32768 arası)
prog_uint16_t unsigned int tipindedir, 2 byte alan kaplar (0’dan 65.535’e kadar)
prog_int32_t signed long tipindedir, 4 byte alan kaplar (-2.147.483.648 – 2.147.483.647 arası)
prog_uint32_t unsigned long tipindedir, 4 byte alan kaplar (0’dan 4.294.967.295’e kadar)
Örnek
#include <avr/pgmspace.h>
// flash’a metin kaydetme
prog_uchar mesajimiz[] PROGMEM = {“MERHABA ARDUINO. NABER?”};
int k;
char myChar;
// flash’tan metni okuma
myChar = pgm_read_byte_near(signMessage + k);