Sunuyu indir
1
C Programlama Dili ve Gömülü Sistemler için MikroC
Sedat Elcivan
2
C Programlama Dili AT&T Bell laboratuvarlarında, Ken Thompson ve Dennis Ritchie tarafından UNIX İşletim Sistemi' ni geliştirebilmek amacıyla B dilinden türetilmiş yapısal bir programlama dilidir.
3
C Dilinin erken tarihi C'nin ilk gelişme safhaları 1969 ile 1974 arasında AT&T Bell Laboratuvarları'nda gerçekleşti. Ritchie'ye göre, en yaratıcı devre 1972 idi. Dilin pek çok özelliği "B" adlı bir dilden türediği için, yeni dile "C" adı verildi. "B" adının kökeni konusunda ise söylentiler değişik: Ken Thompson B'nin BCPL programlama dilinden türediğini söylemektedir, ancak Thompson eşi Bonnie'nin onuruna adını Bon koyduğu bir programlama dili de geliştirmiştir. 1973'e kadar C yeterince güçlü bir hale gelmiş ve ilk başta PDP-11/20 assembly dili ile yazılan UNIX'in çekirdeğinin büyük kısmı C ile yeniden yazılmıştı. Böylece; UNIX, çekirdeği bir assembly dili ile yazılmayan ilk işletim sistemlerinden biri olmuştu.
4
1978'de Ritchie ve Brian Kernighan The C Programming Language (C Programlama Dili) kitabının ilk baskısını yayımladılar. 1970'lerin sonunda C, en çok kullanılan mikrobilgisayar dili olarak BASIC'in önüne geçmeye başladı. 1980'lerde ise, IBM PC ile kullanılmak üzere benimsenmesiyle birlikte popülaritesi iyice artmaya başladı. 1983'te Amerikan Ulusal Standartlar Enstitüsü (ANSI) bir C standardı oluşturmak için bir kurul oluşturdu. Bugün artık ANSI C neredeyse tüm derleyiciler tarafından desteklenmektedir. Günümüzde yazılmakta olan C programlarının çoğunluğu ANSI C standardına uygun olarak yazılmaktadır. Yalnızca standart C kullanılarak yazılmış bir program, standarda uyumlu her derleyici ile doğru bir biçimde derlenip çalıştırılabilir. Ancak, standart olmayan kütüphaneler kullanılarak yazılmış programlar belli bir platform ya da derleyici gerektirebilirler...
5
C programlama dili modern akış kontrolü ve veri yapıları sunan, ifadelerin kullanımında kolaylıklar sağlayan ve zengin bir operatör kümesi sunan genel amaçlı bir programlama dilidir. C, “yüksek seviyeli” bir dil ya da büyük bir değildir ve herhangi özel bir uygulama alanı için özelleştirilmemiştir. Ancak kısıtlamalarının olmaması ve genel kullanıma uygunluğu, C dilinin birçok alanda güçlü kabul edilen dillere oranla daha verimli ve uygun hale gelmesini sağlamaktadır.
6
Kitaptaki kodun orijinal hali: #include <stdio.h> main() {
"Merhaba, dünya" örneği Merhaba, dünya örneği ilk olarak The C Programming Language kitabının birinci baskısında kullanıldı ve birçok programlama kitabında kullanılan tanıtıcı örnek haline geldi. Bu örnek ekrana ya da terminal ekranına "merhaba, dünya" yazar. Kitaptaki kodun orijinal hali: #include <stdio.h> main() { printf("merhaba, dünya\n"); }
7
Standart olarak onaylanan "merhaba, dünya" versiyonu:
#include <stdio.h> int main() { printf("merhaba, dünya"); return 0; } 1. satır: Bir önişlemci komutudur ve daha program derlenmeden önce devreye girerek istenilen değişiklikleri kaynak dosya üzerinde gerçekleştirir. Bu programda stdio.h (standart input-output) başlık dosyasını programa dahil eder. Bu başlık dosyasında standart giriş-çıkış fonksiyonlarının prototipleri mevcuttur. Burada programdaki komutun amacı printf fonskiyonunu programa dahil etmektir. 2. satır: Bu satırda programda işe main fonksiyonun tanımlanmasıyla başlanmıştır. main fonksiyonun C dilinde özel bir amacı vardır. Programın çalışma zamanında başladığı yer main fonksiyonudur. 3. satır: main fonksiyonunun başladığı yeri belirtir. 4. satır: Bu satırda "merhaba, dünya" yazısını (karakter dizisini) ekrana bastırmak için printf fonksiyonu çağrılır ki bu fonksiyonu 1. satırdaki stdio.h başlık dosyası ile programa dahil etmiştik. 5. satır: return deyimi main fonksiyonumuzu 0 geri dönüş değeriyle sonlandırır. 6. satır : main fonksiyonunun bittiği yeri belirtir.,
8
Mikro C dili MikroC mikrodenetleyici programlama dili; kullanım kolaylığı ve zengin kütüphanesi, hemen hemen her konu da örnek devre şeması ve program kodları ile diğer dillerden ayrılmaktadır. MikroC dili gömülü sistem (embedded system) programcılığı için C dilinden türetilmiş, C dilinin temel özelliklerini ve yazım kurallarını içeren bir dildir.
9
Ayrılmış (Reserved) Kelimeler
Aşağıdaki kelimeler kullanıcı tarafından kullanılamayan ayrılmış (reserved) kelimelerdir. Ör. struct kelimesini değişken veya sabit tanımlarken kullanamazsınız.
10
Açıklama (Comments) Satırları
Açıklama satırları derleyici (compiler) tarafından dikkate alınmaz ancak kullanıcının yazdığı kodun ya da kod parçasının ne amaçla yazıldığını hatırlaması için hız kazandırır. Başlangıçta önemsenmeyen ve ihmal edilen bu durum kodlar uzadıkça önem kazanır. Açıklama birden fazla satır sürecekse /* ile başlar */ ile biter. Tek satırlık açıklamalarda // işareti kullanılır.
12
Assembly Kodları Kullanma
Yazdığınız C kodları içerisinde assembly programlama diliyle yazdığınız kod parçalarını aşağıdaki gibi kullanabilirsiniz. asm { Assembly language instructions ... } Ör. 6 µs ’lik zaman dilimi içerisinde şekildeki değişimin elde edildiği asm kodu..
13
Tanımlayıcı Kelimeler (identifiers)
Tanıtıcılar; fonksiyonlara, değişkenlere, sembolik sabitlere, kullanıcı tarafından tanımlanmış veri tiplerine ve etiketlere verilen özel isimler olup herhangi bir uzunlukta olabilirler. İngiliz alfabesindeki bütün harfler büyük yada küçük harf olarak kullanılabilir. (Türkçe karakterler kullanılamaz) MikroC büyük küçük harf duyarlılığına sahiptir. Sayac, sayac, sayaC kelimelerinin üçü de birbirinden farklıdır. Sayac1 // Geçerli ilkdeger // Geçerli sicaklik_2 // Geçerli _mesaj // Geçerli %veri // Geçersiz ( ilk karakter işaret olamaz ) 1altdeger // Geçersiz ( ilk karakter sayı olamaz ) değişken // Geçersiz ( Türkçe karakter kullanılamaz ) while // Geçersiz ( Ayrılmış kelime kullanılamaz )
14
Tam Sayılar (integer constants)
Tam sayılar onluk (decimal), sekizlik (octal), onaltılık (hexadecimal), ya da ikilik (binary) formatlarında olabilir. Derleyici bu sayı sistemlerinin hepsini kullanabilir. Kullanımları aşağıdaki tabloda gösterilmiştir.
15
Ondalıklı Sayılar (Kayan Noktalı Sayılar - Floating point constants)
Ondalıklı sayılara, kayan noktalı sayılarda denir. Kayan noktalı sayılar, sayının tam kısmı, nokta ve noktadan sonra gelen ondalıklı kısmı diye ayrılır. Aşağıda bazı örnekler bulunmaktadır.
16
Karakter İfadeler Tek tırnak arasına yazılan tek bir ASCII karakterden oluşan ifadedir. ‘a’ , ‘G’ , ‘k’ , ‘x’ vb. gibi. Karakter Dizi İfadeler (String) Çift tırnaklar ile sınırlandırılmış herhangi bir sayıda karakterden oluşan karakter dizisidir. Ör. “Bu bir karakter dizisidir.” veya “Merhaba Dünya”
17
Boşluk (Kaçış) Karakterleri
Ters bölü (Backslash) karakteri (\), grafik olarak gösterilemeyen belli karakterlerin görsel gösterimlerine izin veren bir kaçış karakteridir. Örnek bazı kullanım şekilleri aşağıdaki tabloda gösterilmiştir. Ek olarak, aşağıda bazı karakter değişmezleri örnekleri vardır:
18
Ayırıcı İşaretler (Seperators)
[ ] –köşeli parantez ( ) – parantez { } – küme parantezi , - virgül ; - noktalı virgül : - iki nokta . - nokta * - yıldız işareti = - eşittir işareti # - diyez işareti
19
Dizilerin uzunluklarını ve indislerini belirtmek için kullanılır.
Köşeli Parantez ( [ ] ) Dizilerin uzunluklarını ve indislerini belirtmek için kullanılır. Ör. char str[6] = “mikroC”; // str dizisinin içine mikroC string ifadesi atılır. İnt mat[3][4]; // 3 x 4 matriks ch = str[3]; // dizinin 3. Elemanı Parantez ( ( ) ) Aritmetik işlemlerde gruplandırma için, karşılaştırma deyimlerinde, fonksiyon çağrılarında ve bildirimlerinde kullanılır.
20
Küme Parantezi ( { } ) Küme parantezi bir kod bloğunun başlangıcını ve sonucunu belirtir. Virgül ( , ) Virgül, fonksiyon parametrelerinin arasına, aynı türdeki değişkenleri tanımlarken bu değişkenlerin arasına yada dizi elemanlarının arasına koyulur.
21
Noktalı Virgül ( ; ) Noktalı virgül sonlandırma işlemi için kullanılır. C dilinde her komut satırının sonunda noktalı virgül vardır. İki Nokta ( : ) Etiket tanımlamalarında kullanılır. C dilinde etiketlerin kullanılması pek tavsiye edilen bir durum değildir.
22
Nokta ( . ) Nokta işareti, bir yapı alanına ulaşmak için yada kullandığınız mikrodenetleyicinin herhangi bir kaydedicisinin bir bit alanına ulaşmak içinde kullanılabilir. Yıldız İşareti ( * ) Yıldız işareti göstericileri (pointers) tanımlarken kullanılır. Göstericiler dolaylı adreslemede kullanılır.
23
Eşittir İşareti ( = ) Değişkenlere ya da sabitlere değer atamak için kullanılır. Ayrıca karşılaştırma ifadelerinde == kullanılır. Diyez İşareti ( # ) Önişlemci (preprocessor) komutları için kullanılır. Önişlemci komutları, yazdığınız kodun en üst kısmında yer almalıdır.
24
Depolama Sınıfları Bir değişken yada fonksiyonun C programı içindeki ömrünü belirler. MikroC’de depolama sınıfları auto, register, static ve extern belirleyici türleri vardır. Auto: Değişkenin lokal bir değişken olduğunu belirtir. Auto olarak tanımlanmış bir değişkene oluşturulduğu fonksiyon yada kod bloğunun içinde erişilebilir. Varsayılan olarak bütün değişkenler auto olarak kabul edilir. Register: RAM yerine bir kaydediciye depolanan bir lokal değişken tanımlamak için kullanılır. MikroC’ de register veri depolama yöntemi kullanılamaz. C dili için geçerli bir kuraldır.
25
Static: Static olarak tanımlanan bir değişken, programın çalışmaya başlamasıyla hafızaya yerleşir ve program sonlanana kadar hafızadan silinmez. Extern: Global değişkenler ve fonksiyonlar varsayılan olarak extern tanımlıdır. Global değişkenler fonksiyonların dışında tanımlanan değişkenlerdir. Bir değişkenin global olması programın çalıştığı andan itibaren bellekte tutulması anlamına gelir.
26
Tip Niteleyicileri Const ve volatile tip niteleyicileri bildirimlerde seçimliktirler ve gerçekte bildirimi yapılan nesnenin tipine etkileri olmaz. Const Niteleyicisi Const niteleyicisi, çalışma süresince değeri değişmeyecek nesne bildirimlerinde uygulanır. Ör. const double PI = ; Volatile Niteleyicisi Volatile niteleyicisi çalışma süresince değişkenin değerinin programdan bağımsız olarak değişebileceğini belirtir.
27
Başlangıç Değeri Atama İşlemi
C dilinde oluşturduğunuz değişkenlere programınızın başında başlangıç değeri atayabilirsiniz. int i = 1; char *s = “merhaba”;
28
MikroC’de Veri Türleri
Aritmetik Türler Tam Sayı Değişkenler: Ondalıklı Sayı Değişkenler:
29
Void Türü Void herhangi bir değerin olmadığını söyleyen özel bir ifadedir. Fonksiyon tanımlamalarında çokça bu ifadeyi görürüz. Ör. Göstericiler Bir değişkenin, dizinin veya başka bir verinin hafızadaki adresini gösterir. Göstericilerin tanımlanmasında * işareti kullanılır. Ör. unsigned int *p; // işaretsiz tamsayı olarak göstericimizi tanımladık. *p = 5; // göstericinin tutacağı adres alanının içine 5 sayısı yüklendi.
30
Yapılar Aynı yada farklı türdeki değişkenleri bir araya getirip kendi türümüzü oluşturabiliriz. Büyük programlarda birbirleriyle bağlantılı değişkenlerin bir araya getirilerek tek bir değişken gibi kullanılmasına olanak sağlar. Ör. struct OgrenciYapi { // OgrenciYapi adında bir yapı tanımlamış olduk. char isim[25]; char soyisim[25]; int yas; int numara; }; Struct OgrenciYapi ogrenci; // ogrenci OgrenciYapi içindeki değişkenlere erişebilir. Yapı içindeki elemanlara doğrudan yada dolaylı erişim metotları kullanılabilir. Nokta operatörü yapı içindeki elemana doğrudan erişim için kullanılır, -> operatörü ise gösterici olarak belirlenen bir yapıya erişim için kullanılır. Ör. ogrenci.isim // Yapı içindeki isim değişkenine erişir. Pa->m // Yapı içindeki m değişkenine erişim // (*pa).m ile aynı işi yapar.
31
Diziler C dilinde sıkça kullanılır. Diziler sayesinde aynı türdeki birden fazla veriyi bir değişken dizisinin içine depolayabiliriz. Format: int dizi_adı[indeks] = {//dizi elemanları aralarına virgül konularak yazılır.} Yukarıdaki formatta int dizinin türünü belirtmektedir. Yani dizi içindeki elemanların tümü int (tamsayı) olmalıdır. Sonra dizinin adı yazılmalı ve köşeli parantez içerisinde dizide kaç eleman olduğu yazılmalıdır. Küme işareti içerisine dizinin elemanlarını aralarına virgül koyarak yazabiliriz. Ör. int günler[12] = {31,28,31,30,31,30,31,31,30,31,30,31}; // Bir yıldaki ayların günleri. Ör. #define MAX = 50; // 50 sayısının yerine MAX yazılabilir. int vector_one[10]; // 10 tane tamsayıdan oluşan bir dizi tanımladık. float vector_two[MAX]; // 50 float türündeki değişkenden oluşan bir dizi tanımladık. float vector_three[MAX-20]; // 30 float türündeki değişkenden oluşan dizi tanımlan.
32
Tek boyutlu dizilerin yanında çok boyutlu dizilerde oluşturulabilir.
Ör. char m[50][20]; // 2 boyutlu 50x20 boyutunda karakter ve değişkenleri tutan dizi. int a[3][2] = {{1,2},{2,6},{3,7}}; // 2 boyutlu bir dizi tanımlandı. Dizilerin ilk elemanının indeks değeri her zaman için “0” dır. Bu nedenle; int sayi[5] = {0,30,45,60,90}; Program içerisinde dizinin ilk elemanına erişmek için sayi[0] yazılır ve 0 değerine ulaşılır. Son elemana erişmek için sayi[4] yazılır ve 90 değerine ulaşılmış olur.
33
Fonksiyonlar Fonksiyonlar C programlamanın en önemli kısmını oluşturur. Genellikle bir takım giriş parametrelerine dayanarak bir değer döndüren alt-programcıklar olarak tanımlanırlar. Program yazarken bir işlemi birden fazla tekrarlamanız gerekebilir. Bu durumda işlem bir fonksiyon haline getirilip program içerisinde çağrılarak kullanılır. Fonksiyonlar giriş parametrelerinden gelen değerleri işleyerek geriye bir değer döndürebilir veya döndürmez. Bir fonksiyonun dönüş değeri ifadeler içinde kullanılabilir.
34
Format: fonksiyonun geri döndüreceği tür fonksiyonun_adı(parametre listesi); Ör. int fonksiyon_adı(int x, int y){ … return } Yukarıdaki örnekte, fonksiyonun adını belirtmeden önce fonksiyonun geriye döndüreceği değerin türü (int) belirtilmelidir. Geriye döndürülen değer char, float gibi ifadeler olabilir. Eğer fonksiyon geriye bir değer döndürmeyecekse void ifadesini kullanmalıyız. Daha sonra fonksiyonun adı yazılır. Fonksiyon adından sonra parantez içerisinde fonksiyonun kullanacağı giriş parametreleri yazılır. Yukarıdaki örnekte x ve y adında tamsayı iki parametre tanımlanmıştır. Fonksiyon içinde işlemler yapıldıktan sonra return komutuyla ana programa tamsayı bir değer döndürülür. C’de ana program main() fonksiyon bloğunun içine yazılır. Diğer fonksiyonlar bu ana programın içinden çağrılarak kullanılır.
35
Ör. void main() { // fonksiyonlar burada çağırılır. // üstteki örnekteki fonksiyonu çağıralım. int ara_deger; // fonksiyondan gelen değeri tutacak. ara_deger = fonksiyon_adi(3,5); // fonksiyon çağrıldı ve tamsayı bir değer döndürecek. … } Yazdığımız fonksiyonları main() fonksiyonundan önce de yazabiliriz sonra da. Kendi fonksiyonlarımızı main bloğundan sonra yazarsak bazı sıkıntılar yaşayabiliriz. En doğru olanı ana program tarafından çağrılan fonksiyonları önce yazmak en son olarak main bloğunu yazmaktır. Derleyiciler programı yukarıdan aşağıya doğru derler.
36
Operatörler Aritmetik operatörler Karşılaştırma operatörleri Atama operatörleri Mantıksal operatörler Diğer operatörler
37
Operatörlerin öncelik sırası
MikroC’de operatörler için 15 öncelik sırası mevcuttur. Aynı kategorideki operatörlerin öncelik sıraları aynıdır. Aynı kategorideki operatörler aynı satırda işleme girerse ya sağdan sola yada soldan sağa işlem yapılarak değerlendirilir.
38
Aritmetik Operatörler
39
Karşılaştırma Operatörleri
İfadeler arasında mantıksal karşılaştırma işlemlerini yapar ve sonucunda lojik-1 (doğru-true) ya da lojik-0 (yanlış-false) değerini döndürür.
40
Atama Operatörleri
41
Mantıksal Operatörler
42
Diğer Operatörler Fonksiyon çağırma operatörü () en yüksek önceliğe sahip olan operatördür. [ ] karakterleri dizi operatörleridir. Göstericilerde -> ve . operatörleri kullanılır. Yine >> (sağa kaydırma), << (sola kaydırma) bu grupta sayılabilir.
43
Deyimler Sabit, değişken, fonksiyon ve operatörlerin bir araya gelmesinden oluşur. Ör. a + b Çarpan * carp() temp = x / y
44
İfadeler (statement) Bir program içindeki işlemleri gösterir. İfadeler çalıştırılabilir. C dilinde ifadelerin sonunda ; (noktalı virgül) sonlandırıcı bulunmak zorundadır. Ör. if (x==y) a = x * 3; int sayi = 0; MikroC’de kullanılan ifade çeşitleri: Etiket ifadeleri Deyim ifadeleri Kontrol ifadeleri Döngü ifadeleri İçiçe blok ifadeler
45
Kontrol Yapıları if – else switch – case, olmak üzere iki çeşittir.
Benzer bir sunumlar
© 2024 SlidePlayer.biz.tr Inc.
All rights reserved.