In november 2006 heeft Microsoft een nieuwe versie van het Windows CE-besturingssysteem op de markt gebracht en tegelijkertijd de naam een beetje gewijzigd. Windows Embedded CE 6.0, zoals het besturingssysteem nu officieel heet, heeft een aantal belangrijke wijzigingen ondergaan. Ook de ontwikkelomgeving is ingrijpend veranderd. In dit artikel neemt Maarten Struys de belangrijkste wijzigingen ten opzichte van Windows CE 5.0 onder de loep.
Van versie 3.0 tot en met versie 5.0 is de kernel van Windows CE tamelijk constant gebleven. Sinds versie 3.0 is Windows CE een hard realtime besturingssysteem. Opeenvolgende versies brachten vooral functionele uitbreidingen, optimalisaties en bijvoorbeeld de mogelijkheid om .Net-applicaties te gebruiken. Wat betreft geheugenindeling heeft Windows CE echter al vanaf versie 1.0 een forse beperking. Zo kunnen er maximaal 32 processen tegelijk actief zijn en is de hoeveelheid geheugen per proces gelimiteerd tot 32 Mbyte. Vooral voor toepassingen op multimediagebied is dit laatste een serieuze beperking. Vanaf versie 4.2 heeft Microsoft deze hoeveelheid adresseerbaar geheugen wel iets uitgebreid door een extra gebied van 32 Mbyte te reserveren voor sommige Dynamic Link Libraries. Die leggen daardoor geen beslag meer op het geheugen van de applicatie. Dit was echter symptoombestrijding en geen structurele oplossing. In Windows Embedded CE 6.0 zijn deze beperkingen verdwenen. Nu is het mogelijk om maximaal 32 duizend processen tegelijk actief te hebben, en heeft elk proces de beschikking over 2 Gbyte (virtueel) geheugen.

