Die meisten Prozessoren befinden sich heute nicht in Computern, sondern in eingebetteten Systemen. Sie arbeiten im Verborgenen, steuern Mobiltelefone oder Bremssysteme im Auto. Diese Systeme werden in sehr großen Stückzahlen benötigt und müssen sehr kostengünstig sein. Zudem ist oft wenig Platz vorhanden, und bei batteriebetriebenen Geräten muß der Stromverbrauch gering sein.
Eingebettete Systeme zeichnen sich daher dadurch aus, daß sie mit beschränkten Ressourcen arbeiten müssen. Geringe Taktraten und kleine Speicher zwingen den Programmierer oft dazu, handoptimierte Programme in C oder gar Assembler zu entwerfen. Diese sind schwierig zu programmieren und nur mit hohem Aufwand zu warten.
Ein weiteres Problem stellt die für eingebettete Systeme sehr wichtige Behandlung von Echtzeitereignissen über Interrupts dar. Aufgrund der starren Prioritäten der einzelnen Unterbrechungsanforderungen müssen die Behandlungsroutinen sehr schnell sein und längere Aufgaben an andere Programme delegieren, was die Systeme noch komplexer und deren Zeitverhalten zudem schwer vorhersagbar macht.