Temel C Programlama Dersleri -1- Giriş

C programlama dili derslerine kış tatilinde başlamayı düşünsem de bu arada dijital elektronik, bilgisayar mimarisi ve STM32 çalışmaları yaptığımız için C programlama derslerimiz gecikti. Bir sebebi bu olsa da asıl sebebi bir programlama dilini anlatabilmek için o dili gerçek anlamıyla anlamak gerektiğidir. O yüzden belki yıllar sonra anlatacak olsam da gelen talep doğrultusunda C ve Gömülü C programlama derslerini biraz aceleye getirmek zorundayım. Çünkü Elektrik-Elektronik ve Bilgisayar mühendislikleri dahil çoğu bölümü okuyan öğrencilerde C programlama dilini anlama ve kullanma sıkıntısı gözlemlemekteyim. Bu yönde bir eğitim verilse de kaynaklar da olsa da ya bu kaynaklar gömülü sistemlerde çalışmak isteyenlere yönelik değil ya da eğitim ezberci olduğundan öğrenci bu dili anlayıp kullanamıyor. İşin ilginç yanı olarak ise bunca yıl bilişim sektörünü takip eden biri olarak şunu gözlemleme şansını buldum. Bizim ülkede ezberci eğitimle Visual Basic, Visual C# gibi hazır kütüphane ve uygulama geliştirme arayüzüne sahip platformlar öğretiliyor ve öğrencinin kullanma şansı oluyor. İş ne zaman kalabalıktan kurtulup C, C++ gibi temel ve sade dillere gelirse o zaman öğrenci bunu öğrenemiyor. Bu aynı kelimelerden cümle kurabilme ya da hazır cümleleri ezberleyip kullanma gibi bir durum ortaya çıkarıyor. Ezbere eğitimle hazır kodları ve kütüphaneleri kullanabilse de kendisi temelden bir şey ortaya koyamıyor. C dili ise günümüzün en temel dili olduğu için ezberlemekten çok anlamayı gerektiriyor. O yüzden bunca zaman en zor kısım olarak C dilini anlatabilmeyi gördüm. Yazdığım Arduino Eğitim Kitabı’nda C programlama ve kütüphane kullanımına dair bilgilere yer versem de daha ileri bir seviye kaynağa işte ilerledikçe ihtiyaç duyuluyor. Bu eksikliği ortadan kaldırma adına C programlama derslerini en kapsamlı şekilde yazmaya gayret edeceğiz.

Ders içeriği sadece gömülü C veya sırf C programlamaya yönelik olmayacak. Bu sefer farklı bir yaklaşım yapıp hem masaüstünde C programlama dilini hem de gömülü C programlamayı beraber anlatacağız. Kısacası bize lazım olan her konuyu anlatma gayretinde olacağız. Sadece gömülü sistemler üzerinde programlama yapmak günümüzde yeterli olmamaktadır. Pek çok elektronik projenin bilgisayar ile iletişime geçmesi gerekli ve bilgisayarda bir arayüz programının ihtiyacı duyulmaktadır. Bu yüzden C programlamayı öğrenmek hem gömülü sistemlerde program yazabilmeyi hem de masaüstü programlarını yazmayı sağlamalıdır. Öğrendiğimiz C dilinden sonra C++ diline geçiş yapabilmemiz gereklidir. Böylelikle Visual C++ gibi yazılım ortamlarında uygulama yazabilmeliyiz. Aynı zamanda C dilini alt seviye kullanabilmeli ve mikrodenetleyici ve mikroişlemciler üzerinde yazmaç tabanlı uygulama yazabilmeliyiz. Bu geniş bir yelpaze olsa da ülkemizde gömülü sistemler sektörü oldukça dar olduğu için çok yönlülüğün fazla olması gereklidir. Donanımcı-Yazılımcı diye bir ayrımdan kurtulup bir projenin her aşamasında söz sahibi olmamız bizim yararımıza olacaktır. Çünkü bazı projeler donanım yönünden iyi olsa da iyi yazılımcı olmadığı için ortaya çıkamayabilir. Bazı projelerin de donanım yönünden eksikliği yazılımı ne kadar iyi olursa olsun telafi edilemez.

Planladığımız ders içeriğini üç ana maddeye ayırmamız mümkündür,

  • Temel C

  • Gömülü C

  • Masaüstü C/C++

Bunlardan Temel C kısmı en kolay kısım olup giriş konularından meydana gelecektir. Pek çok uygulamayı Eclipse üzerinden konsol ekranından gerçekleştireceğiz. Burada konsol ekranında uygulama yapmamız şart gibidir. Çünkü C dilini bilmeyen birine donanımı veya diğer yazılım ortamlarıyla beraber C dilini anlatmak iyice kafa karıştıracaktır. C dilini sadece C dili olarak kullanabildiğimiz konsol ortamları bu konuda kafa karışıklığına sebep olmayacaktır. O yüzden Gömülü C’ye geçmeden önce temel C programlamayı bu şekilde öğrenmek gereklidir. Bu temel C kısmında okuyucuyu gömülü C programlamaya hazırlar nitelikte bilgileri vermekten kaçınmayacağız.

Gömülü C kısmında ise donanım ile beraber dersleri yürüteceğiz. Çünkü donanım bilmeden gömülü sistemler üzerinde de gömülü C üzerinde de çalışmak mümkün değildir. Gömülü C’nin farkı zaten buradadır. O yüzden donanım ile yazılımı beraber götüreceğiz. Yalnız burada dersler AVR Programlamada olduğu gibi donanım ağırlıklı değil yazılım ağırlıklı geçecek. Önceden alışkın olduğumuz AVR ve STM32 üzerinden dersleri anlatmaya devam edeceğiz. Aynı zamanda ileri seviye Arduino konularına da değineceğiz. Örneğin kütüphaneleri inceleyeceğiz, kaynak kodundan örnekler vereceğiz, kütüphane yazacağız.

Masaüstü C/C++ kısmında ise artık C konularını bitirmiş olacağımızdan yavaştan C++ ile karışık C programları yazmaya başlayacağız. Visual C++ başta olmak üzere C ve C++ için masaüstü geliştirme ortamlarına göz atacağız. Klasik kitapların konsol ekranından çıkamaması gibi bir duruma düşmeyeceğiz. Hem teoriyi öğreneceğiz hem pratikte bunu gerçekleştireceğiz. Fakat uygulama yazma noktasında pratik daha ön planda olacak. Bilgisayar programı yazarak mikrodenetleyici kartları ile iletişimde bulunacağız ve arayüz ortamı geliştireceğiz. Bu noktadan sonra tam kapsamlı bir proje geliştirmek için eksiğimiz kalmayacak.

Lojikprob.com’a ilk yazmaya başladığım hakkında yıllardır Türkçe kaynak bulamadığım “AVR Programlama” konusundan itibaren pek çok başarıya imza attık ve artık internet sayfamız gömülü sistemler alanında bir numaralı kaynaklardan biri haline geldi. Bu projeyi tamamlamak amacıyla artık yazdığımıza “boş zaman uğraşı” gözüyle bakmıyor daha ciddiye alarak yazılarımızı yazmaya devam ediyoruz.

Daha önceki yazıda bahsettiğimiz üzere C programlama eğitimini üç ana başlıkta sizlere anlatacağız. Bu eğitimlerden ilki giriş seviyesi olup hiç bilmeyen birinin C dilini anlaması ve rahatça kullanmasına yönelik temel C dersleri olacak. Bu temel C derslerinin sadece fonksiyonları ve döngüler gibi basit konulardan ibaret olacağını düşünmemek gerekir. Piyasadaki C kitapları ve C eğitimi her zaman dilin temelini ve dili anlatmaktadır. Biz de dili anlattığımız ve diğer kitaplarda olduğu gibi öğretici konsol uygulamaları yaptığımız eğitime “Temel C” adını veriyoruz. Kısacası bu seriyi C dilini öğreneceğiniz bir kitap yerine koyabilirsiniz. Bu seride ileri seviye kavramlardan çok fazla söz ederek başlangıçta sizi sıkmak istemiyoruz. İleri seviye kavramları öğrenmeniz gerekse de bunu daha ileri konularda anlatacağız. Bu seri “Bilgisayar okur-yazarlığı” edinmiş herkese yönelik olacaktır. Bilgisayar okur yazarlığını programlamaya ve mühendislik uygulamalarına başlamadan önce edinmeniz gereklidir. Çoğu zaman mühendislik öğrencilerinin bilgisayar okur yazarlığı edinmeden 32-bit mikrodenetleyicileri bile programlamaya başladığını görebiliriz. Fakat bilgisayar okur yazarlığı edinmeyen birisi programlama aşamasında oldukça zorlanacaktır. O yüzden bilgisayar okur yazarlığı bu alanda çalışmak isteyenlerin ilk edinmesi gereken deneyimdir. Biz de bilgisayar okur yazarlarına göre bu yazıları yazacağız. Yani basacağınız her düğmeyi, kuracağınız her programı “next tuşuna basın, ok deyin” diye anlatarak kaliteyi düşürmeyeceğiz.

Müfredat konusunda genellikle İngilizce eğitim kitaplarını ve referansları kaynak olarak alsak da bazen konunun dışına çıkarak ilginç noktaları sizinle paylaşacağız. Herhangi bir Türkçe kaynaktan istifade etmeyeceğiz ve ayrıca internetteki yabancı tutorial içerikleri gibi değil kitap kalitesinde bir seri ortaya koyacağız. Yazacağımız programlar konsol tabanlı olacak ve bilgisayar üzerinde çalışacak. Bu noktada öğrenciyi uğraştırmama ve kafasını karıştırmama adına doğrudan dile odaklanma gereği duyduk ve bunu da böyle sağlayacağız. Pek çok öğrencinin temel C bilgilerinden yoksun olduğunu görüyoruz bunları gömülü C ile başlatmakla zorluk çektirmek istemiyoruz.

Temel C derslerimizin prensibini ve sebebini anlattığımıza göre şimdi müfredattan kısaca bahsedelim. Bu müfredat dersler devam ederken zamanla ilave ve çıkarmalara maruz kalacak olsa da fikir edinmeniz açısından bir liste oluşturalım.

Temel Bilgisayar Konuları

Burada bilgisayar bilginizi bir adım ileriye götürmek adına bilgisayar mimarisinden ve bilişim dünyasından önemli gördüğümüz başlıkları sizlere anlatacağız. Bilgisayar ile 1998’de tanıştığım için biraz da nostalji yapacağız. 🙂

C Diline ve Programlamaya Giriş

Burada algoritma mantığını, program akışını ve bilgisayarın programı nasıl anladığını sizlere açıklayacağız. Programlama dilleri seviyeleri ve bu dillerin kullanım alanlarından bahsedeceğiz. C dilinin tarihini ve günümüzde kullanım alanlarını inceleyeceğiz ve C dilinin temel mantığını sizlere anlatacağız.

Temel Program Bileşenleri

Burada örnek programları inceleyerek temel program mantığını sizlere anlatacağız. Program akışını, operatörleri ve çalışma mantığını örnek program üzerinde göstereceğiz ve yapısal programlamaya giriş yapacağız.

Program Akışı Denetimi (Döngüler ve Kararlar)

C programlamada büyük bir adım olan döngü ve kararları size bütün ayrıntısıyla açıklayacağız. Gömülü sistemlerde program yazarken en çok kullandığımız yapı olmasının yanında bilgisayar programlamanın ve hatta yapay zekanın temelini de döngü ve kararlar oluşturmaktadır. O yüzden bu konu üzerinde uzun süre duracağız.

C Dilinde Veri Tipleri ve Giriş/Çıkış

Veri tipleri, tipler arası dönüşüm, veri formatları ve bunları temel çıkış fonksiyonları ile nasıl kullanacağınızı anlatacağız. Gömülü C kullanırken printf fonksiyonunu pek kullanmasak da aynı mantığı sprintf’de yine kullanmak gereklidir. Burada anlatılan bütün derslerin gömülü C’de rahatça kullanılabilir olmasına dikkat edeceğiz.

Fonksiyonlar

Fonksiyonlar ileri seviye programlamaya atılan ilk adım olarak değerlendirilebilir. C dilinin kuvvetini de fonksiyon kullanmakla anlayabiliriz. Kütüphane fonksiyonlarını kullanmak ve fonksiyonların mantığını kavramak çok önemlidir. Fonksiyonların mantığını kavrayan biri kendi kütüphanesini yazarken sıkıntı çekmez ve başka kütüphane fonksiyonlarını da rahatça kavrayabilir.

Diziler

Dizi değişkenleri ileri seviye veri işlemenin ilk adımıdır. C dilinde karakter dizisi olarak “String” yer almadığı için string işlemleri dizi olarak yerine getirilir. Bu yönden dizi konusunda karakter dizilerini de yoğun olarak anlatacağız.

Karakter Dizisi Fonksiyonları ve Metin İşleme

Bu alanda programcılık yeteneğimizi geliştirme adına uygulamalar yapacağız ve C dilinin standart kütüphanesinde yer alan karakter dizisi fonksiyonlarını kullanmayı anlatacağız.

İşaretçiler

İşaretçileri anlamak için donanım bilgisinin gerektiğinin farkına vardım. Çünkü donanım bilmeden önce işaretçileri tam anlamıyla anlayamıyordum. Ne zaman bellek adreslerini, bilgisayar mimarisini yani gömülü sistemleri öğrenmeye başladıysam işaretçilerin ne kadar kolay olduğunun farkına vardım. O yüzden işaretçileri farklı bir açıdan sizlere aktarmaya çalışacağım.

Yapılar, Birlikler ve Operatörler

Operatör konusunda bitwise operatörleri mümkün olduğu kadar ayrıntılı anlatacağız. Çünkü Gömülü C’nin en önemli konularından biri bitwise operatörlerdir. Bütün yazmaç ve bit işlemleri bu operatörler vasıtasıyla yapılır ve bunlar olmadan gömülü sistem üzerinde çalışma imkansız gibidir. Yapı değişkenleri basit seviyede karşımıza çıkmasa da STM32’nin HAL kütüphanesi gibi gelişmiş yazılımlarda karşımıza çıkmaktadır. Burada basit olarak temeli öğrenmemiz Gömülü C’de işimizi kolaylaştıracaktır.

Derleyici Direktifleri ve Kütüphane Oluşturma

Gömülü C programlamada sürekli karşımıza çıkan bu konuyu eksik bırakmamaya çalışacağız. Aynı zamanda basit kütüphanelerin nasıl oluşturulduğunu anlatarak uygulama aşamasında işinizi kolaylaştıracağız.

Diğer C konuları

Önemli gördüğüm diğer C konularını anlatarak derslere devam edeceğim. Ayrıca açık kaynak olarak bulduğum örnekleri AVR derslerinde olduğu gibi imkan bulursam satır satır inceleyeceğim.

C programlama hakkında pek çok kaynak olduğu için bu alanda farklı, orjinal ve en iyi kaynağı ortaya koymaya çalışıyorum. Ayrıca zamanım kısıtlı olduğu için kısa sürede yeteri kadar ayrıntıya giremiyorum. O yüzden bu eğitimi uzun bir sürece yaymak gerekiyor. Bu konuda okuyucularımızın gecikmeleri anlayışla karşılamasını umuyoruz.

Last updated