|
|
| Embedded technieken |
| |
Gedurende de 15 jaar dat PragmaLab embedded software ontwikkelt, is er op technisch gebied veel veranderd. Niet alleen is met de huidige generatie processoren veel meer mogelijk op een vierkante millimeter silicium, ook de ontwikkelomgevingen en overige software gereedschappen zijn meer en meer volwassen geworden. Was vroeger de zoektocht naar een geschikte processor relatief eenvoudig, vandaag de dag kan men kiezen uit honderden families met evenzovele varianten processoren. Waren 15 jaar geleden de 8-bitters nog prominent aanwezig, tegenwoordig zijn de processoren met een 32-bit architectuur ook alom vertegenwoordigd.
Ieder project verlangt opnieuw verantwoorde technische keuzes, waarbij allerhande eisen een rol spelen. |
| |
|
| |
 |
processoren |
Een beknopt overzicht van processoren die PragmaLab de afgelopen jaren voor embedded software ontwikkeling gebruikte.
| |
fabrikant |
type |
architectuur |
 |
|
|
|
| |
Atmel |
AT90S8515 |
8-bit |
| |
Atmel |
ATmega128 |
8-bit |
| |
Atmel |
ATmega256 |
8-bit |
| |
Atmel |
AT90USB128 |
8-bit |
| |
Fujitsu |
MB89T625 |
8-bit, FFMC-8L familie |
| |
Hitachi (Renesas) |
H8S/2320 |
32-bit intern, 16-bit registers |
| |
Intel |
8031 |
8-bit |
| |
Intel |
8051 |
8-bit, + diverse derivaten |
| |
Intel |
8080 |
8-bit |
| |
Microchip |
PIC16F876A |
8-bit, + diverse varianten uit de 16FXX familie |
| |
Motorola |
6800 |
8-bit |
| |
Motorola |
68000 |
16-bit |
| |
Motorola |
68HC11 |
8-bit |
| |
Rabbit |
Rabbit 3000 |
8-bit (Z80 core) |
| |
Texas Instruments |
MSP58C80 |
8-bit DSP |
| |
Zilog |
Z80 |
8-bit |
Met ieder nieuw project dient zich vaak een nieuw type processor aan. Soms met oude techniek in een nieuw (sneller) jasje, soms met hele nieuwe eigenschappen. |
| |
|
| |
 |
compilers |
Iedere processor verlangt een eigen vertaler, ook wel 'compiler' genoemd. Het merendeel van de embedded code wordt in 'C' geprogrammeerd en is daarmee in principe platform onafhankelijk. Toch zal men bij het schrijven van de code altijd de gebruikte compiler in het achterhoofd moeten houden. Dat is vanwege het feit dat niet alles in de taal 'C' gestandaardiseerd is. Juist omdat 'C' een hogere programmeertaal is en platform-onafhankelijk, geeft de taal geen houvast bij zaken die juist typisch zijn voor embedded software.
Willen we bijvoorbeeld zorgen dat data in RAM of ROM terecht komt, dan biedt de taal 'C' daar geen mogelijkheden toe. Daar heeft de compilerbouwer dan een eigen oplossing voor aangebracht in de compiler. En dus zien we in embedded code, ook al is dat 'standaard C', typische compiler-afhankelijke oplossingen.
Het vermijden van dergelijke oplossingen, en dus het ontwikkelen van platform onafhankelijke code (ook wel 'portable code' genoemd) is in sommige projecten zeer voornaam, in andere wat minder. Wanneer, omwille van snelheid of code-omvang, delen van de code in assembly geschreven worden, is van portabiliteit natuurlijk geen sprake meer. Het streven naar portable code maakt in het algemeen hergebruik van code mogelijk, maar resulteert ook vaker in een langere doorlooptijd.
Een korte opsomming van de compilers die PragmaLab gebruikt voor haar projecten.
| |
fabrikant |
compiler |
target |
 |
