2.2. derste neler yaptık ?

 

Önceki hafta mplabx de ki ilk, tek dosyadan(main.c) oluşan projemizi derleyip, programımızın argeino geliştirme kartımızda çalıştığını görebildik.

Bu derste başlangıç olarak önemli bir nokta olan, aynı zamanda çoğu derleyiciler de ve program geliştirme arayüzlerin de karşılaşabileceğimiz bir konu olan kütüphane oluşturma ve kütüphaneleri projemize dahil etme konusundan bahsettik. Çünkü ilerleyen derslerimizde projelerimiz karmaşıklaştıkça her fonksiyonu, fonksiyon tanımlamalarını, global değişken tanımlamalarını tek bir dosyada tutmak proje geliştiren kişiler yani bizler için çok sıkıntılı bir durum oluşturmaya başlayacağından bahsettim. Benzer amaçlara hizmet eden fonksiyonları aynı c dosyalarında tutup daha sonra bu dosyaları projemize dahil ederek kullanabilmeyi gördük.

Bu iş için #include deyimini irdelemeye çalıştık. #include<…> ve #include “…” olmak üzere iki farklı şekilde bu deyimi kullanabildiğimizi gördük. Geçtiğimiz hafta yazdığımız kodda da zaten #include<xc.h> satırı bulunuyordu. Bu kullanım şekli için; derleyicimizin kurulu olduğu klasör içerisinde ki xc.h dosyasını projemize dahil ettiğimizden bahsetmiş olduk. Yani <…> şeklini kullandığımızda derleyici klasörü içerisindeki halihazırda bulunan kütüphane dosyaları arasında bir dosya araması yapıldığından bahsetmiş olduk.

Main.c dosyamızın yanına(aynı klasör içerisine) kendimiz, .h ve .c uzantılarında iki dosya ekledik. Literatürde aynı isimde bulunan(ornek.h ve ornek.c gibi) bu ikili dosya bir kütüphaneyi ifade etmekte. Daha sonra main.c dosyamızın içerisinde #include “ornek.h” satırını eklediğimizde hem ornek.h hemde ornek.c dosyalarını projemize dahil etmiş oluyoruz.

Bilindiği üzere c syntax gereği fonksiyonlar kullanılmadan(çağırılmadan) evvel tanımlanması gerekiyor. Bu aşama yapılmadığında derleyici büyük ihtimalle hata vermektedir. Header dosyasında fonksiyonlarımızın tanımlama satırlarını, global değişken tanımlamalarını ve #define #if gibi ön işlem komutlu deyimlerimizi saklayabiliyoruz. Böylece sadece header dosyasını main içinde #include”… .h” şeklinde tanımlayarak hem .h hem de .c dosyalarını projemize dahil etmiş oluyoruz.

Örnek olarak ikili kütüphane dosyaları oluşturup header dosyasına “#define deneme 5” satırını ekledik. Daha sonra main fonksiyonu içerisinde bu kütüphaneyi #include işlemi ile dahil ettikten sonra bir değişkene örnek olarak a=deneme; veri yükleme satırını ekledik. Derleme işlemi sorunsuz yapıldı. Bu satırda a=5; yazmaktan bir farkı olmadığını tekrar vurguladım. Böylece kütüphane dosyalarını kullandığımızı görebilmiş olduk.

Önceki dönemlerde işlediğimiz derslerde kullandığımız yine kendi hazırladığım, zaman, lcd, user kütüphanelerini (.c ve .h dosyalarını) main.c dosyamızın bulunduğu klasöre kopyalayıp, main.c içerisine kütüphane tanımlamalarını (#include “zaman.h” gibi) yaparak dahil etmiş olduk. zaman kütüphanemin içerisinde ki zaman_sayac(); fonksiyonunu main içerisinde çağırarak kütüphanemizi dahil edebildiğimizi görmüş olduk.

mlt_temel

Örnek resimdeki 3 dosyanın aynı klasör içerisinde olduğunu düşündüğümüzde derleme işlemini sağlıklı bir şekilde gerçekleşeceğini görebiliyoruz. Bu resimde f1 fonksiyonunun ilk ve son halini karşılaştırmaktayız. Buna ihtiyaç duyma sebebimizi sonraki örneklerde açıkladığımı şimdiden belirteyim.

İlk halini düşündüğümüzde; fonksiyon 1 kez çağrılıyor ve tek seferde hem 1. hemde 2. işlem gerçekleştirilerek fonksiyondan çıkılıyor. Oysa biz sırası ile önce 1. işlem yapılsın ve tekrar ana döngüye dönülsün, sonra tekrar fonksiyona girildiğinde kaldığı yerden yani 2. işlemden devam etsin istediğimizde yazım şeklimizde değişikliğe gitmemiz gerekmekte.

İkinci halini düşündüğümüzde; fonksiyon ilk çağrıldığında yalnızca 1. işlem yürütülüp fonksiyondan çıkılıyor. Fonksiyon ikinci kez çağrıldığında kaldığı yere dallanarak işlemini sürdürüyor yani örnek üzerinde 2. işlem yürütülüp fonksiyondan çıkılıyor. Fonksiyon Üçüncü kez çağrıldığında 1. işlem yürütülerek fonksiyondan çıkılıyor ve bu şekilde döngü devam ediyor.

Tekrar belirttiğim bir diğer şey ise static deyimiydi. Bu deyim ile tanımladığımız değişkenler (static int mlt=0; gibi ) fonksiyondan çıkıldığında da eski halini korumaya devam ediyor. Yine bilindiği üzere fonksiyon içinde static olmadan tanımlanan değişkenler fonksiyondan çıkıldığında başka amaçlar için kullanılabildiğinden bahsettim. Bu sebeple başka işlemlerde kullanılarak içerisindeki bilgi değişmiş olur, bizde static deyimi ile bu durumun önüne geçmiş oluruz. Bu static deyimi ile global bir değişken tanımlamış gibi oluyoruz ancak farklı olarak bu değişkene(adrese) verdiğimiz isim ile, sadece fonksiyon içerisinde erişebiliyoruz. Böylece her multitask fonksiyonu için tanımladığımız mlt isimlerindeki static değişkenler diğer fonksiyonlarda ki mlt değişkenleri ile karışmamakta.

Bir Cevap Yazın

Or

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir