"Bare metal" firmware nedir?

taydin

Timur Aydın
Staff member
Katılım
24 Şubat 2018
Mesajlar
14,381
Firmware yazılımları, kategori olarak eskiden normal masaüstü yazılımlardan çok keskin bir şekilde ayrılıyordu. Ama günümüzde işlemciler artık o kadar yüksek performanslı ki, iki yazılım türü arasındaki farklar giderek azalıyor.

Genel olarak firmware dendiği zaman, bir elektronik cihazın içinde çalışan, donanımı doğrudan kontrol eden, gerçek zamanlı çalışan, ve kullanıcı ile doğrudan etkileşim kurmayan yazılımlar akla geliyor. Mesela internet servis sağlayıcının ADSL modeminde bir firmware yazılım çalışır ve bu yazılımı bir kere yapılandırırsın, bir daha da sorun çıkmadıkça ellemezsın. "Firm" burada sabit, değişmeyen, kalıcılığı ifade ediyor.

Firmware yazılımlarda da temelde iki kategori şekilleniyor günümüzde.

1) Bare metal: Herhangi bir işletim sistemi kullanmadan, doğrudan C/C++ ile yazılmış bir program akla geliyor. İşletim sistemlerinin sağladığı birçok kolaylık , örneğin birden fazla görevin paralel çalıştırılması (multithreading), senkronizasyon, gibi şeyler yoktur. Programda görev paylaşımının çok dikkatli bir tasarım ile bizzat programcı tarafından yapılması lazım.

2) RTOS: "Real Time Operating System" kısaltmasıdır. Eğer bir programda, bağımsız birden fazla görevin paralel olarak çalışması gerekiyorsa, bir RTOS kullanılması artık zorunlu hale gelmiş demektir. Bare metal bir firmware'de görev paylaşımı çok zordur. Programcı bunu başarsa bile hata ayıklama çok uzun sürmüştür. Köklü bir değişiklik gerektiğinde bütün hata ayıklama sürecinin tekrar yaşanması gerekir. Ama RTOS ile paralel görevler oluşturmak hem çok kolaydır, hem de oluşturulan görevler için belli zamanlama garantileri vardır. Her göreve bir öncelik tanımlanabilir (priority), düzenli peryotlarla bir görev çalıştırılabilir, iki görev arasında haberleşme ve senkronizasyon sağlanabilir.

MCU'larda son derece yaygın bir kullanımı olan FreeRTOS ile ilgili aşağıdaki siteden ilave bilgi edinilebilir:


Özellikle (eski versiyonu için olsa da) bur RTOS ile ilgili bir giriş niteliğinde olan "Mastering the FreeRTOS Real Time Kernel - a Hands On Tutorial Guide" dokümanı faydalı oluyor.


Bir kere işin temelini gördükten sonra FreeRTOS un kaynak kodu dağıtımında yer alan "Reference Manual" kullanılabilir.
 

taydin

Timur Aydın
Staff member
Katılım
24 Şubat 2018
Mesajlar
14,381
Bir RTOS'u başarılı bir şekilde kullanmak için "multithreading" denen kavram üzerinde belli bir bilgi ve tecrübe gerekiyor. Yoksa 5 tane görev var, başlat bunları çalışsınlar paralel olarak demekle olmuyor. Gerçek bir programda bu görevlerin kendi aralarında mutlaka etkileşim oluyor, hatta sadece görevler değil, görevler ile sistem kesmeleri (interrupt) arasında da etkileşim gerekli oluyor. Bu etkileşimin sorunsuz gerçekleşmesi için multithreading programlamada karşımıza çıkan senkronizasyon yapıları ve metotlarını iyice öğrenmemiz lazım. Bu konudaki dokümanlar her işletim sistemine özgüdür, ama Linux için benim tavsiye edebileceğim kitap, David R Butenhof'un "Programming with POSIX Threads" kitabı


Linux'taki sistemi öğretmekle kalmıyor, genel kavramları da anlatıyor. Bu işi linux için öğrendikten sonra, diğer işletim sistemlerinde aynı bilgiyi kullanabiliyorsun. Tek öğrenmen gereken, aynı işi yapan API fonksiyonunun adını tespit etmek.
 
Top