Een andere belangrijke wijziging is in het bestandsysteem. Daardoor kan Windows CE 6.0 nu overweg met grotere opslagmedia. Daarnaast betekent het dat individuele bestanden groter mogen zijn.
Behalve deze rigoureuze wijzigingen is ook aandacht geschonken aan performanceverbetering en is het device driver-model gewijzigd. Een deel van de functionaliteit van Windows Embedded CE 6.0 is verplaatst van user mode naar kernel mode. Het betreft hier het Graphics and Windowing Event System (GWES), de Device Driver Manager en de File System Manager. Dit resulteert in prestatieverbeteringen. Het nadeel is wel dat eventuele problemen in deze processen het besturingssysteem kunnen laten vastlopen. Een soortgelijke wijziging heeft Microsoft in het verleden ook doorgevoerd bij overgang van Windows NT naar Windows XP. Daar leverde het echter geen problemen op, en de verwachting is dat dit ook bij Windows CE niet zal gebeuren.
De consequentie van al deze wijzigingen is wel dat Windows Embedded CE 6.0 een volledig nieuwe kernel heeft gekregen. Vandaar dat er met recht sprake is van een nieuw besturingssysteem. Natuurlijk zijn er ook overeenkomsten met eerdere versies. Windows CE ondersteunt nog steeds dezelfde processoren en bevat natuurlijk ook een deel van de Win32-Api‘s voor applicatieontwikkeling.
Geheugenadressen
Een belangrijke wijziging in Windows Embedded CE 6.0 is de strikte scheiding tussen kernel mode en user mode. Dat verbetert de stabiliteit van het totale systeem. In eerdere versies was het voor een applicatie mogelijk om over te schakelen van user mode naar kernel mode door het aanroepen van de Api SetKMode. Dit betekent effectief dat een thread zichzelf toegang kan verlenen tot alle geheugenadressen waar de kernel ook toegang toe heeft. Als een dergelijke applicatie vastloopt is de kans groot dat het volledige systeem onderuit gaat. In CE 6.0 is dit niet meer mogelijk.
Ook kunnen processen geen toegang meer krijgen tot elkaars geheugen in CE 6.0. In versie 5.0 kon dit door het aanroepen van de Api SetProcPermissions. Voornamelijk device drivers gebruiken deze techniek, maar elk proces kan deze functie aanroepen. In Windows Embedded CE 6.0 is deze Api niet meer beschikbaar.
Applicaties kunnen in de nieuwste versie ook niet meer rechtstreeks een stuk fysiek geheugen mappen. In Windows CE 5.0 kon dit door gebruik te maken van de Api VirtualCopy. Deze is in versie 6.0 alleen nog maar beschikbaar in kernel mode en voor user mode device drivers, en daarmee verboden terrein voor applicaties. De implicatie hiervan is wel dat een toepassing niet meer rechtstreeks hardware kan benaderen. Dit moet nu, net als bij andere Windows-varianten gebeuren via een device driver.
Omdat een aantal Api‘s niet langer voor applicaties beschikbaar zijn, of zelfs helemaal niet meer bestaan in Windows Embedded CE 6.0, moeten sommige bestaande toepassingen geschikt gemaakt worden om te kunnen werken onder deze nieuwe versie van het besturingssysteem. Om hierbij te helpen levert Microsoft een applicatie genaamd CeAppCompat.exe, die onderzoekt of bestaande toepassingen compatibiliteitsproblemen hebben.
Systeemregistry
Ook de ontwikkelomgeving is ingrijpend gewijzigd. Vanaf versie 2.11 gebruikte Microsoft Platform Builder om een Windows CE-besturingssysteem op maat te maken. Daarnaast was Embedded Visual C++ beschikbaar als applicatieontwikkelomgeving. Deze hulpmiddelen zijn beiden gebaseerd op de oudere versie 6.0 van Visual Studio. In de afgelopen jaren is deze omgeving echter aanzienlijk gewijzigd. De nieuwste editie, Visual Studio 2005, kent een groot aantal verbeteringen ten opzichte van het acht jaar oude Visual Studio 6. Zo biedt het de mogelijkheid om relatief eenvoudig compilers en grafische omgevingen voor specifieke ontwikkeldoeleinden toe te voegen. Voor het maken van een Windows Embedded CE 6.0-besturingssysteem gebruikt Microsoft dan ook deze nieuwere versie. Deze wordt meegeleverd bij aanschaf van het RTOS.
Platform Builder 6.0 integreert naadloos met Visual Studio 2005. Daardoor is er nu nog maar een enkele ontwikkelomgeving nodig voor het maken van een Windows CE-besturingssysteem, maar ook voor managed en native applicaties. Daarnaast is dezelfde omgeving natuurlijk ook te gebruiken voor het maken van desktop- en serverapplicaties. Alle functionaliteit die beschikbaar is binnen Visual Studio 2005 is nu dus ook te gebruiken binnen de geïntegreerde Platform Builder-omgeving. De eerste keer dat iemand een Windows Embedded CE 6.0-besturingssysteem maakt met behulp van Visual Studio 2005 zal het even wennen zijn, maar al snel wilde ik in elk geval niet meer terug naar de oude situatie met een aparte Platform Builder.
Het maken van een nieuw Windows Embedded CE 6.0-besturingssysteem lijkt in eerste instantie niet gewijzigd ten opzichte van vorige versies. Het aantal standaardoplossingen waaruit de ontwikkelaar kan kiezen, is wel vergroot. Door een verzameling invulschermen af te lopen is het mogelijk snel een besturingssysteem te creëren. Na het maken van deze initiële versie met de Design Wizard kunnen er meer componenten aan het besturingssysteem worden toegevoegd vanuit de catalogus die Visual Studio 2005 toont. Die is voor Windows Embedded CE 6.0 iets gewijzigd ten opzichte van voorgaande versies. Het is nu mogelijk een gecombineerd overzicht te hebben van de componenten die beschikbaar zijn en die al in het besturingssysteem zijn opgenomen. Toevoegen van een onderdeel gebeurt eenvoudig door de checkbox aan te klikken. De software neemt automatisch andere onderdelen mee die voor het geselecteerde component nodig zijn. Deze manier van weergeven werkt plezierig en zorgt ervoor dat een ontwikkelaar het beoogde doel met minder muisklikken bereikt.

In Visual Studio 2005 zijn projecten gegroepeerd in zogenaamde solutions. Dit is dus ook het geval voor Windows Embedded CE 6.0 projecten. In de solution explorer is te zien welke bestanden deel uitmaken van een besturingssysteem. Zoals te zien is in Figuur 1 kan de functionaliteit van Visual Studio 2005 eenvoudig worden gebruikt voor het verfijnen van een Windows Embedded CE 6.0-besturingssysteem. Zo is het mogelijk om instellingen voor de systeemregistry te maken of te wijzigen met behulp van een editor. In voorgaande versies van Platform Builder kon dit alleen maar door wijzigingen met een teksteditor aan te brengen, waardoor de kans op syntaxfouten aanzienlijk groter was. Vanuit de solution explorer is het ook eenvoudig om naar individuele bronbestanden te springen. Hieronder vallen alle files van Windows Embedded CE 6.0 die als shared source beschikbaar zijn. De hoeveelheid broncode die Microsoft onder deze licentie meelevert is in Windows Embedded CE 6.0 flink uitgebreid. Door het aanvinken van een extra licentieovereenkomst krijgt een ontwikkelaar de beschikking over 3,9 miljoen regels broncode. In CE 5.0 waren er slechts 2,5 miljoen regels beschikbaar. Het is vrij aan iedereen om deze broncode te wijzigen als dit voor een besturingssysteemontwerp nodig is.
Breakpoint
Visual Studio 2005 beperkt zich niet tot het ontwikkelen van een Windows Embedded CE 6.0-besturingssysteem, ook native C(++)-applicaties voor het besturingssysteem worden nu ontwikkeld in deze omgeving. Dit is een significante verbetering over embedded Visual C++, dat toch wel behoorlijk verouderd was. Met de nieuwe omgeving profiteert een applicatieontwikkelaar van efficiëntere en betere compilers. Ook helpt deze de ontwikkelaar beter, omdat bijvoorbeeld Intellisense en syntax highlighting veel beter werken dan in embedded Visual C++. Uiteraard zijn compilers beschikbaar voor alle processoren waarop Windows Embedded CE 6.0 werkt.
Door de integratie van Platform Builder kunnen ontwikkelaars tijdens het debuggen van het besturingssysteem nu de mogelijkheden van Visual Studio gebruiken. Het gaat te ver om in dit artikel alle verschillende mogelijkheden te beschrijven, maar ook wat betreft foutopsporing is het plezierig om de beschikking te hebben over moderne hulpmiddelen. Het zetten van een nieuw breakpoint kan in Visual Studio 2005 gewoon terwijl het besturingssysteem draait. Visual Studio 2005 ondersteunt kerneldebugging, met nagenoeg dezelfde eigenschappen als de native applicatiedebugger. Het grote verschil tussen beide manieren van fouten opsporen is dat een kerneldebugger het hele systeem stop zet bij bijvoorbeeld een breakpoint, terwijl een applicatiedebugger slechts het relevante proces stopt terwijl de rest van het systeem gewoon doorloopt.
Arm-architectuur
Om in een vroegtijdig stadium een nieuw besturingssysteem te kunnen testen, bijvoorbeeld nog voor uiteindelijke hardware beschikbaar is, kunnen ontwikkelaars de emulator gebruiken. Ook hier zijn significante verschillen tussen CE 5.0 en CE 6.0. Voorheen was de emulator gebaseerd op een x86-processor. De nieuwe emulator, die voor het eerst werd geïntroduceerd voor Windows Mobile 5.0 devices, is gebaseerd op de Arm-architectuur. Deze emulator werkt sneller dan zijn voorgangers. Hiermee is in principe alle functionaliteit van het besturingssysteem uit te testen, hoewel er bij het testen van communicatie met randapparatuur extra software nodig is om deze na te bootsen. Ondanks het feit dat de emulator sneller werkt dan de voorgaande versie, is deze niet bruikbaar voor het uittesten van tijdkritische functies.
Naast testen van het besturingssysteem is de emulator ook te gebruiken als zelfstandig target voor applicatieontwikkelaars. Hiervoor moet wel een zogenaamde Software Development Kit (SDK) voor Windows Embedded CE 6.0 worden gemaakt. Dit kan uiteraard vanuit Visual Studio 2005, via het doorlopen van een aantal invulschermen. Daar kunnen ontwikkelaars naast copyrightgegevens onder andere opgegeven of de SDK ondersteuning moet bieden voor native en/of managed applicaties. Ook kan de SDK een kopie van de emulator met het ontwikkelde besturingssysteem bevatten. Daardoor kan een ontwikkelaar vanuit Visual Studio een applicatie downloaden en debuggen op een emulator met daarop een exacte versie van het Windows Embedded CE 6.0-besturingssysteem zoals die eerder is aangemaakt.
Naast testen van het besturingssysteem is de emulator ook te gebruiken als zelfstandig target voor applicatieontwikkelaars. Hiervoor moet wel een zogenaamde Software Development Kit (SDK) voor Windows Embedded CE 6.0 worden gemaakt. Dit kan uiteraard vanuit Visual Studio 2005, via het doorlopen van een aantal invulschermen. Daar kunnen ontwikkelaars naast copyrightgegevens onder andere opgegeven of de SDK ondersteuning moet bieden voor native en/of managed applicaties. Ook kan de SDK een kopie van de emulator met het ontwikkelde besturingssysteem bevatten. Daardoor kan een ontwikkelaar vanuit Visual Studio een applicatie downloaden en debuggen op een emulator met daarop een exacte versie van het Windows Embedded CE 6.0-besturingssysteem zoals die eerder is aangemaakt.
Het is wel noodzakelijk het zojuist verschenen Service Pack 1 voor Visual Studio 2005 te installeren als u Windows Embedded CE 6.0-besturingssystemen wilt gaan maken. Platform Builder 6.0 zelf werkt goed samen met Visual Studio 2005 zonder SP1, maar deze verzameling reparaties is nodig om een SDK voor het gemaakte besturingssysteem te kunnen creëren en te laten samenwerken met een willekeurige versie van Visual Studio 2005.
Bottleneck
Windows Embedded CE 6.0 is in november een beetje in stilte verschenen door al het mediageweld rond Vista. De verwachting is dat de eerste oplossingen die met CE 6.0 werken in het eerste kwartaal van 2007 op de markt verschijnen. Het is nog wat vroeg om uitgebreide ervaringen met dit nieuwe besturingssysteem te delen.

Voor een bestaande klant koste het ongeveer een week om een Windows Embedded CE 6.0-besturingssysteem werkend te krijgen op basis van een migratie van een bestaand board support package voor versie 5.0. Dit is echter geen realistische tijdindicatie voor een migratie. Met name als veel device drivers moeten worden omgezet, zal overstappen een significante hoeveelheid tijd vergen. Iedereen zal dus de afweging moeten maken om bestaande toepassingen te migreren naar het nieuwe besturingssysteem, of dit alleen in te zetten voor nieuwe ontwikkelingen. Als geheugengrootte en aantal parallelle processen in een specifieke oplossing geen bottleneck vormen, zou ik bestaande toepassingen gewoon onder Windows CE 5.0 laten werken. Een uitzondering hierop vormen multimediatoepassingen, die vooral geheugenintensief zijn. Daarvoor is een zo snel mogelijk overstap naar CE 6.0 bijna noodzaak.
Mocht u na het lezen van dit artikel geïnteresseerd zijn in het uitproberen van Windows Embedded CE 6.0, dan is het mogelijk een probeerversie aan te vragen of te downloaden bij Microsoft. Deze volledig functionerende editie werkt gedurende 180 dagen. U heeft hiervoor Visual Studio 2005 nodig (elke versie behalve Express is geschikt). Ook daarvan is een probeerversie aan te vragen of te downloaden bij Microsoft.
Persoonlijk denk ik dat Windows Embedded CE 6.0 een grote stap voorwaarts is. Ondanks het feit dat er overeenkomsten met bestaande Windows CE-versies zijn, is dit de release met de meeste wijzigingen tot nu toe. Wat dat betreft is er met recht sprake van een nieuw besturingssysteem.