Bir şeyler programlamaya Arduino ile başlamış olabilirsiniz. İşlerin nereden gelip gittiğine kısaca bakmakta fayda var. Bilgisayar denilince aklımıza kullandığımız klavyesi ve faresi olan sıradan PC’ler gelse de dünyada birçok yerde işlemciler çalışıyor. İşte bu işlemciler elektronik devrelerin içerisinde beyin olarak çalışıyorlar. Hani araba tamircilerinin dediği gibi “abi arabanın beyni bozulmuş!”
Bugün elektronikte de bir cihaz tasarlarken devrelerin içerisinde işlemciler daha doğrusu mikrodenetleyiciler yer alıyor. Mikrodenetleyici de içerisinde işlemci, bellek, giriş çıkış devreleri vs.. içeren tek çiplik bir bilgisayar aslında. Bu mikrodenetleyiciler içerisindeki yazılımlarla belirli işleri yerine getiriyorlar. Demek ki bunlarda bir de yazılım giriyor işin içine. Bunlara “gömülü yazılımlar” deniliyor. İngilizcesi Firmware ya da embedded software olarak geçiyor.
Bu mikrodenetleyicilerin temel çalışma mantığı dijital elektronik / mantık devreleri, lojik devreler gibi değişik adlarla bilinen ama temel mantık, mantık kapıları, flip-floplar, Karnaugh diyagramları, durum makinaları gibi konuları içeren derste gördüklerimize dayanıyor. Bu dersi alıyorsanız veya alacaksanız iyice öğrenmeye bakın.
Yazılım dediğimiz şey de aslında bir dijital devrenin belirli işleri yapması için şartlandırılması. Konuştuğumuz şey mantık devreleri olduğuna göre ve dijital elektronik de ikili mantık (Boolean cebri) üzerine kurulu olduğundan aslında yazılım dediğimiz şeyler birler ve sıfırlardan oluşuyor. (Hep duyduğumuz geyik). Ama yüzlerce, binlerce, milyonlarca satır 1 ve 0 dizileri ile uğraşmak biz insan beyni için oldukça yorucu ve sıkıcı bir hal alıyor. Burada soyutlama denilen kavram devreye giriyor.
[ad#ad-1]
TDK Tanımı: “Bir nesnenin özelliklerinden veya özellikleri arasındaki ilişkilerden herhangi birini tek başına ele alan zihinsel işlem, gerçeklikte ayrılamaz olanı düşüncede ayırma.”
Vikipedia Tanımı: Soyutlama, bir kavramın bilgi içeriğini azaltma veya indirgeme sürecine denir. Bu indirgeme, çoğunlukla belirli bir amaç için gerekli olan bilginin daha rahat elde edilebilmesi için yapılır
Yani soyutlama bize karmaşık şeyleri biraz daha anlaşılır hale getirmeye yarıyor.
Sürekli şu satırlarla uğraştığımızı düşünelim:
10101011 011101 11111 01 010 10 010 11000 1 0100 0 0 1101000100
10101111 011111 10101 01 010 10 010 11000 1 0010 0 0 1101010000
10111011 011101 10000 01 010 10 010 11000 1 1000 0 0 1101001010
Sallayarak yazması bile çok sıkıcı. İşte bu nedenle bu kodlara sembolik isimler vererek yazalım sonra bunları tekrar dijital işlemcinin anlayacağı hale birisi çevirsin (ama kim) denilmiş.
Durum şöyle bir hal almış:
MOV A,B
INC B
MOV B,A B
ADD A,C
(Kaydedici / Register diye birşeyi henüz duymadıysanız muhtemelen dijital elektronik dersini henüz almadınız. Alınca görürsünüz ve bu yazıyı hatırlayın o zaman)
İşte bu sembolik dile de “Assembly” dili deniliyor. Bir “assembler” yazılımı bu kodları alıp yine işlemcilerin anlayacağı 1,0 dizilerine çeviriyor. Yani yazılımı yazılıma çevirtiyoruz yine. Buradaki sembolik dil biz insanların anlaması için geliştirildi. Yoksa işlemcilerin anladığı sadece 1 ve 0. Tabi bu 1 ve 0 konusu da başka bir soyutlama katmanı aslında.
İşte bu noktada yavaş yavaş “elektronikçilerin dijital devrelerini şartlaması” olarak başlayan işlemler zamanla “yazılımcılığa” ve “bilgisayar bilimlerine” dönmeye başlıyor. Bu noktadan sonra 2 farklı yola ayrılıyor:
- Yol 80’li yıllardan sonra kişisel bilgisayarların yaygınlaşması ile PC programcılığı şeklinde ilerliyor.
- Yol ise mikrodenetleyicilerle beraber elektronik devre yazılımları / gömülü yazılımlar olarak devam ediyor.
PC programcılığı soyutlamanın dozu o kadar artıyor ki artık üst seviyede program yazan bir programcının alt seviye ile neredeyse hiç alakası kalmıyor. Yani örnek verecek olursak bugün bir web yazılımı geliştiren bir yazılımcı üzerinde çalıştığı bilgisayar ya da cihazın işlemcisine dair en ufak birşey bilmeyebiliyor. Bu onun işini yapmasını da engellemiyor. Çünkü aradaki soyutlama katmanı ve çevirmen yazılımlar sayesinde (derleyiciler, çatılar (framework ) işini yapıyor.
İkinci yol olan ve bizim de çalışma alanımızı içeren gömülü sistemler ise farklı bir şekilde ilerliyor. Buradaki soyutlama katmanları daha yavaş şekilde ilerliyor. 80’lerden 90’lı yılların sonuna kadar 8 bit mikrodenetleyicilerin hakimiyetinde ve assembly dillerinden bir seviye daha yukarıda olan C dili ile programlanan sistemler olarak devam ediyor.
Günümüz (Arduino, mbed ve diğerleri)
Soyutlamada bir sonraki katmana geçerek donanım soyutlama katmanı içeren platformların sayısı da giderek artıyor. Arduino bunların en çok bilinen örneği oldu. Soyutlama katmanının ne olduğunu şu yazımda anlatmıştım oraya bakmanızı tavsiye ederim.
Arduino nereden çıktı dersek aslında gömülü yazılım geliştirme işleri nasıl oluyor bunlara kısaca bakmaya başlayabiliriz.
Buralara nasıl gelindi?
Başlangıçta 1 ve 0 sıfırlarla başlamış işlemcileri sonrasında assembly diliyle programlandığından bahsettik. Sonrasında büyük oranda C programlama diliyle programlamaya geçildi.
Mikrodenetleyicileri programlarken temeldeki derdimiz istediğimiz işleri yapmak olduğundan önce çevrebirimlerinin çalışmasını yönetecek sürücüleri yazmak gerekiyor. Sonrasında bu sürücüleri kullanan uygulama yazılımlarını geliştiriyoruz. Kişisel bilgisayarların programlanmasında kullanılan araçlar oldukça hızlı gelişirken maalesef gömülü sistem programlama araçları belirli firmaların çok da gelişmiş olmayan araçlarıyla devam ediyordu (kısmen halen böyle). Yakın zamanda ARM firmasının bünyesinde bulunan Keil Microvision yazılımına kod tamamlama özelliği bile yeni eklendi. Böyle komik durumlar yaşanıyor.
Yeni bir mikrodenetleyici ailesiyle çalışmaya başlamak o ailenin programlama araçları, çevre birimlerinin özellikleri (ve gıcıklıklarına) aşina olmak için belirli bir öğrenme yatırımı yapmayı gerektiriyor. Zamanla kullanılan mikrodenetleyici için yazılan sürücüleriniz ve kütüphanelerimizin birikmesi ile işlerimiz daha kolaylaşırdı. Yakın zamana kadar herkesin kendi sürücülerini ve kütüphanelerini oluşturup bunları da “gözü gibi saklanması” şeklinde devam eden çalışmalar dünyada açık kaynaklı donanım ve yazılım hareketleri ile farklı bir mecraya doğru ilerledi.
[ad#ad-1]
Açık kaynaklı yazılımların hızlanması Linux işletim sistemi ile oldu diyebiliriz. 90’li yılların başında Finlandiyalı yazılımcı Linus Torvalds’ın başlattığı çalışma bugün dünyada en çok kullanılan ve açık kaynak kodlu işletim sistemi haline geldi. Tabii ki bu bir tek insanın çalışmasıyla değil dünyanın her yerinden yazılımcıların katkısı ile bugünlere geldi.
Açık kaynaklı yazılımlardaki hareketin benzeri de Arduino adlı platformla beraber donanım alanında da görülmeye başlandı. Şimdi biraz Arduino hareketinin çıkış noktasına bakalım.
Arduino nereden çıktı?
Processing, 2001 yılında MIT Media Lab‘de çalışan Casey Reas ve Benjamin Fry tarafından, programlamayı görsel bir şekilde öğretmek amacıyla tasarlanmış bir programlama dili ve geliştirme ortamı. Java tabanlı olan platformda kolay bir şekilde programlama yapılabilmekte ve görsel programlar kolaylıkla oluşturulabiliyor.
Wiring projesi de İtalya’daki Ivre Tasarım enstitüsünde yüksek lisans öğrencisi olan Hernando Barragán tarafından 2003 yılında, mikrodenetleyici programlamayı kolaylaştıran bir platform olarak tasarlandı. Yazılım geliştirme ortamı olarak da Processing’i kullandı.
Processing ve Wiring projelerinden sonra Arduino projesi de bu temeller üzerinde 2005 yılında yine İtalya’daki Ivre tasarım ensitütüsündeki birkaç hoca ve tasarımcıdan oluşan ekiple oluşturuldu.
Arduino temel olarak Atmel firmasının mikrodenetleyicileri üzerine yazılmış bir donanım soyutlama katmanından ve Processing temelli bir geliştirme ortamından ibaret. Ancak popüler hale gelmesiyle Arduino sanki bir mikrodenetleyici modeliymiş gibi anılmaya başlandı. Bu da “PIC mi Arduino mu” tarzı anlamsız karşılaştırmaların doğmasına sebep oldu.
Arduino kolaylığı sayesinde o kadar popüler oldu ki birçok kişi için “mikrodenetleyici = Arduino” gibi bir anlam ifade etmeye başladı. Ayrıca mikrodenetleyici pazarı için çekici bir hale gelmesinden dolayı büyük üreticiler de bu akıma çok fazla kayıtsız kalamadılar. Öyle ki artık çıkardıkları geliştirme / deneme kartlarını Arduino formunda tasarlamaya başladılar. Ayrıca ARM firması da mbed adlı bir platform ile Arduino benzeri bir şeyi ARM temelli mikrodenetleyiciler için oluşturdu. Mbed de Arduino ‘ya benzer şekilde ARM – Cortex – Mx tabanlı mikrodenetleyiciler üzerine yazılmış bir donanım soyutlama katmanı ve online bir derleyiciden oluşuyor. Son dönemde ARM, mbed platformunu komple bir “nesnelerin interneti geliştirme platformu”na çevirmeye başladı.
Bugünkü Durum
Günümüzde üretilen 100 işlemcinin 98’i gömülü sistemlerde kullanılıyor. Bu işlemciler / mikrodenetleyiciler günlük hayatımız içerisinde sessiz sakin bir şekilde çalışmaya devam ediyorlar.
Wikipedia’daki linkte otuzun üzerinde mikrodenetleyici üreticisi listeleniyor. Tabii ki bütün bu üreticiler arasında birkaç tanesi pazarın çoğunluğuna sahip.
“Elindeki tek şey çekiç olana, her şey bir çivi gibi görünür!”
Linkler:
History of Processing: http://benfry.com/writing/archives/513
https://en.wikipedia.org/wiki/Processing_(programming_language)
https://en.wikipedia.org/wiki/List_of_common_microcontrollers
mbed platformu: mbed.org
Arduino web sitesi: arduino.cc
https://en.wikipedia.org/wiki/List_of_common_microcontrollers
ARM Cortex – M serisi: http://www.arm.com/products/processors/cortex-m/
[ad#ad-1]
Çok güzel bir makale olmuş.Bir elektronikçi olarak zevkle okudum ve katılıyorum.Tebrik ederim.
Öğr.Gör.Ahmet Loğoğlu
Osmaniye korkut Ata Üniversitesi
Osmaniye MYO
Teşekkürler.
Teşekkürler çok bilgilendirici bir yazı olmuş. Ancak benim anladığım arduino içinde atmel işlemci kullansa bile ücretsiz geliştirme ortamı sunuyor değil mi bu bir nevi özgürlük, ancak mbed geliştirme ortamının ise ücretsiz versiyonu kısıtlı değil mi?
Bu makaleye Kayıtsız kaalmayıp bende bir yorum yapmak istedim. Gerçekten çok güzel zevkle okuduğum bir makale oldu. Şimdi diğerlerinde sıra. Teşekkürler.
Teşekkürler çok bilgilendirici bir yazı olmuş. Ancak benim anladığım arduino içinde atmel işlemci kullansa bile ücretsiz geliştirme ortamı sunuyor değil mi bu bir nevi özgürlük, ancak mbed geliştirme ortamının ise ücretsiz versiyonu kısıtlı değil mi?
Çok güzel bir makale olmuş.Bir elektronikçi olarak zevkle okudum ve katılıyorum.Tebrik ederim.
Öğr.Gör.Ahmet Loğoğlu
Osmaniye korkut Ata Üniversitesi
Osmaniye MYO
Teşekkürler.
Teşekkürler.
Bu makaleye Kayıtsız kaalmayıp bende bir yorum yapmak istedim. Gerçekten çok güzel zevkle okuduğum bir makale oldu. Şimdi diğerlerinde sıra. Teşekkürler.