Sistem operasi
Sistem tertanam sering kali tidak memerlukan sistem operasi penuh. Sebagian menggunakan sistem operasi kecil dan sederhana yang dibuat secara khusus yang memulai dengan sangat cepat, sebagian lainnya tidak memerlukannya sama sekali. Sistem tertanam tidak mudah diadaptasi, tetapi dibangun untuk melakukan tugas-tugasnya dengan jauh lebih andal. Karena perangkat kerasnya lebih sederhana, sering kali juga lebih murah untuk dibangun dan berjalan lebih cepat.
Berbeda dengan ini, komputer serba guna harus siap untuk driver perangkat baru dan perangkat lunak untuk menjalankan perangkat keras yang belum diketahuinya, seperti printer atau hard drive baru. Komputer perlu menjalankan program aplikasi yang berbeda.
Seiring dengan semakin besarnya sistem embedded, hal-hal yang dulunya hanya ada pada komputer serba guna atau bahkan mainframe, sekarang menjadi umum pada sistem embedded. Ini termasuk ruang memori yang terlindungi, dan lingkungan pemrograman terbuka termasuk Linux, NetBSD, dll.
Beberapa contoh sistem operasi, dari yang sederhana hingga yang kompleks:
- Loop kontrol sederhana - Timer dan loop digunakan untuk memanggil subrutin yang berbeda berulang kali. Ini sering dibuat oleh satu orang untuk sistem yang lebih kecil.
- interrupt controlled - Tugas-tugas dimulai oleh berbagai jenis peristiwa. Peristiwa bisa berupa sesuatu yang diatur waktunya (setiap sepuluh detik, misalnya) atau dengan penekanan tombol atau data yang diterima.
- multitasking nonpreemptive - Setiap tugas mendapat giliran untuk dijalankan, dan ketika selesai, tugas tersebut memanggil penjadwal di OS untuk menjalankan tugas berikutnya.
- preemptive multitasking atau multi-threading - Sebuah tugas dapat dihentikan setelah beberapa waktu untuk membiarkan tugas lain berjalan untuk sementara waktu. Tidak ada tugas yang dapat memonopoli sistem. Pada tingkat ini sistem dianggap memiliki kernel "sistem operasi" dan dapat menjalankan tugas secara paralel. OS jenis ini biasanya dibeli dari perusahaan yang hanya bekerja pada sistem operasi tertanam.
Sistem operasi real-time termasuk produk seperti MicroC/OS-II, Green Hills INTEGRITY, QNX atau VxWorks. Tidak seperti MacOS atau Windows 7, sistem-sistem operasi ini tidak dikenal dengan baik oleh kebanyakan orang. Tetapi mereka digunakan di banyak tempat di mana waktu dan keamanan sangat penting. Orang-orang menggunakannya setiap hari dan tidak menyadarinya.
Contoh umum kernel yang lebih besar adalah Embedded Linux dan Windows CE. Meskipun ini tidak memiliki batas waktu yang ketat yang diperlukan untuk sistem real-time yang ketat, mereka menjadi lebih umum, terutama untuk perangkat yang lebih kuat seperti Wireless Router dan GPS. Mereka memungkinkan penggunaan kembali kode dalam domain publik untuk Device Drivers, Web Server, Firewall, dan kode lainnya. Pengembang perangkat lunak yang lebih nyaman menulis aplikasi untuk PC akan merasa ini lebih akrab juga. Jika diperlukan, FPGA atau perangkat keras khusus lainnya dapat digunakan untuk hal-hal yang memang membutuhkan batas waktu yang ketat.
Peralatan
Seperti perangkat lunak lainnya, perancang sistem tertanam menggunakan kompiler, assembler, dan debugger untuk mengembangkan perangkat lunak sistem tertanam. Namun, mereka juga dapat menggunakan beberapa alat yang lebih spesifik:
- Untuk sistem yang menggunakan pemrosesan sinyal digital, pengembang dapat menggunakan alat bantu matematika seperti MATLAB, MathCad, atau Mathematica.
- Compiler dan linker khusus dapat digunakan untuk meningkatkan optimasi untuk perangkat keras tertentu.
- Sistem tertanam mungkin memiliki bahasa atau alat desain khusus sendiri, atau menambahkan penyempurnaan pada bahasa yang sudah ada seperti yang digunakan oleh Basic Stamp.
Alat debugging:
- In-circuit debugger (ICD), perangkat keras yang terhubung ke mikroprosesor melalui antarmuka JTAG. Perangkat ini memulai dan menghentikan mikroprosesor dari luar saat menjalankan perangkat lunak. ICD juga memungkinkan memori dan register dibaca, dan untuk menyimpan program perangkat lunak dalam memori.
- Debugging eksternal menggunakan logging atau output port serial untuk melacak operasi menggunakan monitor berkedip (printfs).
- Debugging residen interaktif - jika OS mendukungnya, ini adalah shell pada prosesor tertanam yang menjalankan perintah yang diketik oleh pengembang (Linux, misalnya).
- Emulator dalam sirkuit menggantikan mikroprosesor pada papan, memberikan kontrol penuh atas segala sesuatu yang dapat dilakukan mikroprosesor.
- Emulator yang lengkap mensimulasikan semua fitur perangkat keras, memungkinkan semuanya untuk dikontrol dan dimodifikasi. Perangkat kerasnya tidak benar-benar ada, tetapi versi pura-pura dari perangkat keras tersebut (mesin "virtual") ada pada PC normal.
- Memeriksa jalur eksternal dengan penganalisis logika atau multimeter.
Kecuali terbatas pada debugging eksternal, programmer biasanya dapat memuat dan menjalankan perangkat lunak melalui alat, melihat kode yang berjalan di prosesor, dan memulai atau menghentikan operasinya. Tampilan kode mungkin sebagai kode rakitan atau kode sumber. Beberapa sistem terintegrasi (seperti VxWorks atau Green Hills) memiliki fitur-fitur khusus, seperti melacak berapa banyak ruang yang dibutuhkan perangkat lunak saat berjalan, tugas apa yang sedang berjalan, dan kapan sesuatu terjadi.
Tergantung pada jenis sistem tertanam yang dibuat akan mempengaruhi bagaimana sistem tersebut dapat di-debug. Misalnya, debugging sistem mikroprosesor tunggal berbeda dengan debugging sistem di mana pemrosesan juga dilakukan pada periferal (DSP, FPGA, co-prosesor).