![]() |
|||||||
|
16F628A nın tüm ram ini kullanmak istersek… / 12 Ağustos 2008
Ağır ağır da olsa yapmaya çalıştığım data logger çalışması için 628A yı kullanmak istedim, çünkü 628A kolay bulunabilen ve ucuz bir işlemci. Bu çalışmada her şeyden önce verileri kayıt edeceğim “ram” e iyi bir şekilde hakim olmam gerekiyordu, ilk başta kararsız kaldım asm mi, C mi, C olursa CCS C mi yoksa diğerleri mi diye. Normalde CCS C kullanıyorum ama HI-TECH C yi de biraz kurcaladım, ancak işimi kolaylaştıracak “help” ve örnek dosyalara kolayca ulaşamadığım için hi-tech C den vazgeçtim, belki de ben kolayca bulamadım. Sonra Microchip in C18 “compiler” ını indirdim, sanırım bu “compiler” sayesinde linker üzerinde düzenleme yapılarak “ram” i bir bütün gibi kullanabilme şansımız olabiliyor ancak 628A nın yukarıda saydığım 2 özelliğinden 628 den vazgeçmek istemedim. Uygulamanın diğer kısımlarını asm ile yazmak çok uzun süreceği için yine CCS C de karar kıldım. Ben pic in bank yapısından şikayet ettikçe sevgili hocam bırak pic i artık(!), diğer mikroları kullan diye baskı yaptı. Bu baskılar altında CCS C nin helpini karıştırdım, “ram”i nasıl verimli kullanabilirim, bank geçişlerini nasıl yaparım sorularına cevap aradım. Öncesinde bu işlemleri “pointer”, döngü vs kullanarak kendim yapmaya karar vermiştim, ancak bank2 ye bir türlü geçemedim, sanırım kullandığım pointer in yazıldığı bankla pointerin ulaşmak istediği bank arasında bir karışıklık oluyor, her ne kadar C kodları içine asm yazsam da bu banktaki pointeri kullanacaksan başka banka yazamazsın gibi bir durumla karşılaştım, ya da ben öyle anladım. Üstelik kendim yazsaydım her ne kadar “ram”in tüm bölümlerine ulaşsam da compiler ın benim yazdığım datanın üzerine yazıp yazmayacağından emin olamazdım, bu riski en son CCS C nin ürettiği asm kodu adım adım okuyarak test etmeyi düşünmüştüm, zor ama başka çare yok gibiydi. “Help” te gözüme ilişen “memory allocation” fonksiyonlarını kullanmak istedim, ram de tahmini boş alan kadar -yaklaşık 200 byte- iptr=malloc(10); yazıp derledim, hiç hata vermedi. Dedim acaba bu malloc iş görür mü, ancak sonrasında deneme amaçlı yaptığım malloc(300), malloc(400) gibi ifadeler de hata vermedi, bu fonksiyon nerde ayırdığını sanıyor bu kadar yeri dedim ve kullanmaktan vazgeçtim.
ifadesiyle “reserve” ettiğim ve rahat rahat kullanabileceğim 72 byte lık bir alanım oldu. Diğer bankları da aşağıdaki bildirimlerle tamamını “reserve” edebildim, “compiler” herhangi bir hak iddia etmedi:)
Böylece toplamda 72+80+48=200 byte “ram” alanı açmış oldum. Kalan 24 byte compiler a kaldı, helali hoş olsun:)
Yorum Yapın |
|||||||
| |||||||