Gömülü (Embedded) Sistemler ve Bunların Programlanması

Gömülü sistemler ya da embedded system programlama

Bundan önceki yazılarda klasik ve genel anlamıyla programlamadan bahsettik. Ancak önceki yazılarda kabul ettiğimiz programlama çeşidi; üzerinde bir işletim sistemi bulunan, genel bir amaca yönelik cihazlar üzerinde yapılan programlamayı kapsıyor. Ancak programlama dediğimiz kavram, bundan ibaret değil. O yüzden klasik olanın dışına çıkıp o konuya da değinmekte bir fayda olduğunu düşünüyorum.

işletim sistemleri
Kişisel bilgisayarlar veya mobil cihazların büyük bölümü içlerinde bir işletim sistemi barındırırlar. Bu yazılımlar donanımı, diğer küçük yazılımların yerine yönetirler.

Bugün ilan sitelerinde veya internette “yazılımcı” veya “programcı” diye aramalar yaptığınızda; karşınıza çıkacak konunun, genelde “belli cihazlara yönelik” olduğunu göreceksiniz. Programcılar günümüzde; Windows, Linux, Android, IOS gibi işletim sistemlerine yazılımlar üretirler. Bu işletim sistemleri de ya masamızın üstündeki bilgisayarlarda, ya da cebimizdeki/çantamızdaki belli bir takım cihazlarda (telefon, tablet vs) çalışır.

Bu tamamen elektronik cihazların özellikleriyle ilgili bir konu. Evlerimizde kullandığımız bilgisayarlar, biz farketmesek de, binlerce cihaz türünden biri. Çok yaygın olmasına rağmen, programlanabilir tek cihaz değiller. Bunlar genelde X86 dediğimiz bir mimariyle geliştirilen mikroişlemci türlerinin etrafında şekillenmiş bir sistemden ibaret. Bilgisayar nedir? yazımızda bu durumdan biraz bahsetmiştik.

Yine Android, IOS gibi sistemler de farklı bir mikroişlemci yapısına sahip olmasına rağmen, programcı için benzer ortamları oluşturuyor. Burada bir yazılımcıyı, işlemci tipi veya mimarisinden veya cihazın özelliklerinden çok kullanılan “işletim sistemi” ilgilendiriyor. Yani biz programlarımızı işlemcilere, donanımlara veya cihazın çevre birimlerine göre değil, cihazdaki işletim sistemine göre yazıyoruz.

Ancak programlama yaptığımız cihaz her zaman bir işletim sistemine sahip olmayabilir. İşletim sistemi, genelde çok karmaşık hale gelmiş, bir çok donanımsal özelliği bir arada tutan ve artık yönetmesi oldukça zorlaşmış sistemleri yönetmeye yarayan yazılımlardır. Esasında işletim sistemlerinin kendisi de bir gömülü yazılım kabul edilebilir. Örneğin Windows işletim sistemi bize sadece BAŞLAT menüsü sunmak veya PAINT için bilgisayara yüklenmez. Windows; işlemci, ram, kartlar, çevre birimleri gibi bir çok elektronik parça üzerinde çok karmaşık işlemler yapan ve bu cihazları yöneten bir yazılım aynı zamanda. Hem cihazları yönetiyor, hem belli bir amaca yönlendiriyor, hem kullanıcıya bazı özellikler sunuyor hem de programcıya bilgisayara bağlı cihazlarla ilgili bir çok özellik sunuyor.

İşte gömülü yazılım kavramına buradan başlayabiliriz. Bilgisayarımızda Windows, telefonumuzda IOS/Android olmasaydı; o cihazla ilgili en ufak bir işlem yapabilmek için mikroişlemci üzerinden cihazın bütün donanımı ile haberleşmemiz gerekecekti. Kullanıcı klavyenin bir tuşuna dokunduğunda, mikroişlemciyi yöneten programımız gidip ilgili sinyali yorumlamak ve sinyalin özelliklerine göre karar vermek zorunda kalacaktı. Binlerce klavye çeşidi, bu klavye çeşitlerinin her birinin farklı davranış şekilleri vs olduğunu düşündüğümüzde; programcılık oldukça zor bir hale gelecekti. Ve bugün bir kaç günde yazdığımız bir programı hazırlamak aylar alacaktı. O yüzden işletim sistemleri hayatımızda önemli bir yer kaplıyor.

