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