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);

Kaynak: http://www.arduino.cc/en/Reference/PROGMEM

Hakan İyice

Bilgisayar mühendisi, web yazılım uzmanı, hobi elektroniği meraklısı

5 comments

  1. kaptan dedi ki:

    signMessage yerine mesajimiz yazılmalı sanırım kodları kaynak sayfadan kopyalarken dikkat etmemişsiniz.

  2. Mustafa Sivrikaya dedi ki:

    Hocam iyi günler
    Çok uzun boyutlu dizilerin kullanıldığı bir proje üzerinde çalışıyorum.
    Örneğin
    Byte ornek [255] {1,2,3,4,5,6,7………};
    Bunun gibi onlarca dizi var.
    Doğal olarak global değişkenler arduino hafizasına sığmıyor.
    Bu PROGMEM yöntemi ile bu dizileri Flash memory üzerinde nasıl saklayacagimi anladım ama nasıl okuyacağımi anlayamıyorum. Birkaç farklı örnek ile biraz daha aciklamaniz mümkün mü acaba

  3. Burak gül dedi ki:

    Hocam merhaba ben bir projemde arduinodaki veriyi MYSQL e kaydedip mysql dende kaydedildiğini geri döndüren ve yeşil Led yakan bir proje ile uğraşıyorum fakat ya veri gönderebiliyorum yada alabiliyorum ikisini aynı anda yapamadım bi yardımcı olur musunuz rica etsem

E-posta adresiniz gösterilmeyecek. Gerekli alanlar * ile işaretlidir.

*



Sosyal AÄŸlar