Ama programlama hayatımız boyunca her zaman işletim sistemine sahip bir cihazla karşılaşmayabiliriz. Daha basit, daha küçük ve daha ucuz bir çok cihaz işletim sistemine sahip değildir. Örneğin evimizdeki televizyon, kumandadan bastığımız tuşlara göre kararlar verir. Kanal listeleri saklar, isimlendirir, sıralar vs. Hatta çoğu bugün internete bile giriyor. Bu televizyonların, karasal yayın izletmek dışında bir işlevi varsa, bunu çoğunlukla içlerindeki mikroişlemcilere ve destekleyen birimlere borçlular.

microcontroller
Mikrodenetleyiciler, çok küçük bir boyutun içinde mikroişlemci, bellek gibi çeşitli elemanları içerebilirler.

Burada küçük bir ayrıntıya değinmemiz gerekiyor. Biz bilgisayarlarımızda, bilindiği gibi, mikroişlemciler kullanıyoruz. Intel, AMD gibi firmalar bilindik üreticiler. Mikroişlemci kendisine verilen veri ve komutları yorumlayıp sonuç üreten bir devre elemanı. Yine bildiğiniz gibi, bu mikroişlemciyi bir anakarta, ram ve rom gibi belleklere vs bağlayarak bir bilgisayara sahip olmuş oluyoruz. Bu yazıda bahsettiğimiz programlanabilir cihazlar ise; bunların bir çoğunu kendi içinde barındırıyor. Üreticiler, bir işlemciyi, ram’i, rom’u vs küçük bir çip içinde birleştirip bunu bir mikrodenetleyici haline getiriyor. Yani koca bilgisayarı, alıp 1-2 cm içine sıkıştırıyorlar. Haliyle bilgisayarımızdan çok daha az yeteneğe sahip ve daha yavaş oluyor bu çipler. Ancak bir çok özelliği de içinde barındırmadıklarından, büyük bir işletim sistemi tarafından bir çok işlemle yorulmadıklarından dolayı da bu açıklarını kapatıyorlar. Ve bir bilgisayardan çok daha ucuz hale geliyorlar. Belli bir amaca yönelik mantıksal işlemleri yapmaya yönelik olarak üretilip başka sistemlerin içine yerleştiriliyorlar. Bulaşık makinemizin ne zaman su alacağına, ne zaman boşaltacağına bu küçücük bilgisayarlar karar veriyor. Bunu da çevreden aldıkları veriler ve içlerinde barındırdıkları komutlarla yapıyorlar.

İşte bir işe veya amaca yönelik özel olarak hazırlanmış donanımlar için yazılım geliştirmeye genelde “gömülü sistemlerin programlanması” ismi verilebilir. Bu tür programlar, haliyle bir çok donanım çeşidi olduğu için çok çeşitli şekillerde yapılabiliyor. Ama benim aklıma ilk gelenler; PIC programlama, PLC programlama ve Arduino gibi cihazları programlama. Hemen bunları biraz detaylandırayım.

 

microchip
PIC programlamaya muhatap olan mikrodenetleyiciler genelde Microchip firması tarafından üretilir.

PIC Programlama
Microchip firması tarafından üretilen bir mikrodenetleyici tipi olan PIC serileri için program yazmaya verilen genel isim. Başka mikrodenetleyici tipleri de artık bu kapsama girse de, PIC ifadesi genel kullanımda yaygınlaşmıştır. Bu konuyu hiç detaylandırmayacağım. Çünkü PIC programlama, uzmanlık gerektiren, özel kartlar gerektiren bir alan. Bu aşamada bu konu bizim için gereksiz bir yük olacaktır. Ayrıca, şahsi olarak PIC programlamanın geleceğini de çok parlak görmüyorum.

AVANTAJLARI: Ucuzlar. Ve hızlılar.

DEZAVANTAJLARI: Programlamayabilmek için pahalı donanım ve yazılımlar gerektiriyorlar.

 

PLC Programalama

PLC
Siemens, önemli bir PLC üreticisidir.

PLC’ler ise yukarıda bahsettiğimiz mikrodenetleyicilerin daha da geliştirilmiş halidir. Bu cihazlar içlerinde mikrodenetleyiciler ve başka bir takım elektronik elemanlar bulundururlar. Endüstriyel şartlar için üretilmişlerdir. Hatta günümüzde bunlara “endüstriyel alanda kullanılmak için üretilmiş, monitör ve klavye içermeyen PC” bile diyebiliriz. Daha çok küçük cihazlar için değil, büyük endüstriyel sistemler için (konveyörler, robotlar vs) kullanılırlar. Kendi yazılım standartları vardır. Şemalar, bloklar şeklinde programlama araçları olduğu gibi, kendine has bir metin dili ile de programlanabilir. Ancak, şahsen PLC’nin de geleceğini pek parlak görmüyorum.

