Gömülü Yazılımın Temelleri: Middleware nedir?

Bu hafta çoğu kişinin yanlış fikir sahibi olduğunu düşündüğüm bir konu üstünde olmayı akıl ettim. Keyifli okumalar dilerim.

Gömülü sistemler için middleware kavramı, uygulama programlama arabirimi oluşturmamızı sağlayan ara yazılım katmanı olarak nitelendirebiliriz. Middleware katmanına örnek olarak populer olarak bilinen FreeRTOS ‘u sayabiliriz. Fakat middleware olarak gömülü sistemlerde ücretli ve ücretsiz olarak birçok middleware katmanı mevcuttur. Bu middleware katmanları kullanım alanlarına göre geliştirilmiş yazılım katmanlarıdır. Popülaritesine göre bazı middleware yazılımlarını aşağıya listeyebiliriz.

FreeRTOS: Başta ARM olmak üzere birçok yarı iletken firması ile ortaklığı bulunan ve Amazon’un sahibi olduğu Real-time işletim sistemidir. Açık kaynak olması nedeni ile FreeRTOS pazar payı en yüksek Real-time işletim sistemlerinden biridir.

Azure RTOS/ ThreadX: Azure RTOS eski adıyla ThreadX, Express Logic firmasının 90’ların sonlarında geliştirmeye başladığı ve 2019’da Microsoft tarafından satın alınan Real-time işletim sistemidir. Azure genel amaçlı bir RTOS olamasının yanında uygulama olarak kendini kanıtlamış bir middleware olarak sayabiliriz. Ayrıca FreeRTOS kadar çiplerde kullanıcı desteği mevcuttur.

QNX: Middleware katmanın dedelerinden olan QNX, 1980’lerin başlarında ilk sürümünü yayınladı. Zaman içeresinde diğer gömülü olan ve olmayan birçok işletim sistemi desteği sundu. Ayrıca Eclipse’in kurucu üyelerinden biri oldu. Günümüzde “Security” ve “Safety critical” gereksinimli alanlarda kullanılmaktadır. Bu nedenle otomotiv sektörün büyük bir kısmında QNX işletim sistemi vardır.

embOS: Embedded dünyasında 90’ların başında kurulan Segger firması tarafından yayınlanan embOS Real-time işletim sistemi, “Safety critical” ve “Security” kullanılmaktadır. Bu nedenle medikalden tutun otomotiv’e kadar birçok alanda kullanılmaktadır.

Farkettiyseniz verdiğim örneğin birçoğu RTOS middleware örneği idi. Middleware kavramını bakış açımıza göre örneğin RTOS ve GPOS(General Purpose Operating System) şeklinde ayırabiliriz. Başka bir amaçla ise uygulama alanına göre “General use”, “IOT”, “Security”, “Safety critical” olarak middleware’ları ayırabiliriz. Bu nedenle middleware demek RTOS demek yanlış bir anlayış olur.

Gömülü Yazılımın Temelleri: HAL ve API nedir?

Öncelikle bu benim ilk yazım olduğunu belirtmek isterim. Kendime hedef koyarak, her hafta 1 adet konu yazmaya çalışacağım. Şimdiden sürç-i lisan ettiysem affola.

Eskiden nasıl gömülü yazılım yazılırdı hiç merak ettiniz mi? Eskiler elbet biliyordur. Günümüzde bu kadar piyasaya oturmuş mikrodenetleyici yoktu. Mikro kontrolcü piyasaya çıkar ve driver verilir gerisi sizden beklenirdi. Datasheetlerden registerlar hatim edilir projeler böyle ilerlerdi.

HAL dediğimiz zaman açılımı ile “Hardware Absraction Layer” diye açıyoruz ve “Donanım Soyutlama Katmanı” diye hemen türkçeye çeviriyoruz. HAL’ın geçmişine bakınca ilk işletim sistemlerinden sonra oluşan ihtiyaçtan kaynaklı olarak HAL kavramının oluştuğunu anlıyoruz. İlk işletim sistemlerinde HAL kavramı yoktu ve donanıma göre işletim sistemi yazılıyordu. Düşünsenize yazılımcı her bir donanımın nasıl çalıştığını bilmek zorunda. Yazılımcıların donanımı bilmeden donanıma şunu yap dediğinde onu yapan bir kütüphane dizini oluştursak yani Driver’ların üstüne bir katman çıksak nasıl olur demiş bir yazılımcı abimiz yada ablamız. Buna da HAL diyelim demişler.

Geldik şimdi API nedir düşüncesine. HAL ile gömülü programlamaya nasıl bir kolaylık kazandırdığını gördük. Bu noktadan sonra gömülü programlamayı karmaşık işler için daha kolay hale gelmek için Real-time olan ve olmayan işletim sistemleri yazılması akıl edilmiş. Bu şekilde uygulama kodu anlaşılabilir düzeyde implement edilebilir ve birbirine bağlı veya önem öncelikli tasklar kurulabilir. Bu temel özellikleri bize sağlayan fonkiyon dizinlerine API (Application Programming Interface) yani “Uygulama Programlama Arayüzü” adını kullanıyoruz.

Fügür 1: Mikro denetleyicinin Gömülü Yazım Katmanları

Sonuç olarak baktığımızda, HAL ile API katmanları birbirine çok benzer katmanlar olsa da HAL düşük seviyede donanımı bize register seviyesinde bilmeden kullanmamızı sağlamaktadır. API ise uygulama kodunu şekillendirmemizi ve gömülü seviyesinde algoritmayı kurmamızı sağlar.