08- XC8'de Değişkenler ve Veri Tipleri

08- XC8’de Değişkenler ve Veri Tipleri

Merhaba sevgili okuyucu.

PIC ile MPLABX ortamında XC8 dilinde nasıl değişken tanımlayabileceğimizi ve bunları nasıl kullanabileceğimizden bahsedeceğim bu yazıda.

Proje ne olursa olsun bazı verileri veya bilgileri RAM dediğimiz geçici bellekte tutmaya ihtiyacımız olur. Bu kimi zaten yakıp söndürdüğümüz LED in durumu, kimi zaman ise bir matematik işleminin sonucudur.  RAM üzerindeki bilgiler mikrodenetleyiciden güç kesilince silinir. Bizim mevcut olarak şu anki örneklerde kullandığımız 16F877A mikrodenetleyicisinde 368 byte RAM bellek bulunmaktadır. Evet bilgisayarlarla veya telefonlarla kıyaslandığında çok çok küçüktür fakat uygulamada PIC in yapabileceği işler söz konusu olduğunda doldurmanın zor olduğunu göreceğiz. 368 tane 0-255 arası değer olarak bakarsak yapabileceğimiz işlere kıyasla büyük olduğunu görebiliriz. Bu tabii ki aynı anda hafızada tutulacak veri miktarıdır. Elimizdeki 10 bytelık bir veriyi RAM e yazdığımızı düşünelim. Ve her saniye bu 10 byteın değerini değiştirelim. Bizim kullandığımız RAM değeri artmayacaktır. İleride bahsedeceğim “MPLABX’de Optimizasyon” konulu yazıda buna özellikle değinilecek ve en verimli kullanım senaryoları oluşturulacaktır.

Her proje derlemesinden sonra doluluk oranını görebilirsiniz MPLABX de.

ramDeğişkenler boyutlarına ve türlerine göre seçilir. Tür olarak tam sayı veya reel sayı olabilir. Boyut olarak ise 1 bitden 64 bite kadar gidebilir. Projedeki ihtiyaca göre bu seçimi yapmak lazımdır. Gereğinden küçük boyutta değişken seçimi yapılacak işlemleri kısıtlayacak ve istenen sonuca ulaşmayı imkansız hale getirecektir. Gereğinden büyük değişken kullanmak hem program hafızanızın hem de RAM hafızanızın olmasın gerekenden çabuk dolmasına neden olabilir. Ayrıca boyut büyüdükçe mikrodenetleyici her işlem için daha fazla süreye ve efora ihtiyaç duyacaktır. Bu da optimum bir tasarımdan uzak bir durumdur. Aşağıdaki tabloda XC8 de kullanılan tüm değişkenleri görebilirsiniz.

 

Tipi Boyutu (bit) En Düşük Değer En Yüksek Değer  Türü
bit 1 0 1  Tam Sayı – Integer
char, signed char 8 -128 127  Tam Sayı – Integer
unsigned char 8 0 255  Tam Sayı – Integer
signed short 16 -32768 32767  Tam Sayı – Integer
unsigned short 16 0 65535  Tam Sayı – Integer
int, signed int 16 -32768 32767  Tam Sayı – Integer
unsigned int 16 0 65535  Tam Sayı – Integer
signed short long 24 -8388608 8388607  Tam Sayı – Integer
unsigned short long 24 0 16777215  Tam Sayı – Integer
signed long 32 -2147483648 2147483647  Tam Sayı – Integer
unsigned long 32 0 4294967295  Tam Sayı – Integer
signed long long 64 -231 231-1  Tam Sayı – Integer
unsigned long long 64 0 264-1  Tam Sayı – Integer
float 32 ±~10-44.85 ±~1038.53  Reel Sayı
double 32 ±~10-44.85 ±~1038.53  Reel Sayı
long double 64 ±~10-323.3 ±~10308.3  Reel Sayı