|
|
|
| |
Avocet |
ADC-Z80 |
Z80 |
| |
Fujitsu |
C96 |
FFMC-8L en 16L familie |
| |
GNU |
GCC |
AVR, 6800(0), 68HC11 |
| |
Hitachi |
CH38 |
H8S familie |
| |
HI-TECH |
PICC |
alle PIC derivaten |
| |
Imagecraft |
ICC |
AVR (Atmega128, ATmega 256) |
| |
Keil |
C51 |
8051 |
| |
Texas Instruments |
DSPCL |
MSP58C80 |
Deze zogeheten cross-compilers worden gebruikt voor het embedded werk. Voor de applicaties op de PC wordt meestal de Borland C++ compiler ingezet. |
| |
|
| |
 |
talen |
De programmeertaal 'C' is de taal die PragmaLab bij bijna al haar embedded projecten toepast. Naast deze hogere programmeertaal worden ook stukken code in assembly geschreven. De keuze valt op assembly wanneer er eisen gesteld worden aan executietijden die in 'C' niet gehaald kunnen worden. Te denken valt bijvoorbeeld aan Interrupt Service Routines die per definitie kort moeten duren en onvoorspelbaar vaak op kunnen treden. Het argument om assembly in te zetten om de code-size in de hand te houden, is inmiddels redelijk achterhaald. Hoewel, bij processoren met een beperkte ROM-capaciteit kan men er nog steeds voor kiezen delen van het project in assembly te coderen.
C++ ligt voor embedded werk wat minder voor de hand. Deze OO-taal (object georiënteerde taal) wordt door PragmaLab wel ingezet bij het ontwikkelen van PC-applicaties. Naast het embedded ontwikkelwerk, dient er voor een project regelmatig een test-omgeving opgezet te worden Bijvoorbeeld als een embedded apparaat moet opereren in een netwerk, dan wordt vaak een server-achtige applicatie ontwikkeld op de PC. Hiermee is het dan mogelijk een verbinding op te zetten met het embedded apparaat. Via deze verbinding kan het apparaat vervolgens aan testen worden onderworpen. Maar ook voor eenvoudige toepassingen als het afvangen van logging (debug & test) kan een PC worden ingezet. Bij de 'projecten' pagina vindt u nog meer voorbeelden van PC-applicaties die door PragmaLab werden ontwikkeld.
Naast 'C' en 'C++' is PragmaLab thuis in Java, Modula II, Pascal en Dynamic C. Deze laatste taal is een variant op de taal 'C' waarbij aanpassingen en toevoegingen zijn gemaakt die 'C' geschikter maken om voor embedded toepassingen te worden ingezet.
Momenteel heeft 'C#' (spreek uit: 'C-sharp' ) de belangstelling van het bedrijf. Deze jonge taal wordt onder andere in de Visual Studio omgeving gebruikt. Met de daarmee ontwikkelde .net applicaties groeien de embedded toepassingen, de PC-applicaties en de web-applicaties die PragmaLab ontwikkelt, weer een stapje dichter naar elkaar toe . |
| |
|
| |
 |
(realtime) operating systemen |
Meer en meer wordt in een embedded product een , al dan niet realtime, operating system ingezet. Werden taken voorheen in een traditionele 'endless loop' afgehandeld, tegenwoordig wordt vaak een operating systeem ingezet om taken uit te voeren en te beheren. Op het gebied van embedded operating systemen heeft PragmaLab de nodige ervaring opgedaan. Met sommige werd enkel wat geëxperimenteerd, andere werden daadwerkelijk ingezet bij projecten. De belangrijkste daarvan staan hieronder kort opgesomd.
| |
leverancier |
operating system |
eigenschappen |
 |
|
|
|
| |
Egnite |
NutOS |
soft realtime, coöperative |
| |
FreeRtos |
FreeRtos |
pre-emptive/ coöperative |
| |
Micrium |
µC/OS-II (mucos) |
realtime, pre-emptive |
| |
Windriver |
VxWorks |
realtime, pre-emptive |
|
| |
|
|