Gömülü yazılım, belirli bir cihazın içinde, o cihazı çalıştırmak için duran yazılımdır. Bilgisayarda değil, kartın üzerinde yaşar ve tek bir işi vardır.
Kısa cevap
Bir asansör kumanda kartı, bir su sayacı, bir kartlı geçiş terminali, bir sensör düğümü. Hepsinin içinde bir işlemci ve o işlemcinin ne yapacağını söyleyen bir yazılım var. İşte o yazılım gömülü yazılım.
Masaüstü ya da web yazılımından ayıran şey, çalıştığı yerin sabit ve sınırlı olması. Ekranı yok, klavyesi yok, çoğu zaman kullanıcısı bile yok. Kendi başına açılıyor, kendi başına çalışıyor ve kimse müdahale etmediği sürece yıllarca aynı işi tekrar ediyor.
Bunun pratikteki karşılığı şu: bir hata olduğunda kullanıcı ekranda bir uyarı görmüyor. Cihaz sessizce yanlış davranıyor ve bunu genelde çok sonra, rapordaki bir tutarsızlıktan fark ediyorsunuz.
Firmware ile arasında fark var mı
Kısa cevap: pratikte yok.
Firmware kelimesi daha çok cihazın kalıcı belleğine yazılmış, kolay değiştirilmeyen katmanı anlatmak için kullanılıyor. Gömülü yazılım ise daha geniş bir terim, cihazın üzerindeki bütün yazılımı kapsıyor. Sahada bu ayrım silinmiş durumda ve iki kelime aynı şeyi anlatmak için kullanılıyor.
Terim tartışmasının önemli olduğu tek nokta ihale ve şartname metinleri. Orada da ayrım teknik değil idari: kimin neyi teslim edeceğini belirlemek için kullanılıyor. Bu yüzden kapsamı kelimeyle değil, teslimat listesiyle tanımlamak gerekiyor.
Normal yazılımdan farkı: hatanın bedeli
Bir web uygulamasında hata bulunur, düzeltilir, aynı gün yayına alınır. Kimse bir yere gitmez.
Sahaya dağıtılmış bin cihazda aynı hata bambaşka bir şey. Düzeltmenin kendisi belki yarım gün sürüyor ama o düzeltmenin cihazlara ulaşması ayrı bir proje. Cihazlar birbirinden uzakta, bazıları zor erişilen yerlerde, bazıları çalışırken durdurulamayacak hatlarda.
Bu yüzden gömülü yazılımda tasarım kararları baştan doğru verilmek zorunda. Sonradan düzeltme imkanı teorik olarak var, pratikte pahalı.
İkinci fark kaynak sınırı. Cihazın işlemcisi, belleği ve gücü belli. Bilgisayarda fark edilmeyen bir savurganlık, kartın üzerinde doğrudan pil ömrü olarak geri geliyor.
Üçüncü fark ise cihazın kendi başına ayakta kalmak zorunda olması. Kimsenin yeniden başlatmadığı bir yerde, bağlantı koptuğunda ne yapacağına kendisi karar vermesi gerekiyor.
Gömülü yazılım aslında neye karar veriyor
Kod yazmanın ötesinde, gömülü yazılım cihazın davranışını tanımlıyor. Birkaç örnek bu işin ne olduğunu somutlaştırıyor.
Cihaz ne zaman uyanacak, ölçümü ne sıklıkla alacak ve ne zaman tekrar uyuyacak. Pille çalışan bir cihazda bu üç karar, pil ömrünü donanım kadar belirliyor.
Bağlantı koptuğunda veri ne olacak. Tanımlanmamışsa veri kayboluyor ve en kötüsü, eksik olan şey raporda görünmediği için kimse fark etmiyor. Tanımlıysa veri cihazda bekliyor, hat geri geldiğinde tamamlanıyor.
Cihaz kendi durumunu bildirecek mi. Çalışma süresi, hata sayısı, bağlantı kalitesi ve üzerindeki sürüm bilgisi merkezden görülebiliyorsa, arızayı müşteriden önce siz fark ediyorsunuz.
Ve en pahalısı: cihaz sahaya çıktıktan sonra güncellenebilecek mi. Bu, sonradan eklenmesi zor bir yetenek. Baştan kurgunun içinde değilse, her güncelleme için araç yola çıkıyor.
Sahada en sık çıkan başlıklar
Bize gelen işlerin çoğu sıfırdan geliştirme değil, tıkanmış bir cihazın devralınması oluyor ve şikayetler birbirine benziyor.
Birincisi güncelleme masrafı. Yüz cihazlık bir kurulumda küçük bir iyileştirme bile haftalar süren bir saha turuna dönüşüyor ve her seferinde aynı masraf tekrar ediyor.
İkincisi kaynak kodun elde olmaması. Cihazı yaptıran firma, üzerindeki yazılımın kaynağının kendisinde olmadığını genelde bir değişiklik gerektiğinde öğreniyor. O noktada küçük bir düzeltme bile başka bir firmaya bağımlı hale geliyor.
Üçüncüsü sahada kilitlenen cihazlar. Ofiste günlerce sorunsuz çalışan yazılım, sahada haftada bir takılıyor. Sebep bulunamayınca cihaza zamanlayıcı takılıp düzenli olarak yeniden başlatılıyor. Bu, sorunu çözmüyor, görünmez kılıyor.
Dördüncüsü pil ömrünün hesaplananın altında kalması. Sebep genelde donanımda değil, yazılımın cihazı gereksiz yere uyanık tutmasında.
Beşincisi farklı sürüm taşıyan cihazlar. Hangi cihazda hangi sürümün çalıştığı kayıtlı değilse, arıza aramak gereksiz yere uzuyor.
Kim yazıyor, neden önemli
Gömülü yazılımı donanımı görmemiş bir ekip de yazabilir. Sonuç genelde kağıt üzerinde doğru, sahada kararsız çalışan bir yazılım oluyor.
Sebebi şu: kartın nasıl davrandığını, hangi koşulda ne kadar akım çektiğini ve cihazın duracağı yerdeki gerçek sıcaklık ile bağlantı kalitesini bilmeden verilen kararlar, laboratuvar koşullarına göre veriliyor. Saha laboratuvar değil.
Bu yüzden donanım ve yazılım tarafının aynı masada olması, gömülü işlerde tercih değil gereklilik. Aksi halde bir sorun çıktığında iki taraf birbirini gösteriyor ve asıl kayıp o tartışmada yaşanıyor.
Bir cihaz üreticisinde nasıl görünüyor
Not: Aşağıdaki örnek gerçek bir müşteriye ait değildir; sahada sık karşılaşılan durumlardan oluşturulmuş bir senaryodur.
Endüstriyel bir ölçüm cihazı üreten bir firma. Cihazı kendisi tasarlatmış, yazılımını da dışarıdan bir ekibe yaptırmış. Ürün üç yıldır satılıyor ve sahada birkaç yüz adet var.
Sorun bir müşteri talebiyle başladı. Raporlama tarafında küçük bir değişiklik istendi, firma bunun birkaç günlük iş olduğunu düşündü.
Yazılımı yazan ekibe ulaşılamadı. Kaynak kod teslimat listesinde yoktu, kimse de o güne kadar sormamıştı. Elde çalışan bir cihaz vardı ama içine girilemiyordu.
İkinci sürpriz sahadaki cihazların birbirinin aynısı olmamasıydı. Yıllar içinde iki farklı sürüm dağıtılmıştı ve hangisinin nerede olduğu kayıtlı değildi. Bir düzeltme yapılsa bile kime gönderileceği belirsizdi.
Yapılan iş üç adımda ilerledi. Önce cihazın ne yaptığı çıkarıldı ve mevcut durum raporlandı. Sonra yerine geçecek yazılım yazıldı ve bu sefer kaynak kod, derleme ortamı ve dokümantasyonla birlikte teslim edildi. Son adımda uzaktan güncelleme kuruldu, çünkü donanım buna uygundu.
Buradaki asıl kazanç istenen rapor değişikliği değildi. Firma o günden sonra kendi ürününün üzerindeki yazılıma sahip oldu ve bir sonraki değişiklik için kimseyi aramak zorunda kalmadı.
Codigno tarafında
Gömülü yazılım ve firmware geliştirme tarafında yazdığımız her cihazda kaynak kod, derleme ortamı ve dokümantasyon teslimatın parçası. Bunu şartname konusu yapmanıza gerek kalmıyor.
Uzaktan güncelleme baştan kurgunun içinde oluyor. Güncelleme yarıda kalırsa cihaz kullanılamaz hale gelmiyor, eski sürümüne dönebiliyor.
Yazılımın üzerinde çalıştığı kartı da biz çiziyoruz: elektronik devre tasarımı ve prototipleme ve test aynı çatı altında ilerliyor. Kendi tasarlayıp ürettiğimiz ve sahada çalışan bir örnek için Codigno Tag Pro sayfasına bakabilirsiniz.
Cihazın seri üretime hazırlanması ayrı bir başlık: prototipten seri üretime geçişte nelerin değiştiğini ve komponent tedarik riskinin nasıl yönetildiğini ayrıca yazdık.
Sık sorulan sorular
Gömülü yazılım ile firmware farklı şeyler mi?
Pratikte aynı şeyi anlatıyorlar. Firmware daha çok kalıcı belleğe yazılmış katman için kullanılıyor, gömülü yazılım ise cihazdaki bütün yazılımı kapsıyor. Şartnamede kapsamı kelimeyle değil teslimat listesiyle tanımlamak daha güvenli.
Cihazımızın kaynak kodu bizde değil, ne yapılabilir?
Kaynak varsa inceleniyor, yoksa cihazın ne yaptığı çıkarılıp yerine geçecek yazılım yazılabiliyor. İlk adım kod yazmak değil, elde ne olduğunu netleştirmek.
Sahadaki cihazlarımız uzaktan güncellenebilir mi?
Donanıma bağlı. Yeni geliştirmelerde bu baştan kurgunun içine konuyor. Mevcut cihazlarda mümkün olup olmadığı incelenmeden söylenemez.
Pil ömrü hesaplanandan kısa çıkıyor, sebebi donanım mı?
Çoğu zaman değil. Cihazın ne sıklıkla uyandığı ve uyanıkken ne kadar süre kaldığı, pil ömrünü donanım kadar belirliyor. Ölçüm yapılmadan tahmin yürütmek yanıltıyor.
Yazılımı ayrı, donanımı ayrı firmaya yaptırsak olur mu?
Olur ama sorun çıktığında iki taraf birbirini gösteriyor. Özellikle sahada ortaya çıkan kararsızlıklarda hangi tarafın düzelteceği uzun süre tartışılıyor.
Yarım kalmış bir projeyi devralır mısınız?
Devralıyoruz. Bu işlerde ilk adım mevcut durumu raporlamak; bunu yapmadan verilen her süre tahmini yanlış çıkıyor.
Son güncelleme için sahaya kaç kez çıktınız? Cihazınızı, sahada kaç adet olduğunu ve bugün nasıl güncellediğinizi paylaşın; uzaktan yönetilebilir hale gelmesi için ne gerektiğini birlikte çıkaralım.