Farkettiğiniz gibi bazı değişkenler farklı isimlerde de kullanılmış. Bunun kafa karıştırmaması için kendimize her boyutta değişkenler seçelim. Bu seçtiğimiz değişkenleri sürekli kullanarak kendi standartlarımızı elde etmiş oluruz. Olur da önümüze başka birinin yazıp alternatif isimdeki değişkenleri seçtiği bir kod gelirse bu tablodan yine yararlanabiliriz. Ama bizim oluşturacağımız tabloyu en azından birkaç uygulama sonra ezberlemiş olmak büyük avantaj sağlayacaktır kod yazma evresinde.

Aşağıda basitçe bir her boyutu kapsayan tabloyu görebiliyoruz.

Tipi Boyutu (bit)
bit 1
char 8
int 16
short long 24
long 32
long long 64
float, double 32
long double 64

Bit dediğimiz olay LED in yanık mı sönük mü olduğu durumu olarak düşünebiliriz. 0 veya 1 değeri alabilir sadece.

char dediğimiz değişken 8bitden oluşan bir değişkendir. Büyük ihtimal en çok kullanacağımız değişkendir. Toplam 256 değer alabilir. Bunu 28 ile de hesaplayabiliriz. Eğer unsigned (işaretsiz) ise 0 dan başlar ve 255 e kadar değerler alabilir. işaretli ise -128 ve +127 değerleri arasındadır.

int 16bit short long 24 bit long 32 bit ve long long 64 bit değerinde tam sayılardır. char değişkeninden long long arası tüm değişkenler arası tek fark boyutlarıdır.

Reel sayılar tarafında ise double 32bit ve long double 64bitdir. Reel sayılarda işaretsiz işaretli ayrımı yoktur.


Fark ettiyseniz char dediğimiz değişken karakter anlamına gelse de 8bitlik 256 farklı değer alabilen bir tam sayı veri tipi. Şu soru aklınıza gelebilir.

“Peki biz karakter veya string dediğimiz birçok karakterden oluşturduğumuz ifadeler için ne kullanacağız?”

Elektronik işlemede tabiki sayılar üzerinden işlemler yapılacak. Yani PIC 250 sayısını anlayabiliyorken “a” karakterini anlayamaz. Yani biz aslında karakterleri de sayılarla ifade ediyoruz. ASCII standardına göre belirlediğimiz 8bitlik sayılar bu karakterlere karşılık geliyor. Aslında biz “a” karakterini göndermek istediğimizde 97 tam sayısını göndermiş oluyoruz. Bu bir standart olduğu için bilgisayar da bunu biliyor ve bize öyle yansıtıyor. Bir karakteri oluşturmak için 8bitlik bir veri yeterli olacaktır. Yani bir char değişkeni bir karakter tanımlamak için yeterli olacaktır. Bir önceki yazıdaki birinci örneğin videosunu izlemeniz bunu anlamada yardımcı olacaktır. Videoda solda 16lı sisteme göre verinin sayısal karşılığı sağda da o veriye karşılık gelen karakter değeri görülebiliyor.

asciifullasciiextendKullanım Örnekleri

Örneklerden de görüleceği gibi değişkeni önce tanımlayıp değeri sonra da verebiliyoruz.

Dikkat edilmesi gereken önemli bir nokta tek karakterler için tek tırnak (‘) işareti, çoklu karakter yani string ifadeler için çift tırnak (“) kullanmak zorunludur. Aksi halde derleyici hata verecek veya programınız istediğiniz gibi çalışmayacaktır.

Değişkenler nerede tanımlı iseler o bölge ve altında çalışabilirler.

Örnek olarak verilen şu kodda “a” değişkeni mevcut tüm fonksiyonlardan dışarıda tanımlandığı için her taraftan erişilebilir.

Fakat “c” değişkeni sadece “ogren” isimli fonksiyondan erişilebilir.

“b” değişkenine ise “main” fonksiyonu içinde erişilir. “while” döngüsü dahil.

Bu değişkenler üzerinde matematiksel ifadeler ile işlemler yapabilirsiniz. Onu da kapsayacak olan değişkenler arası dönüşümü de anlattığım bir yazı olacak.

Şimdilik hoşçakalın.

Bir sonraki yazıda görüşmek üzere.