Gömülü sistem, en yaygın tanımı ile belli bir görevi yerine getirmek üzere bir araya gelmiş mekanik, elektronik ve yazılım bütününe verilen isimdir. Bu belirli görev tanımı beraberinde, gerçek zamanlı işlem, düşük güç tüketimi, emniyet kritiklik ve zorlu koşullarda çalışabilme gibi pek çok isteri de beraberinde getirir. Günümüzde ev aletlerinden, uzay mekiklerine kadar sayısız alanda milyarlarca gömülü sistem kullanılmaktadır. Gün boyu farkında olmadan bu sistemlerin onlarcasıyla etkileşime geçmekteyiz.

Bu yazıda, bir gömülü sistem yazılım mühendisinin gözünden gömülü sistem geliştirmenin 7 ana başlığını inceleyeceğiz. Yazıda hedeflenen, profesyonel anlamda çözümleme yapmak değil de teknoloji meraklılarına ve yeni mezun olacak mühendislere gömülü sistem ve gömülü sistem yazılımı geliştirmeye giriş seviyesinde bir bakış açısı kazandırmaktır.

gomulu-sistemler-nedir

Amaç – Algoritmalar

Algoritma bir amaca ulaşmak için adım adım uygulanan çözüme verilen isimdir. PC’de koşması için tasarlanan bir algoritmada genelde performansı göz önünde bulundururuz ancak algoritmanın alt parçalarına çok da önem vermeyiz. Örneğin, OpenCV yardımıyla bir video kaynağı üzerindeki kırmızı nesneyi tespit etmek istesek kabaca ilk yapacağımız görüntünün renk alanını HSV’ye çevirmek olur, çünkü bu biçimlendirme renk tabanlı bölümlemeye daha uygundur[1]. Bu işlemi yapmak için sadece bir metod çağırmamız da yeterli olur.

Ancak, gömülü sistemlerde işlemciden ve/veya işletim sisteminden gelen kısıtlardan ötürü bize yardımcı olacak kütüphanelerden yoksun kalma ihtimalimiz yüksektir. Bu yüzden, tasarladığımız algoritmaya en ince detayına kadar hakim olmamız gerekir. Yukarıdaki örnekteki, kırmızı nesneleri tespit etme işini bir gömülü sistemde yapmak için renk çevirme algoritmasını da gerçekleştirmemiz gerekecektir. Dahası, bu algoritmayı da dökümante etmek ve doğrulamak da işlerimiz arasına eklenecektir.

Ek olarak, algoritmayı tasarlarken sistemde kullanılan işlemcinin veya işlemcilerin güçlü zayıf yönlerini de göz önünden bulundurmalıyız. Bu noktada sadece işlemci değil elektronik kartın tamamına hakim olmak büyük avantaj sağlar. Çünkü, kullanılan belleğin erişim hızı ve bant genişiliği gibi konular da algoritmamızın performansını etkileyecektir.

Özetle, gömülü sistemlerde algoritma geliştirmek çoğu zaman PC’de algoritma geliştirmeye göre daha derinlemesine bilgi gerektirmesinin yanı sıra elektronik kart mimarisi hakkında da farkındalık gerektirir.

İşlemciler

Gömülü sistemlerde çoklukla iki terim kafa karışıklığına sebep olur: mikroişlemciler  ve mikrokontrolcüler.

Mikroişlemciler, sadece merkezi işlemciyi veya işlemcileri bünyelerinde bulundururlar. Bunlardan akla gelen ilk iki işlemci tipi ARM ve DSP’lerdir. ARM tabanlı işlemciler RISC mimarisi ile azaltılmış komut kümesi sayesinde düşük güç tüketimiyle çözüm sunarlar. Diğer taraftan, DSP’ler yüksek güç tüketimiyle yüksek kapasitede sayısal sinyal işlemede çözüm sunarlar. Bu iki işlemci ailesine bir üçüncü olarak, günümüzde sıklıkla kullanılmaya başlanan FPGA’ye gömülebilen işlemcileri de eklemek doğru olacaktır. Ancak bu çözüm, güç ve fiziksel hacim bakımından avantaj sağlamasına rağmen yüksek maliyeti sebebiyle havacılık ve savunma sanayi dışında pek rağbet görmemektedir. ARM ve DPS’lerin beraber kullanıldığı çok çekirdekli işlemciler de gelişmiş gömülü sistem uygulamalarında kullanılmaktadır.

