Günümüzün otomobillerinde gömülü yazılımların oynadığı rolü anlatan güzel bir makale:
http://spectrum.ieee.org/green-tech/advanced-cars/this-car-runs-on-code/
Posted by ctasdemir Şubat 28, 2010
Günümüzün otomobillerinde gömülü yazılımların oynadığı rolü anlatan güzel bir makale:
http://spectrum.ieee.org/green-tech/advanced-cars/this-car-runs-on-code/
Yazı kategorisi: Gömülü Yazılımlar | 1 Yorum »
Posted by ctasdemir Ağustos 23, 2009
Yazı kategorisi: Gömülü Yazılımlar | 2 Yorum »
Posted by ctasdemir Mayıs 17, 2009
Yazı kategorisi: Gömülü Yazılımlar | 1 Yorum »
Posted by ctasdemir Nisan 7, 2009
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ımlar baş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:
İf ( 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 :
İf ( 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:
Yazı kategorisi: Gömülü Yazılımlar | » yorum bırak;
Posted by ctasdemir Ocak 25, 2009
Birçok mühendislik CV’sinde teknik yetenekler,programlama dilleri bölümünde “C/C++” ifadesi bulunmaktadır.Çoğu zaman bu ifade C ve C++ dillerinin farkını pek yansıtmaz.Okul yıllarında bir dönemlik alınmış programlama dersinde görülen şeylerin C/C++ olduğu zannedilir.Aslında çoğu kişi C++ dersi adı altında C öğrenmiştir.Buna ben de dahilim.
Üniversite birinci sınıfta gördüğümüz programlama dersinde Borland C++ Builder derleyicisini kullanıyorduk.Bu nedenle olsa gerek dersin adı öğrenciler arasında “C++” olarak geçiyordu.Ancak sonradan öğrendim ki C++’a dair derste kullandığımız tek şey,ekrana çıktı almamızı sağlayan “cout” ifadesiymiş.
Sonraları programlama ile ilgili bilgilerimi artırdıkça C ve C++ dillerinin ne kadar farklı olduklarını gördüm (aynı zamanda ne kadar ortak yanları olduğunu da). İşin içine “nesne “ konusu girene kadar ikisinin birbirinden pek farkı yokmuş gibi görünüyordu.Ancak nesne yönelimli programlama ,problemlere bambaşka bir bakış açısı getiriyordu.
Çalışma alanım olan gömülü sistemlerde “C” dilini yoğun olarak kullanmaktayız.Zaten günümüzde gömülü sistemlerin en yoğun kullanılan dili de C’dir.Halihazırda kullanılan birçok mikrodenetleyicinin C derleyicileri bulunmaktadır.Ancak C++ henüz gömülü sistemler alanında pek geniş bir kullanım alanına sahip değil.C++ dilinin gerektirdiği yüksek bellek ve işlem gücü ,çok kısıtlı kaynaklar üzerinde çalışan gömülü sistemler için oldukça “lüks” kaçmaktadır.Ancak günümüzün hızla gelişen teknolojisiyle birlikte artan karmaşıklıkla başa çıkmak için “nesne yönelimli programlama”nın da gömülü sistemler alanına girmeye başladığını görmekteyiz.
C ve C++ ayrımının birçok firma tarafından da yapılamadığını görüyorum.Gömülü sistemler ile ilgili birçok iş ilanında C/C++ ifadesi bulunuyor.Anlaşılan bu konuda firmaların da kafası karışık.
Kısacası C ve C++ farklı programlama dilleridir.Programlamaya bakış açıları tamamen farklıdır.Gömülü sistemlerde çalışmak isteyen birinin iyi bir C bilgisine sahip olması şart.Ancak C++ gibi nesne yönelimli programlama dillerine de hakim olmak yakın gelecekte karşımıza çıkacak daha farklı problemlerde bize fayda sağlayacaktır.
Yazı kategorisi: Gömülü Yazılımlar | Etiketler: C, Gömülü Yazılımlar | » yorum bırak;
Posted by ctasdemir Eylül 25, 2008
Ülkemizdeki başarılı “gömülü sistemler” örneği, kablosuz ağ teknolojileri alanında üretim yapan Airties firmasının üst yöneticisi Bülent Çelebi’nin Zaman gazatesiyle yaptığı ropörtajı okumanızı tavsiye ediyorum.”Mesela ‘gömülü yazılım’ konusunda bilgili bir kişi bile yok.” sözleri gerçekten çarpıcı…
Yazı kategorisi: Gömülü Sistemler, Gömülü Yazılımlar | » yorum bırak;
Posted by ctasdemir Haziran 8, 2008
Gömülü sistemler konusunda sürekli takip ettiğim sitelerden biri de embedded.com’dur.Bu sitede devamlı olarak gömülü sistemlerle ilgili çok güzel makaleler yayınlanmakta.Ayrıca devamlı olarak yazılar yazan köşe yazarları da her hafta başka bir konuyu ele almaktadır.Bu yazarlar arasında benim favorilerimden biri de Jack Ganssle.Gömülü sistemler alanında yirmi küsür yıllık tecrübeye sahip olan Ganssle bu alanda birkaç kitaba ve birçok makaleye imza atmıştır.
Ganssle’ın geçtiğimiz haftalarda yazdığı yazılarından birinin konusu Bilgisayar bilimleri ( computer science ) eğitimi veren üniversitelerin gömülü yazılım sektörünün talep ettiği mühendislik altyapısına sahip mühendisler yetiştirip yetiştiremediği idi.Ganssle birkaç üniversitenin müfredatının da analizini yaptı.
Ganssle yazısında , bilgisayar mühendisliği/bilimleri gibi bölümlerde genellikle Java/C#/C++ gibi yüksek seviyeli dilllerin öğretildiğini, assembly dilleri, alt seviye programlama gibi konuların es geçildiğinden bahsediyor.Bu durum gömülü sistemler alanında büyük bir insan gücü açığı oluşturuyor.
Ülkemiz henüz yazılım alanında yeni yeni birşeyler yapmaya başlamış durumda.Yazılım ihracatımız günden güne artıyor.Eğer Hindistan gibi yazılım ihracatı alanında büyük başarılara imza atmak istiyorsak , bu alandaki insan gücü planlamamızı da en iyi şekilde yapmamız gerekiyor.Yazılım dendiğinde çoğunlukla PC tabanlı yazılımlar akla gelse de gömülü yazılım alanında dünyada giderek artan bir ihtiyaç söz konusu.Her gün bir yenisi çıkan elektronik cihazların hemen hepsinde gerekli fonksiyonları gerçekleştirmelerini sağlayan yazılımlar çalışıyor.Önümüzdeki yıllarda gömülü yazılımcılara olan talebin oldukça artacağını göreceğiz.
Bu konuda başta üniversiteler olmak üzere herkesin yapabileceği şeyler var.Bilgisayar ve elektronik mühendisliği bölümlerinde artık “gömülü sistemlerin” bir dal olarak yer alması gerekmektedir.Bireysel olarak bilgisayar / elektronik mühendisliğinde okuyup gömülü sistemler konusunda çalışmak isteyenlerin de yapabilecekleri var elbette.Bilgisayar mühendisliğindeki öğrenci arkadaşların işin donanım kısmına daha yakın olan alt seviye konulara (örn. Bilgisayar mimarisi,sistem programlama,dijital sistemler) , elektronik mühendisliğinde okuyan arkadaşların da yazılım konularına ( algoritmalar, temel programlama, mikrodenetleyiciler) önem vermeleri faydalı olacaktır.
Gömülü sistemler alanında yapılacak her yatırımın ülkemizin geleceğine büyük katkı yapacağına inanıyorum.Günümüzün bilgi çağında öne çıkan ülkeler en iyi bilgi işçilerini yetiştirerek onları üretken hale getirenler olacaktır.
Notlar:
Jack Ganssle’ın konuyla ilgili makalesi :
http://www.embedded.com/columns/technicalinsights/207500788
Yazı kategorisi: Gömülü Yazılımlar, Mühendislik | 2 Yorum »
Posted by ctasdemir Nisan 30, 2008
Bugün etrafımızda birçok sistem insan kontrolü olmadan çalışıyor.Asansörümüze binip gitmek istediğimiz katın butonuna basıyoruz ve o bizi istediğimiz kata götürüyor.Arabalarımızın motoru kendini en optimum seviyede çalışacak şekilde ayarlıyor.Otomatik kahve makinesi bizim için kahvemizi otomatik olarak hazırlıyor, hem de istediğimiz şeker seviyesiyle.
Artık uçakları, füze savunma sistemlerini de büyük oranda içlerindeki yazılımlar kontrol ediyor.Kısacası gömülü yazılımlar hayatın her alanında çalışıyorlar.Hal böyle olunca yazılımlar çok kritik roller oynuyor.Oluşabilecek hatalar can kayıplarına ve büyük hasarlara yol açıyor.Geçmişte olmuş büyük yazılım hatalarına bir göz atalım isterseniz:
Arienne 5 füzesi faciası:
4 Temmuz 1996 günü Arienne 5 füzesi fırlatıldıktan 40 saniye sonra havada infilak etti.Olayın sonrasında yapılan soruşturma sonucunda kazanın bir yazılım hatasından olduğu ortaya çıktı.Arienne 4 füzesindeki yazılım Arienne 5’e uyarlanmıştı.Modül bazında testler yapılmıştı ancak genel sistem testleri zaman sıkışıklığından dolayı tam olarak gerçekleştirilmemişti.Arienne 5 füzesinin uçuş profili Arienne 4’ten farklı olduğundan kalkıştan kısa bir süre sonra bir değişkendeki taşma sonucu kontrol sistemi devre dışı kaldı.500 milyon dolarlık kayıba malolan bu hata tarihteki en pahalı yazılım hataları arasında yerini aldı.
Hedefi Iskalayan Patriot Füzeleri:
25 Şubat 1991 tarihinde Körfez Savaşı sürerken Amerika’nın İsrail’e yerleştirdiği Patriot füzelerinden biri Irak’tan gelen Scud füzesini ıskaladı ve bir Amerikan askeri barakasına isabet eden füze 29 Amerikan askerinin ölümüne yol açtı.Daha sonra yapılan incelemede Patriot füzelerinde zaman hesaplamasında kullanılan 24 bitlik sabit noktalı değişkende oluşan hatanın buna neden olduğu anlaşıldı.100 saat açık kalan füze sistemindeki zaman hatası 0.34 saniyeyi bulmuştu ve bu da füzenin 500 metrelik bir sapma yapmasına neden olmuştu.
Therac-25 tedavi cihazındaki hata:
Therac-25 hastalara belirli dozlarda radyasyon uygulayarak tümörlerin yok edilmesinde kullanılan medikal bir cihazdı.Cihazın kullanımında iki farklı mod bulunuyordu: Düşük güç modu ve yüksek güç modu.Düşük güç modunde düşük seviyedeki elektron ışını hastaya direk olarak uygulanıyordu.Yüksek güç modunda ise otomatik olarak hastayla cihaz arasına metal bir plaka koyuluyordu.
Operatörün cihaza önce yanlışlıkla yüksek güç moduna geç komutu vermesi ve ardından bunu iptal edip düşük güç moduna alması sonucu cihaz bir hata mesajı verir.Aslında hata mesajı verdiği durumda sinyalin hastaya uygulanmamış olması gerekirken yüksek güçlü radyasyon hastaya uygulanmıştır.Operatörün işlemi birkaç kere tekrar etmesiyle hasta çok büyük oranda radyasyona maruz kalır.Cihazdaki hata sonucu 1985-1987 yılları arasında 6 kişi hayatını kaybetti.
Bütün bu tarihi trajedilerden gömülü yazılımların ne kadar kritik roller oynayabileceğini görmüş oluyoruz.Tabi aynı zamanda ne kadar ciddi sonuçlara yol açabileceklerini de.Günümüzde hala “hatasız yazılımlar”ın arayışı devam etmektedir.
Linkler:
http://en.wikipedia.org/wiki/Ariane_5_Flight_501
http://en.wikipedia.org/wiki/Therac-25
http://en.wikipedia.org/wiki/MIM-104_Patriot#Failure_at_Dhahran
Yazı kategorisi: Gömülü Yazılımlar, Yazılım hataları | 2 Yorum »
Posted by ctasdemir Haziran 10, 2007
Önceki yazımda gömülü sistemlere kullanıcı gözüyle bakmıştık .Bu sefer işin teknik boyutuna biraz daha eğileceğiz.Gömülü sistemlerin tanımını yapmakla işe başlayalım.Genel olarak gömülü sistemler:
“belirli bir fonksiyonu yerine getirmek için tasarlanmış yazılım ve donanım kombinasyonudur” şeklinde tanımlanabilir.
Gömülü sistemleri diğer genel amaçlı bilgisayar sistemlerinden ayıran özelliklerin başında , bu sistemlerin belirli bir amaç için tasarlanmış olmaları gelir. Bir video cihazını kontrol eden gömülü sistem bütün kullanım ömrü boyunca bu işi gerçekleştirecektir.Ancak ev ve işyerlerimizde kullandığımız PC’lerde birçok farklı işlemi gerçekleştirmekteyiz.PC’lerde bu değişik işleri değişik yazılımlarla yapmaktayız.Ancak gömülü sistemlerin içinde çalışan yazılım genellikle “tektir”.
Gömülü sistemler adlarından da anlaşılabileceği gibi genellikle daha büyük bir sistemin içinde “gömülü” olarak çalışırlar. Örneğin bir çamaşır makinesinde birçok mekanik kısım bulunmakla birlikte, bütün bunları kontrol eden bir veya birden fazla mikrodenetleyici tabanlı sistem bulunur. Bu sistemler kullandığımız cihazların “akıllı olmasını” sağlayan, beyin vazifesi gören birimlerdir.
Her gömülü sistemin başlangıçta tanımlanan tasarım kriterleri farklı olduğundan ,tasarımı da kendine özgüdür.Bir oyun konsolunun içerdiği birimlerle, bir mikrodalga fırının içerdiği gömülü sistemler birimleri birbirinden farklıdır. Ancak genel olarak her gömülü sistem şekildeki birimlere sahiptir:
Gömülü sistemlerin tasarım gereksinimleri şunlardır:
- İşlem Gücü
- Bellek
- Geliştirme Maliyeti
- Birim Üretim hacmi
- Beklenilen yaşam süresi
- Güvenilirlik
Bunlar dışında her sistemin kendine has başka gereksinimleri de olabilir.Örneğin pille çalışacak bir sistemde güç tüketimi de önemli bir kriterdir.
Tasarımlardaki kriterlere göre bu gereksinimlerinden bazıları arasında tercih yapmak gerekebilir. Örneğin karmaşık hesaplamaların gerekli olabileceği sistemlerde yüksek işlem gücü ihtiyacı ön planda olurken, çok büyük miktarlarda üretilecek sistemlerde düşük maliyet daha önemli olabilir.
Gömülü sistemler kullanım alanlarına göre zaman zaman oldukça kritik görevleri yerine getirebilirler.Burada oluşabilecek hatalar büyük mal ve can kayıplarıyla sonuçlanabilir.Bu açıdan bakıldığında bu sistemlerin “güvenilir” ve “hataları tolere edebilir” özellikte olmaları çok önemlidir.Bir mikrodalga fırının ya da bir oyuncağın içindeki sistemin zaman zaman hatalı çalışması çok büyük sorun oluşturmaz,ancak bir uçağın otomatik pilot sistemindeki hata birçok insanın hayatını tehlikeye atabilir.
Bugün dünyada üretilen mikroişlemcilerin/mikrodenetleyicilerin büyük çoğunluğu gömülü sistemlerde kullanılmaktadır. Genellikle 8 bit mikrodenetleyiciler yoğun olmakla beraber, 32 bitlik mikrodenetleyiciler de düşen maliyetleri sonucu artık geniş kullanım alanı bulmaktadır.
Gömülü sistemlerde tasarımcıların kullandığı temel araçlar:
- Programlayıcılar
- Hata Ayıklayıcılar (Debuggers)
- Derleyiciler
- Emülatörler
- Tümleşik Geliştirme Ortamları
şeklinde sayılabilir.
Gömülü sistemlerin donanım ve yazılım olarak iki ana bölümden oluştuğunu söylemiştik. Burada donanım ve yazılım bileşenleri birbirleriyle sıkı sıkıya bağlı olduğundan tasarım ekibinde bulunan yazılımcı ve donanımcıların bir arada çalışmaları gerekmektedir.Bu anlamda gömülü sistemler için “multi-disipliner” bir alan diyebiliriz.Bu alandaki mühendislerin donanım,yazılım,kontrol sistemleri vs.. gibi birçok alanda bilgi sahibi olmaları gerekmektedir.
Gömülü yazılımların karmaşıklığı artıkça ve aynı anda yapılacak işlemlerin sayısı arttığında değişik yapılara ihtiyaç duyulur.Aslında bir mikrodenetleyici aynı anda sadece bir tek işi yapabilir.Ancak işlemleri mili,mikro hatta nanosaniyeler mertebesinde gerçekleştirdiğinden, birçok işi aynı anda yapıyormuş gibi görünebilir.Genel olarak mikrodenetleyicili sistemlerde bu tür işlemler kesmeler ve zamanlayıcılar sayesinde periyodik olarak gerçekleştirilir.Bu anlamda kesmeler yazılımlarda önemli bir rol oynar.
Gömülü sistemler de ayrıca gerçek zamanlı işletim sistemleri de kullanılır (RTOS – Real Time Operating Systems). Böylelikle tasarımcı donanım ayrıntılarıyla çok uğraşmadan ana işlemleri gerçekleştirmeye odaklanabilir. Arka plandaki görevlerin senkronizasyonu işletim sistemi tarafından gerçekleştirilir.
Çok geniş bir alanı kapsayan gömülü sistemlerin bütün özelliklerini ele almak çok zor olsa da bu yazıda genel özellikleri tanımış olduk.Bundan sonra değişik özellikleriyle gömülü sistemleri tanımaya devam edeceğiz.
Yazı kategorisi: Gömülü Sistemler, Gömülü Yazılımlar | 1 Yorum »
Posted by ctasdemir Ağustos 21, 2006
HAYIR, ELEKTRONİKÇİLERİN DE İŞİ
Birkaç ay önceki “programlama sadece bilgisayarcıların işi mi?” adlı yazımda programcılığın elektronik mühendisliği alanındaki önemini tartışmıştım. Şimdi de aynı konuda yazmaya devam edeceğim.
Programlama elektronikçilerin de işidir diyoruz. Ancak bilgisayarcıların programlaması ile elektronikçilerin programlaması aynı mıdır? Önce buradan başlayalım. Bu konudaki kafa karışıklıklarımıza ilk örneği üniversitelerimizdeki “mikroişlemciler” dersinden verebiliriz. Bu ders aynı isimle birçok elektronik ve bilgisayar mühendisliği bölümlerinde okutulmaktadır. İki bölümün ortak dersi gibi görünmesine rağmen ayrım yapılması gereken noktalar var.
Çoğu zaman bilgisayar bölümündeki öğrencilere 8051 gibi “mikrodenetleyicilerin programlanması gösterilirken,elektronik bölümündeki öğrencilere 8088,80286 vs.. gibi Intel’in x86 tabanlı mikroişlemcilerinin öğretildiği görülebilmektedir.Bu “mikroişlemci ve mikrodenetleyici “ arasındaki farkın tam olarak anlaşılamamış olmasından kaynaklanmaktadır.
Mikroişlemciler başlangıçta büyük çaptaki hesaplamaların hızlıca yapılabilmesi için üretilmişlerdi. Daha sonra geliştikçe ve PC denilen kişisel bilgisayarlar ortaya çıktıkça, hesaplama dışında teknik tasarımlardan, eğlenceye birçok alanda kullanılmaya başlandılar. Böylelikle de mikroişlemciler elektronik alanından koparak bilgisayar mühendisliği adı altında ayrı bir dalın konusu içine girdiler.
Yarıiletken teknolojisindeki gelişmeler birim hacme sığdırılabilen transistör sayısında müthiş artışlara yol açtı. Böylelikle çok daha büyük performansa sahip mikroişlemciler üretildi.
Elektronik dünyası da kendi içinden çıkan bu teknolojiden faydalanmasını bildi. Daha önceki tasarım yöntemleriyle oluşturulan “sabit” fonksiyonlu devrelerin yerini, programlanarak değişik fonksiyonlar gerçekleştirebilen “mikrodenetleyiciler “ aldı. Mikrodenetleyici tabanlı sistemler bugün “gömülü sistemler “ adı altında ayrı bir mühendislik dalı da olmuştur. Bunu başka bir yazının konusu olmak üzere burada bırakıyorum.
Mikrodenetleyiciler bugün çok yüksek hızlara ve birçok değişik fonksiyona sahiptirler. Söylenenlere göre bugün ortalama bir aile otomobilinde 20’den fazla mikrodenetleyici bulunmaktadır. Evimizde kullandığımız birçok cihazda da bu minik bilgisayarlar görev yapmaktadır.
Bugün mikrodenetleyiciler elektroniğin içine bu kadar girmişken, programlama bilgisinin elektronikçiler açısından da ne kadar önemli olduğu açıktır. Burada kastedilen programlama mikrodenetleyici programlamasıdır. Peki, mikroişlemciler nasıl programlanmaktadır?
“Ben acayip assembly bilirim!”
MİKRODENETLEYİCİLERİN PROGRAMLANMASI:
“Ben acaip assembly bilirim” diyen birini gördüğünüzde ona ,”hadi be sende “ diyebilirsiniz..Evrensel bir assembly dili olmadığı gibi assembly bilmek diye bir şey de yoktur.Ancak şöyle cümleler anlamlı olabilir:”x86 assembly bilirim,8051 assembly’si biliyorum,PIC assembly öğrenmek istiyorum”
Assembly dili bir mikroişlemcinin anadilidir diyebiliriz. Assembly komutlarının her biri işlemci için bir anda gerçekleştirebileceği bir işlemi belirtir. Bilgisayar yazılımcılığı açısından bakarsak assembly dillerinin kullanımı çok kısıtlı kalmıştır. Artan karmaşıklığın altından bu şekilde kalkılması da imkansız zaten. Yazılımlar yüksek seviyeli dillerle yazılmaktadır.
Elektronik alanında assembly hala önemini korumaktadır. Çünkü bu alanda performans önemli bir kriterdir. Örneğin en çok kullanılan 8 bitlik mikrodenetleyicilerde assembly’nin sağladığı performans göz ardı edilemez kuşkusuz. Ancak günümüzde oldukça gelişen derleyiciler sayesinde C gibi orta seviyeli dillerde de yüksek performans alınmaktadır. Zaten yapılan araştırmalar dünyada bu alanda en çok kullanılan dilin C olduğunu göstermektedir. C kullananların büyük bölümü aynı zaman da assembly de kullanmaktadır.
PROGRAMLAMANIN ab C’Si
C programlama dillerinden belki de en ünlüsüdür.70’li yıllarda Brian W. Kernighan
Dennis M. Ritchie tarafından geliştirilmiştir. İlerleyen yıllarda C dilinin popüleritesi oldukça arttı. Dilin standartlaştırılması için 1983 yılında ANSI (Amerikan Ulusal Standartlar Enstitüsü ) tarafından bir komite oluşturuldu. Komite çalışmasını 1989 yılında tamamladı ve bugün geniş kabul gören ANSI C ortaya çıktı.ANSI C ile anlatılmak isteneden ANSI komitesinin 1989 yılında kabul ettiği standart C’dir.Bir kere ANSI C öğrenildiğinde bu dille uyumlu bütün derleyicilerin kullanımı kolaylaşmaktadır. ANSI C için en temel kaynaklardan biri dilin yaratıcıları Brian W. Kernighan ve Dennis M. Ritchie tarafından yazılan ANSI C kitabıdır.Bunun dışında C dilini anlatan birçok kitap bulunmaktadır.
Yapılan araştırmala gösteriyor ki mikrodenetleyi tabanlı tasarımlarda büyük oranda C dili kullanılmaktadır* C dilini kullananların büyük çoğunluğu da kullandıkları mikrodenetleyicinin assembly dilini bilmekte ve kullanmaktadırlar.
Buradan mikrodenetleyici tabanlı tasarımda yol almak için bir yol haritası çizecek olursak:
- Kullandığımız mikrodenetleyiciyi iyi tanımalıyız.Mümkünse az da olsa assembly ile programlama yapmalıyız
- ANSI C ‘yi öğrenmeliyiz.ANSI C öğrenirken ilk başta PC programlama yaparak aşinalık kazanabiliriz.
- Mikrodenetleyici ile ufak projeler yaparak deneyim kazanmalıyız.
İnternetteki bazı arkadaşların “C öğrenmek için kursa gitmeli miyim, bana faydası olur mu?” türünden sorular sorduklarını görmekteyim. Tabiki herkesin kendine has bir öğrenme stili vardır. Ancak şunu belirtmek gerekir ki bu tür kurslarda PC tabanlı programlama anlatılmaktadır. Dolayısıyla mikrodenetleyici programlama ile ilgili kavramlara yer verilmemektedir. Ancak ANSI C dilini öğrenmek için bu tür kurslardan faydalanılabilir. Gerisi de sizin kişisel çabalarınıza bağlı.
Umarım bu yazı bir ölçüde de olsa sizlere faydalı olur. Başka bir yazıda görüşmek üzere…
*C dilinin kullanımına dair örnek bir araştırma:
http://www.ertl.jp/ITRON/survey99/graph-e/lang1.gif
- C programlama dili ile ilgili wikipedia sayfası:
http://tr.wikipedia.org/wiki/C_programlama_dili
Yazı kategorisi: Gömülü Sistemler, Gömülü Yazılımlar | » yorum bırak;