組み込みシステム
「独自に開発したソフトウェアだけで構成する」方法と、「汎用ソフトウェアと独自ソフトウェアを組み合わせて構成する」方法が存在する。
ソフトウェアはC言語で記述されることが多い。32ビット以上のマイコンなど、比較的ハードウェア資源が豊富な環境ではC++やJavaが使用されることもある一方で、4ビットマイコンなどの資源が貧弱な環境や、逆に他言語では間に合わないような極めて高速な処理を求められる場面では、現在でもアセンブリ言語の使用が必須である。
(ソフトウェア開発全般の話で)最近では開発にUMLといったオブジェクト指向の手法が取り入れられるようになっている。ただし組み込みシステム開発においては、機能で分類したクラスでプログラムを組み立てるのではなく、信頼性が保証されたモジュールで組み立てるのが普通である。
デバッグは、ICEと呼ばれる機器を用いてパソコンをCPUに接続してリモートで行う。近年では、ICEを使わずJTAGエミュレータやROMエミュレータなどのエミュレータや、パソコン上でCPUの機能をシミュレートするシミュレータも使用される。
かつては、ソフトウェアはEPROM(特にUV-EPROMが使われることが多かった)に書き込まれた状態で出荷されたため、出荷後に製品不具合が発見されると、修正や修理のためにメーカによる製品回収・交換作業などが必要になり、多大な費用がかかった。
ハードウェアの構成は汎用のもの、独自のもの、両方を組み合わせたものがある。
ソフトウェアも同様に、汎用のもの、独自のもの、両方を組み合わせたものがある。開発言語としてはC言語が用いられることが多いが、メモリ容量や実行速度等の制約が厳しい用途ではアセンブリ言語が用いられる。メモリ容量等の資源が十分に確保できるシステムではOSも搭載されているものも多い。
ハードウェアとソフトウェアは別々に設計することもあるが、ハードウェアとソフトウェアの機能をお互いに考慮しながら設計する協調設計(コデザイン、co-design)と言う設計手法もある。