Mikrokontrolcüler ise; RAM, ROM ve giriş/çıkış arayüzü gibi bileşenleri de yonga üzerinde bulundururlar. Mikroişlemcilere göre daha düşük işlem gücüne sahiptirler ancak düşük güç tüketimi, düşük maliyeti ve kompakt tasarımı tercih sebeplerini oluşturmaktadır.

Mikroişlemciler ve mikrokontrolcülere ek olarak ASIC’ler de yoğun olarak gömülü sistem çözümlerde kullanılmaktadır. ASIC’ler programlanamayan sadece belirli bir görevi yerine getirmek üzere tasarlanmış entegre devrelerdir.

Diller

Gömülü sistemlerin yaklaşık %65’i C, %20’si ise C++ ile programlanmakta [2]. C/C++’ın diğer dillere göre tercih edilmesinin iki ana sebebi vardır. Birincisi, C/C++ gömülü sistemlerde çoklukla ihtiyaç duyulan gerçek zamanlı işleme Java ve C# gibi üst seviye dillerden daha uygundur.

İkincisi ise, gösterge aritmetiği (pointer arithmetics) özelliği ile donanıma yakın işlerde daha pratik çözüm olanakları sağlamaktadır.

C++ gömülü sistemlerdeki nesne tabanlı geliştirim ve tasarım örüntülerine olanak sağlamasıyla gömülü sistem yazılımında C’den sonra önemli yere sahiptir. C ise özellikle donanıma yakın, prosedürel çözümler gereken durumlarda vazgeçilmezdir.

Diğer taraftan, gömülü sistemlerin bir noktada doğrulama, veri aktarımı veya başka sebeplerden ötürü PC’lerle veya serverlarla haberleşmesi gerektiği de unutulmamalıdır. Dış dünyada gömülü sistemi dinleyecek yazılımın; Java, C# veya Python gibi üst seviye bir dil ile yazılmasına sıklıkla ihtiyaç duyulur.

İşletim Sistemleri

Gömülü sistemlerin isterlerinin karmaşıklığına göre direkt işlemci üzerinde (bare metal) programlama veya bir gömülü işletim sistemi ile programlama yapılabilir.

İşletim sistemleri,  zaman, görev ve kaynak yönetimini kolaylaştırırlar. Buna ek olarak, hemen hemen bütün gömülü işletim sistemleri gerçek zamanlıdırlar.

Fazla sayıda gömülü işletim sistemi mevcuttur. Bu yüzden, işletim sistemi seçimi çok önem arz etmektedir. İşlemci üreten firmalar, ya gömülü işletim sistemlerini işlemcilerine uygun hale getirmektedir ya da kendileri işletim sistemi yazmaktadır. Birinci duruma örnek, Altera firmasının MicroC/OS-II’yi Nios işlemcisine uygun hale getirmesi verilebilir. İkinci durumun örneği ise, Texas Instruments firmasının DSP mikroişlemcileri ve MSP mikrokontrolcüleri için geliştirdi TI-RTOS’dur.

Diğer taraftan, otomotiv sektöründe görsel özellikleri ve çoklu çekirdek yapısı sebebiyle tercih edilen QNX ve özel sürücüler (driver) geliştirmekten çekinmeyen veya ihtiyaç duyan firmaların tercih ettiği Embedded Linux dağıtımları da çokça kullanılmaktadır.

Eğer gömülü sistem emniyet kritik bir görevde kullanılacaksa Greenhills firmasının geliştirdiği Integrity işletim sistemi veya Windriver firmasının geliştirdiği VxWorks da tercih edilmektedir.

Hata Ayıklama (Debugging)

Hata ayıklama günümüzde PC’lerde olduğu gibi çoklukla kesme noktası (break point) kullanılarak yapılmaktadır. Ancak, gömülü sistem kodu genelde PC’de yazılır ve JTAG adı verilen programlayıcı bir donanım vasıtasıyla gömülü sistem programlanır ve hata ayıklama yapılır.

PC’lerden farklı olarak, özellikle gerçek zamanlı hata ayıklama gerektiğinde, osiloscope adı verilen aletler yardımıyla sinyallerin değişimi izlenerek hata ayıklama da yapılabilir.

Eğer birden fazla sinyalin değerlendirilmesi gerekiyorsa osiloscope yerine logic analyzer adı verilen alet ile hata ayıklama yapılır.

Özetle, osiloscope ve logic analyzer yazılım ile görülemeyecek yüksek hızdaki sinyallerin ve donanım gerçekleştirim detaylarında bulunan sinyallerin incelenmesine olanak sağlar.

Çevre Birimleri ile Haberleşme

Gömülü sistemlerin çoklukla çevre birimlerinden ve duyargalardan veri alıp, bu verileri işledikten sonra ya bir ekran vasıtasıyla göstermeleri ya da üst birime iletmeleri gerekir.

Veri iletiminde iki yaklaşım söz konusudur; senkron ve asenkron. Senkron veri iletiminin en büyük avantajı düşük ekleme maliyeti (overhead) ile veri aktarımıyken, asenkron veri aktarımı da uzak mesafelere veri aktarımı konusunda avantajlıdır.

I2C ve SPI senkron seri veri yolu arayüzü ile yakın çevrede bulunan duyargalar ve çevre birimlerle haberleşilebilmektedir. I2C’nin önde gelen avantajları, anında sisteme eklenebilme ve geri bildirim onaylı gönderimdir. Diğer taraftan, SPI’ın önde gelen avantajları, nispetten basit donanım ve  daha hızlı veri aktarımıdır.

Asenkron veri aktarımı için RS232, RS422 ve RS485 sıklıkla kullanılmaktadır. Bu üç veri iletiminden birincisi olan RS232 diğerlerine göre daha az bağlantı tüketip, daha kısa mesafede haberleşme sağlarken diğer ikisi daha uzun mesafelerde haberleşme sağlamaktadır. RS232 sağlıklı haberleşme mesafesi yaklaşık 15 metre kabul edilirken, diğer ikisinin haberleşme mesafesi yaklaşık 1250 metre kabul edilir. RS232, RS422 ve RS485 çevre birimi haberleşmesi yanı sıra gömülü sistemlerin dış dünya ile haberleşmesi için de kullanılırlar.

Bunların yanı sıra, gömülü sistemlerden ağ oluşturmak için ethernet ve CAN Bus da sıklıkla kullanılılır. CAN Bus otomotiv sanayinde elektronik kontrol birimlerinin hepsini bir veri yolu üzerinden haberleştirmek için kullanılırk. Ethernet yüksek hızlarda ve uzak mesafelerdeki gömülü sistem ve PC’lerle haberleşmek için kullanılır.

Son Söz

Gömülü sistemler sürekli gelişmektedir. Bu gelişim beraberinde yeni kavramlar getirmekle beraber hali hazırdaki kavramların da anlamlarının zaman içinde değiştirmektedir.

Bu baş döndüren süreçte, gömülü sistemleri en iyi anlamanın ve takip etmenin yolu Xilinx, Altera, Freescale ve Texas Instruments gibi önde gelen donanım geliştiren firmaları takip etmek ve bu firmaların sunduğu geliştirme kartlarını edinmektir.  Diğer taraftan,  açık kaynak elektronik kart tasarımı yapan şirket ve vakıflarladan Ardunio, Raspery Pi ve Beagle Board’u da göz ardı etmemek gerekir.

Açık kaynak donanım tasarımlar düşük maliyetli tasarımları hedeflediğinden hobi veya öğrenme amaçlı gömülü sistemlerle ilgilenen kişiler için daha ulaşılabilirdir. Oldukça kolay öğrenilebilen geliştirme ortamlarını arkalarındaki gönüllü topluluk desteği ile beraber ücretsiz sunmaktadırlar.

Yazıyı gömülü sistem alanında yazılım geliştirmek isteyen mühendislere tavsiye ile sonlandırmak istiyorum. Yukarıda, sayılan 7 hususun hepsine hakim olarak mezun olmak oldukça zordur. Ancak, 2 veya 3 tanesini kapsayacak şekilde elle tutulur bir proje gösterebilen mühendisler iş bulma konusunda avantajlı olacaktır. Örneğin, akıllı telefonumla evdeki ışıkları kontrol edebiliyorum veya lego üzerine monte ettiğim motor, webcam ve Beagle Bone yardımıyla evimin içinde web arayüzü yardımıyla gezebiliyorum diyen bir yeni mezun mühendisin iş bulmada veya daha iyisi iş kurmada sahip olacağı avantaj tartışmasızdır.

*Bu yazıda, Internet of things (IoT) ve çok çekirdekli işlemcilere konuyu dağıtmamak adına değinilmemiştir (multi core processors).

 Kaynaklar

İhsan Yalçınkaya

Aselsan

Share on FacebookTweet about this on TwitterShare on LinkedInShare on Google+