Besturingssystemen
Embedded systemen hebben vaak geen volledig besturingssysteem nodig. Sommigen gebruiken speciaal gebouwde kleine en eenvoudige besturingssystemen die zeer snel starten, anderen hebben er helemaal geen nodig. Embedded systemen zijn minder gemakkelijk aan te passen, maar ze zijn veel betrouwbaarder gebouwd om hun taken uit te voeren. Omdat de hardware eenvoudiger is, is het vaak ook goedkoper om te bouwen en draait het sneller.
In tegenstelling tot dit, moet een algemene computer klaar zijn voor nieuwe apparaatstuurprogramma's en software om hardware te draaien die hij nog niet kent, zoals nieuwe printers of harde schijven. Het moet verschillende applicatieprogramma's uitvoeren.
Naarmate embedded systemen groter worden, worden dingen die vroeger alleen op algemene computers of zelfs mainframes stonden, nu gemeengoed op embedded systemen. Dit omvat beschermde geheugenruimte en een open programmeeromgeving met inbegrip van Linux, NetBSD, enz.
Enkele voorbeelden van besturingssystemen, van eenvoudig tot complex:
- Eenvoudige regelkring - Een timer en een lus worden gebruikt om verschillende subroutines herhaaldelijk op te roepen. Deze wordt vaak door één persoon gemaakt voor kleinere systemen.
- interrupt gecontroleerd - De taken worden gestart door verschillende soorten gebeurtenissen. De gebeurtenis kan iets getimed zijn (bijvoorbeeld om de tien seconden) of door een druk op de knop of door het ontvangen van gegevens.
- niet-preventieve multitasking - Elke taak krijgt zijn beurt om uit te voeren, en wanneer het klaar is roept het een planner in het OS op om de volgende taak uit te voeren.
- Preventieve multitasking of multi-threading - Een taak kan na enige tijd worden gestopt om een andere taak een tijdje te laten lopen. Geen enkele taak kan het systeem in beslag nemen. Op dit niveau wordt het systeem beschouwd als een "besturingssysteem" kernel en kan het taken parallel uitvoeren. Dit type OS wordt meestal gekocht van een bedrijf dat alleen werkt op embedded besturingssystemen.
Real-time besturingssystemen omvatten producten zoals MicroC/OS-II, Green Hills INTEGRITY, QNX of VxWorks. In tegenstelling tot MacOS of Windows 7 zijn deze besturingssystemen bij de meeste mensen niet zo bekend. Maar ze worden op veel plaatsen gebruikt waar tijd en veiligheid erg belangrijk is. Mensen gebruiken ze elke dag en beseffen het niet.
Veel voorkomende voorbeelden van grotere kernels zijn Embedded Linux en Windows CE. Hoewel deze niet de strakke tijdslimieten hebben die nodig zijn voor een strikt real-time systeem, komen ze steeds vaker voor, vooral voor krachtigere apparaten zoals Wireless Routers en GPSs. Ze staan hergebruik van code in het publieke domein toe voor Device Drivers, Web Servers, Firewalls en andere code. Ook softwareontwikkelaars die comfortabeler zijn bij het schrijven van applicaties voor pc's, zullen dit steeds bekender vinden. Indien nodig kan een FPGA of andere speciale hardware worden gebruikt voor zaken die wel een strakke tijdslimiet nodig hebben.
Gereedschap
Net als andere software gebruiken embedded systeemontwerpers compilers, monteurs en debuggers om embedded systeemsoftware te ontwikkelen. Ze kunnen echter ook wat meer specifieke tools gebruiken:
- Voor systemen die gebruik maken van digitale signaalverwerking kunnen ontwikkelaars gebruik maken van een wiskunde-instrument zoals MATLAB, MathCad of Mathematica.
- Aangepaste compilers en linkers kunnen worden gebruikt om de optimalisatie voor de specifieke hardware te verbeteren.
- Een ingebed systeem kan zijn eigen speciale taal of ontwerptool hebben, of verbeteringen toevoegen aan een bestaande taal zoals de taal die door Basic Stamp wordt gebruikt.
Debuggingsgereedschappen:
- Een in-circuit debugger (ICD), een hardware-apparaat dat via een JTAG-interface met de microprocessor wordt verbonden. Deze start en stopt de microprocessor van buitenaf terwijl hij de software draait. Het maakt het ook mogelijk om geheugen en registers uit te lezen en om het softwareprogramma in het geheugen op te slaan.
- Externe debugging met behulp van logging of seriële poortuitvoer om de werking te traceren met behulp van een knipperende monitor (prints).
- Interactieve residentiële debugging - als het OS dit ondersteunt, is dit een shell op de embedded processor die commando's uitvoert die door de ontwikkelaar zijn getypt (bijvoorbeeld Linux).
- Een in-circuit emulator vervangt de microprocessor op het bord en geeft volledige controle over alles wat de microprocessor kan doen.
- Een complete emulator simuleert alle kenmerken van de hardware, waardoor alles kan worden gecontroleerd en aangepast. De hardware bestaat niet echt, maar een schijnbare versie ervan (een "virtuele" machine) staat op een normale PC.
- Het controleren van externe lijnen met een logic analyzer of multimeter.
Tenzij het beperkt blijft tot externe debugging, kan de programmeur meestal software laden en uitvoeren via de tools, de code die in de processor draait bekijken en de werking ervan starten of stoppen. De weergave van de code kan als assemblagecode of broncode zijn. Sommige geïntegreerde systemen (zoals VxWorks of Green Hills) hebben speciale functies, zoals het bijhouden van hoeveel ruimte de software in beslag neemt tijdens het draaien, welke taken er draaien en wanneer er dingen gebeuren.
Afhankelijk van wat voor soort embedded systeem wordt gemaakt, zal dit invloed hebben op de manier waarop het kan worden gedebugd. Het debuggen van een enkel microprocessorsysteem is bijvoorbeeld anders dan het debuggen van een systeem waarbij de verwerking ook op een randapparaat (DSP, FPGA, co-processor) gebeurt.