İşletim sistemleri
Gömülü sistemler genellikle tam bir işletim sistemine ihtiyaç duymaz. Bazıları çok hızlı başlayan özel olarak üretilmiş küçük ve basit işletim sistemleri kullanırken, diğerleri hiç ihtiyaç duymaz. Gömülü sistemler o kadar kolay adapte edilemez, ancak görevlerini çok daha güvenilir bir şekilde yerine getirmek üzere inşa edilirler. Donanım daha basit olduğu için, yapımı da genellikle daha ucuzdur ve daha hızlı çalışır.
Bunun aksine, genel amaçlı bir bilgisayarın yeni yazıcılar veya sabit diskler gibi henüz bilmediği donanımları çalıştırmak için yeni aygıt sürücülerine ve yazılımlara hazır olması gerekir. Farklı uygulama programlarını çalıştırması gerekir.
Gömülü sistemler büyüdükçe, eskiden yalnızca genel amaçlı bilgisayarlarda ve hatta ana bilgisayarlarda bulunan şeyler artık gömülü sistemlerde de yaygınlaşıyor. Buna korumalı bellek alanı ve Linux, NetBSD gibi açık programlama ortamları da dahildir.
Basitten karmaşığa doğru bazı işletim sistemi örnekleri:
- Basit kontrol döngüsü - Farklı alt rutinleri tekrar tekrar çağırmak için bir zamanlayıcı ve bir döngü kullanılır. Bu genellikle daha küçük sistemler için bir kişi tarafından yapılır.
- kesme kontrollü - Görevler farklı türde olaylar tarafından başlatılır. Olay, zamanlanmış bir şey (örneğin her on saniyede bir) veya bir düğmeye basma ya da alınan veri olabilir.
- nonpreemptive multitasking - Her görev çalışma sırasını alır ve bittiğinde bir sonraki görevi çalıştırmak için işletim sistemindeki bir zamanlayıcıyı çağırır.
- preemptive multitasking veya multi-threading - Bir görev, başka bir görevin bir süre çalışmasına izin vermek için belirli bir süre sonra durdurulabilir. Hiçbir görev sistemi meşgul edemez. Bu seviyede sistem bir "işletim sistemi" çekirdeğine sahip olarak kabul edilir ve görevleri paralel olarak çalıştırabilir. Bu tür bir işletim sistemi genellikle sadece gömülü işletim sistemleri üzerinde çalışan bir şirketten satın alınır.
Gerçek zamanlı işletim sistemleri MicroC/OS-II, Green Hills INTEGRITY, QNX veya VxWorks gibi ürünleri içerir. MacOS veya Windows 7'nin aksine, bu işletim sistemleri çoğu insan tarafından çok iyi bilinmemektedir. Ancak zamanın ve güvenliğin çok önemli olduğu birçok yerde kullanılırlar. İnsanlar bunları her gün kullanıyor ve bunun farkında değiller.
Daha büyük çekirdeklerin yaygın örnekleri Gömülü Linux ve Windows CE'dir. Bunlar katı bir gerçek zamanlı sistem için gereken sıkı zaman sınırlarına sahip olmamakla birlikte, özellikle Kablosuz Yönlendiriciler ve GPS'ler gibi daha güçlü cihazlar için daha yaygın hale gelmektedir. Aygıt Sürücüleri, Web Sunucuları, Güvenlik Duvarları ve diğer kodlar için kamu malı kodun yeniden kullanımına izin verirler. PC'ler için uygulama yazma konusunda daha rahat olan yazılım geliştiriciler de bunu daha tanıdık bulacaktır. Gerekirse, sıkı zaman sınırlarına ihtiyaç duyan şeyler için bir FPGA veya diğer özel donanımlar kullanılabilir.
Araçlar
Diğer yazılımlar gibi gömülü sistem tasarımcıları da gömülü sistem yazılımı geliştirmek için derleyiciler, birleştiriciler ve hata ayıklayıcılar kullanırlar. Bununla birlikte, bazı daha özel araçlar da kullanabilirler:
- Dijital sinyal işleme kullanan sistemler için geliştiriciler MATLAB, MathCad veya Mathematica gibi bir matematik aracı kullanabilirler.
- Özel derleyiciler ve bağlayıcılar, belirli bir donanım için optimizasyonu iyileştirmek için kullanılabilir.
- Gömülü bir sistem kendi özel diline veya tasarım aracına sahip olabilir veya Basic Stamp tarafından kullanılan gibi mevcut bir dile geliştirmeler ekleyebilir.
Hata ayıklama araçları:
- Bir devre içi hata ayıklayıcı (ICD), bir JTAG arayüzü aracılığıyla mikroişlemciye bağlanan bir donanım cihazı. Bu, yazılımı çalıştırırken mikroişlemciyi dışarıdan başlatır ve durdurur. Ayrıca bellek ve kayıtların okunmasına ve yazılım programının bellekte saklanmasına izin verir.
- Yanıp sönen bir monitör (printfs) kullanarak çalışmayı izlemek için günlük kaydı veya seri port çıkışı kullanarak harici hata ayıklama.
- Etkileşimli yerleşik hata ayıklama - işletim sistemi destekliyorsa, bu, gömülü işlemci üzerinde geliştirici tarafından yazılan komutları çalıştıran bir kabuktur (örneğin Linux).
- Bir devre içi emülatör, kart üzerindeki mikroişlemcinin yerini alarak mikroişlemcinin yapabileceği her şey üzerinde tam kontrol sağlar.
- Tam bir emülatör, donanımın tüm özelliklerini simüle ederek tümünün kontrol edilmesine ve değiştirilmesine olanak tanır. Donanım gerçekte yoktur, ancak normal bir bilgisayarda onun taklit bir versiyonu ("sanal" bir makine) vardır.
- Harici hatların bir mantık analizörü veya multimetre ile kontrol edilmesi.
Harici hata ayıklama ile sınırlandırılmadığı sürece, programcı genellikle araçlar aracılığıyla yazılımı yükleyebilir ve çalıştırabilir, işlemcide çalışan kodu görüntüleyebilir ve çalışmasını başlatabilir veya durdurabilir. Kodun görünümü montaj kodu veya kaynak kodu şeklinde olabilir. Bazı entegre sistemler (VxWorks veya Green Hills gibi), yazılımın çalışırken ne kadar yer kapladığını, hangi görevlerin çalıştığını ve işlerin ne zaman gerçekleştiğini takip etmek gibi özel özelliklere sahiptir.
Ne tür bir gömülü sistem yapıldığına bağlı olarak, nasıl hata ayıklanabileceğini etkileyecektir. Örneğin, tek bir mikroişlemcili sistemde hata ayıklamak, işlemin bir çevre biriminde de (DSP, FPGA, yardımcı işlemci) yapıldığı bir sistemde hata ayıklamaktan farklıdır.