Verileri SRAM yerine flash (program) hafızasında saklayabileceğinizi biliyor muydunuz. PROGMEM anahtar sözcüğü değişken bir değiştiricidir, yalnızca pgmspace.h dosyasında tanımlanan veri türleri ile kullanılmalıdır. Derleyiciye normalde gideceği SRAM yerine “bu bilgiyi flash belleğe koy” der.

PROGMEM, pgmspace.h kütüphanesinin bir parçasıdır. IDE’nin modern sürümlerine otomatik olarak dahil edilir, ancak 1.0 (2011) ‘in altındaki bir IDE sürümünü kullanıyorsanız, ilk önce aşağıdaki gibi kütüphaneyi sketchinize eklemeniz gerekir:

#include <avr/pgmspace.h>

const dataType değişkeniAdı [] PROGMEM = {veri0, veri1, veri3…};

dataType – herhangi bir değişken tipi
variableName – veri dizinizin adı

PROGMEM değişken bir değiştirici olduğundan, nereye gitmesi gerektiğine dair kesin ve hızlı bir kural olmadığından, Arduino derleyicisi aşağıdaki tanımları da kabul eder; Bununla birlikte deneyler, Arduino’nun çeşitli versiyonlarında (GCC versiyonuyla yapmak zorunda) PROGMEM’in başka yerlerde değil bir yerde çalışabileceğini göstermiştir. Aşağıdaki “string table” örneği, Arduino 13 ile çalışmak üzere test edilmiştir. Değişken adından sonra PROGMEM dahil edilmişse, IDE’nin önceki sürümleri daha iyi çalışabilir.

const dataType değişkeniAdı [] PROGMEM = {}; // bu formu kullan
const PROGMEM dataType değişkeniAdı [] = {}; // ya da bu
const dataType PROGMEM değişkeniAdı [] = {}; // bu değil

PROGMEM, tek bir değişkende kullanılabilse de, saklanması gereken, genellikle bir dizide en kolay olan (veya şu anki tartışmamızın ötesindeki bir başka C veri yapısına sahip olan) daha büyük bir veri bloğunuz varsa, yaygaraya değer. .

PROGMEM kullanmak da iki aşamalı bir prosedürdür. Verileri Flash belleğe aldıktan sonra, pgmspace.h kütüphanesinde de tanımlanmış, program belleğindeki verileri tekrar SRAM’a okumak için özel yöntemler (işlevler) gerekir, bu nedenle onunla yararlı bir şeyler yapabiliriz.

Örnek

Aşağıdaki kod, işaretsiz karakterleri (bayt) ve girişleri (2 bayt) PROGMEM’e nasıl okuyacağınızı ve yazacağınızı göstermektedir.

// işaretsiz tamsayıları kaydet
const PROGMEM  uint16_t charSet[]  = { 65000, 32796, 16843, 10, 11234};

// karakterleri kaydet
const char signMessage[] PROGMEM  = {"www.kaizen40.com - Dünyanı İyileştir"};

unsigned int displayInt;
int k;    // sayıcı
char myChar;


void setup() {
  Serial.begin(9600);
  while (!Serial);      // serial açılana kadar bekle

  // 2 byte veriyi oku
  for (k = 0; k < 5; k++)
  {
    displayInt = pgm_read_word_near(charSet + k);
    Serial.println(displayInt);
  }
  Serial.println();

  // tek karakter oku
  for (k = 0; k < strlen_P(signMessage); k++)
  {
    myChar =  pgm_read_byte_near(signMessage + k);
    Serial.print(myChar);
  }

  Serial.println();
}

void loop() {
  // ana program

}

Arduino PROGMEM nasıl kullanıldığını öğrendik. İyi çalışmalar,


0 yorum

Bir yanıt yazın

Avatar placeholder

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Bu site, istenmeyenleri azaltmak için Akismet kullanıyor. Yorum verilerinizin nasıl işlendiği hakkında daha fazla bilgi edinin.