AVANTAJLARI: Sağlamlar. Endüstriyel koşullara (ısı, nem vb) çok dayanıklılar.

DEZAVANTAJLARI: Pahalılar.

 

Arduino

Arduino
Arduino kartların zaman içinde bir çok farklı modeli çıkmıştır.

Arduino gibi elektronik devreler ise, günümüzde gömülü yazılım teknolojisini oldukça değiştirdiler. Genelde ATMEL firmasının ürettiği mikrodenetleyicilerin kullanıldığı kartlara, kolay programlama yapabilmeyi sağlayan bazı eklemeler yapılarak üretilmiş kartlardır Arduino kartları. Bu kartın özellikleri sayesinde, ATMEL’in bu mikrodenetleyicilerine işler yaptırmak için PIC programlamaya ihtiyaç kalmamıştır. Bu avantajları sayesinde de dünyanın her yanında çok yaygın bir şekilde kullanılmakta.

AVANTAJLARI: Ucuzlar. Programlayabilmek çok kolay. Yaygın araçları sayesinde bir çok karmaşık donanımsal işlemi azıcık kodla yönetebilir hale getiriyorlar programcıyı.

DEZAVANTAJLARI: Mikrodenetleyiciyi direkt olarak programlamadığımız için bir miktar daha yavaşlığı ve güç tüketimini göze almak gerekiyor.

 

Raspberry Pi Vb

Raspberry pi
Raspberry PI, kendi başına küçük bir PC olarak nitelenebilir.

Burada Raspberry Pi’den bahsetmeden olmaz diye düşündüm. Ama bu ve vb donanımlar, yukarıdaki seçeneklerden farklı. Bunlar için program yazmayı “gömülü programlama” olarak düşünmüyorum. Bu cihazlar, esasında, mini bir bilgisayar. İşletim sistemleri var. Ve kendine özel kuralları olmasına rağmen, bir masaüstü bilgisayara program yazmaktan çok da farkı yok bu cihazlara program yazmanın. Sadece çok daha küçükler. Ve çevreleriyle iletişime geçmelerini kolaylaştıran giriş ve çıkış kanallarına sahipler.

AVANTAJLARI: Bir bilgisayarın sahip olduğu hemen her yeteneğe sahipler. Ben evde, yatak odamdaki eski televizyonunun arkasına bir Raspberry Pi bağlayarak, televizyonu akıllı hale getirdim. Ve küçükler haliyle.

DEZAVANTAJLARI: Rakibi olarak niteleyebileceğimiz Arduino’ya göre çok daha pahalılar. Ve özellikle Arduino Nano gibi kartlara göre çok daha fazla yer kaplıyorlar.

 

Bu yazıyı yazmamdaki amaç, yukarıdaki seçeneklerden özellikle Arduino ile çok fazla ilgileniyorum. PLC ile ilgili de bazı eğitimler aldım ama özellikle gerekmedikçe çok da ilgilenmek gereken bir alan olduğunu düşünmüyorum. Benim bakış açıma göre, bir yazılımcı, donanımdan çok iyi anlamalı. Elektronik hakkındaki bilgimiz, en azından yeni mezun bir elektronik mühendisi seviyelerine ulaşmalı. İşte benim elektriği ve elektroniği anlamama; Arduino çok katkıda bulunuyor. Arduino ile ilgili daha fazla bilgi paylaşımı da yapacağım ileride. O yüzden, programcılık işine girecek kardeşlerime, Arduino’yu da çok pahalı olmayan bir hobi olarak tavsiye ederim, kesinlikle.

 

Bu tür cihazların detayına daha sonra gireceğimizi söyledik. Ama örnek bir sonucu aşağıdaki videoda görebilirsiniz. Bir Arduino kart kullanarak, bir kaç elektronik cihaz ve bir 3d printer yardımıyla; aşağıdaki robotu evde yaptım. Robotun dans mı edeceği, yürüyüş mü yapacağı, tek ayak üstünde mi bekleyeceği ise tamamen yazılımcının hayal gücü ve bilgisi ile sınırlı. İlerleyen bölümlerde bu blog’da nasıl yapıldığını da paylaşırım ama bu cihazların yapabilecekleri açısından, bir fikir vermesi için yaptığım bir robotun dans videosunu da buraya ekliyorum:

 

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir