[ad]
Ne dersek diyelim C dili gömülü sistemlerde “kral” konumundadır. Sevenleri de nefret edenleri de çok… Ancak C dilinin gömülü sistemlerde %80 oranında bir kullanımı bulunmaktadır. Hemen hemen bütün mikrodenetleyicilerin bir C derleyicisi var. Başlangıçta gömülü sistemler için tasarlanmış bir dil olmamasına rağmen C’yi bu kadar önemli kılan etkenler ne peki:
Donanıma olan yakınlık : C dilinin belki de en önemli özelliği yüksek seviyeli bir dildeki kontrol, veri yapıları gibi özellikleri assembly dilinde bulunan donanıma yakınlık gibi özelliklerle birleştirmiş olan “orta seviyeli” bir dil olmasıdır. Programcıya assembly dilinin zorluklarından izole olurken aynı zamanda donanımla direk olarak konuşma imkanı vermektedir.
C bilen programcıların çokluğu : C dili en eski programlama dillerinden olması sebebiyle bu dili bilen ve oldukça tecrübeli programcıların sayısı fazladır. Ayrıca C++ ve Java gibi dilleri bilen programcıların C dilini de kavraması oldukça kolay olmaktadır.
Taşınabilirlik : C dilinde belirli bir işlemci için yazılmış yazılımlarbaşka bir işlemciye taşınabilmektedir.Bu dille uzun süre uğraşmış olanlar bunun aslında göründüğü kadar kolay olmadığını bilse de C dili assembly dillerine göre oldukça “taşınabilir” bir dildir.
Hız ve esneklik: C dilinde yazılan programlar diğer yüksek seviyeli dillerde yazılan programlara göre daha hızlı çalışır. Bunun nedeni diğer dillerde bulunan birçok kontrolün C dilinde bulunmamasıdır.Yani C dili programcının ne yaptığını bildiğini varsayar ve bütün sorumluluğu programcıya bırakır. Bu aynı zamanda C’nin kötü özellikleri arasında da yer alır. C dilinde hata yapmak diğer dillere göre çok daha kolaydır.
C’nin bazı güzel özelliklerini gördük.Şimdi gelelim hayatın acı gerçeklerine. Bu dilde programcılık yapanlar çok iyi bilir ki C başımıza çok kolay bir şekilde oldukça büyük belalar açabilmektedir. C’de belirli bir süre kod yazmış birçok yazılımcı uzun uğraşlar sonucu çalışmayan programındaki hatanın nedeninin aşağıdaki gibi birşey olduğunu bulmuştur:
if ( herhangiBirDegisken = 5 )
{
BirseyYap();
BirseyDahaYap();
}
Yukarıdaki kod parçacığında programcının kastettiği şey eğer herhangiBirDegisken degiskeninin değeri 5 ise BirseyYap ve BirseyDahaYap fonksiyonlarının çalıştırılmasıdır.Ancak yukarıdaki koda göre bu fonksiyonlar her zaman çağırılacaktır.Çünkü C dili if ifadesinin içinde atama yapılmasına izin vermektedir ve atamanın sonucu da her zaman 1 değerini döndürmektedir. Buradaki basit hata “=”atama operatörü ile “==” karşılaştırma operatörünün karıştırılmış olmasıdır. Bu basit hata yıllardır belki de binlerce programcı tarafından yapılmıştır.Ayrıca birçok yazılım kazasının da sorumlusudur.
C’nin yol açtığı belalardan biraz olsun kurtulabilmek için firmalar kodlama standartları oluşturmaktadırlar. Örneğin yukarıdaki gibi bir hatanın ortaya çıkmaması için sabit sayının başa yazılması bir yöntemdir :
if ( 5 = herhangiBirDegisken)
{
BirseyYap();
BirseyDahaYap();
}
Yukarıdaki kod derlemeye çalıştığınızda derleyici “sabit bir sayıya atama” yapılamayacağını belirterek hata verecektir ve siz de “=” yerine “==” yazmanız gerektiğini bileceksiniz.Bu tür basit “alışkanlıklar” sayesinde birçok hatanın ortaya çıkmasını önleyebiliriz.
Ayrıca bu konuda bazı genel standartların da oluşturulmaya çalışılıyor. .Örneğin *MISRA C adı verilen kurallar bütünü MISRA (Motor Industry Software Reliability Association- Motor Endüstrisi Güvenilirlik Kurumu) tarafından oluşturulmuş çeşitli kurallar bütünüdür.Buradaki amaç C dilinin hatalara yola açan özelliklerinin kullanımını en aza indirerek hataları önlemektir.
Eğer gömülü sistemler alanında çalışıyorsak (ya da çalışacaksak ) C diliyle yaşamayı öğrenmemiz gerekiyor.C’yi keskin bir bıçak olarak düşünürsek yetenekli biri onunla harikalar yaratırken beceriksiz biri ise kendini kolaylıkla yaralayabilir.Mühim olan araçları nasıl kullandığımızdır.
Kaynaklar: