Gömülü sistemler ve hafıza kısıtı

Kategori: Arduino, Genel Programlama
Tarih: 12th Şubat 2018

Merhaba uzun süredir bir sürü konuda yazmak istememe rağmen yoğunluktan bir fırsat bulup da yazamadım. Gerçi “youtuber” lık bu kadar popülerken bu yazıyı okuyan olacak mı? O da muamma. Ama ben sanırım bir süre daha buradan sosyal ve teknik konularda yazmaya devam edeceğim. Hatta sonraki senelerde ilgili bir stajer arkadaş gelir ise onlarca projeyi/çözümü yazıya döktürmek gibi bir planım var.

 

Neyse; her eve bilgisayar her eve internet falan derken olay döndü dolaştı her şeye internete kadar geldi. Özetle IOT demek bu demek. Kombilerin, kumandaların, termometrelerin bile interneti var. Bizim herşeyden anında haberdar olma isteğimizle birlikte bu gömülü sistemler olayı da yürüdü gitti. Önceleri akıllı cihazlar geliştirmek bu kadar kolay değildi. Hatta cihazı internete bağlamak hayal bile değildi; yoktu! Sizin internete bağlı bir şeyiniz var ise bunun adı bilgisayardı. Bir şeyi internete bağlama fikri kimsenin aklına gelmemişti. Belkide ihtiyaç da değildi. Sonra teknolojinin x küp eğrisi şeklinde gelişiyor olması kısa zamanda mikroişlemcileri hızlandırdı, iletişim standartlarını geliştirdi, Çin ‘in de sahaya inmesi ile donanım ucuzladı ve biz nihayet lehim makinesinden bile internete bağlanabiliyor hale geldik.  İşin trajikomik tarafı, bu son verilen örnek tamamen gerçektir.

 

Artık neredeyse sadece yazılım bilerek bile birşeyler tasarlayabiliyorsunuz. 16F877 de ki iskele vs. … mantığını kavramak zorunda olduğunuz yapılar, günlerin ayların sınıflarına karıştı gitti. Her şeyin kartı çıktı. Çarli ‘nin melekleri! Yani I2C, SPI ve Seri iletişim ne demek öğrenin kullanamayacağınız teknoloji neredeyse kalmadı. Üzerinde işletim sistemi bile çalıştırabileceğiniz kartlar çıktı.

 

Sonuç olarak sıkıntılı kısma gelirsek. Daha doğrusu benim bu yazıda deyinmek istediğim sıkıntıya: hala bazı kartlarda hafıza kısıtınız var. Özellikle arduino nano, mikro gibi çok çok küçük boyutlu kartlarda. (Yazar aslında burada bu kartın kullanmış olduğu işlemcinin hafızasından bahsetmektedir.)

 

Özet geçmek gerekir ise arduino, temel olarak 2 program hafızasına sahiptir. Birincisi ve büyük olan, program kodlarının yüklendiği kısım. Yazdığınız kodlar makine koduna dönüştürülür ve buraya yüklenir. Programın çalışması demek de bu kodların satır satır, işlemcinin ALU devresine gönderilmesi/sonucun yorumlanması demektir. İkinci hafıza ise Arduino IDE ‘nin de -derleme bilgi ekranında- bahsettiği -kabaca- global değişkenlerin tutulduğu hafızadır. Bu çok daha küçüktür. ATmega328P işlemcisi için -ki arduino nano bunu kullanır- bu hafızalar 32KB ve 2KB dır. Yine bu işlemci üzerinden konuşmaya devam edersek; aynı anda Ethernet kartı ve Sd kart kullanarak bir geliştirme yapmak istiyorsanız muhtemelen size bu 2KB SRAM yetmeyecektir.

 

İşte tam da bu noktada, yani “acaba mega ile mi geliştirmeye devam etsem, o da çok büyük be bilader” dediğiniz; umutsuzluğun kapısında. Yürümekten çok, geri dönmenin sıcak geldiği bu anda; bu yazının hedef kitlesi olmuş durumdasınız. Bence aşağıdaki kodu inceleyin. Dizileri ve değişkenleri SRAM den kullanmadan tanımlayabilirsiniz. Umarım işinize yarar.

 

const char me0[] PROGMEM = "me0";
const char me1[] PROGMEM = "me1";
const char* const mDizi[] PROGMEM = {me0, me1};

const char me[] PROGMEM = "me";

const PROGMEM uint16_t sDizi[] = {1, 2};

const PROGMEM uint16_t se = 3;

char bufferStr[30];
int bufferInt;

void bufferStrDoldur(int a)
{
    strcpy_P(bufferStr, (char*)pgm_read_word(a));
}

void bufferIntDoldur(int a)
{
    bufferInt = pgm_read_word_near(a);
}

void setup()
{
    Serial.begin(9600);
    Serial.println(F("Basliyor..."));

    bufferStrDoldur(&mDizi[1]);
    Serial.println(bufferStr);

    strcpy_P(bufferStr, me);
    Serial.println(bufferStr);

    bufferIntDoldur(&sDizi[1]);
    Serial.println(bufferInt);

    bufferIntDoldur(&se);
    Serial.println(bufferInt);
}

void loop() { }

 

Not: bu yazıda paylaşılan kodlar ve çözümleme taa m.ö. yapılmış ancak bir türlü oturulup da bir yazı haline getirilememiştir. Bir başka deyişle; bugün IOT konusunda burun farkıyla önde görülen NetCAD, daha Netigma 2.0 ‘ı baştan mı yazsak yoksa 1. versiyonun üzerine mi geliştirsek diye tartışırken; biz IOT argeleri yapıyor, bu kodu projelerimizde kullanıyorduk. Saygılarımla…

Optimization WordPress Plugins & Solutions by W3 EDGE