Gestione della Memoria nella .NET Compact Framework e Windows Mobile (Parte 0 – Windows CE e Windows Mobile)
Il primo dei punti indicati nel mio precedent post era “Memoria Virtuale sui sistemi operativi basati sulla piattaforma Windows CE”… mi sono accorto però che prima di cominciare a parlare di memoria, credo sia giusto dissipare la nebbia (nonostante non ci sia più la “nebbia di una volta”! ) a proposito di termini come “piattaforma”, “sistema operativo”, “Platform Builder”, “Adaptation Kit”, “OEM, “ODM”, etc… ecco perchè credo si debba partire da una “Parte 0”…
Anzitutto: Windows CE e Windows Mobile non sono la stessa cosa. Dopo un po’ di tempo che ci si lavora può apparire ovvio, ma se sei un programmatore alle prime esperienze sui cosiddetti “Smart Device” allora potrebbe non esserlo. Anzi, in teoria il vero nome di “Windows CE” adesso sarebbe “Windows Embedded CE”, ma non voglio fare confusione con quello che una volta era noto come “Windows XP Embedded” e che adesso è stato separato in diversi prodotti:
- “Windows Embedded Stardard”
- “Windows Embedded Enterprise”
- “Windows Embedded POSReady”
- “Windows Embedded NavReady”
- “Windows Embedded Server”
Trascuriamo per ora queste 5 piattaforme embedded (a dir la verità non sono il mio campo…) e concentriamoci su Windows CE e Mobile.
Windows CE è una piattaforma per “OEM” (Original Equipment Manufacturer). Questo significa che Microsoft fornisce al costruttore (un esempio ne è l’italianissima Datalogic ) uno strumento di sviluppo del tutto simile a Visual Studio (anzi, da Windows CE 6.0 si integra con Visual Studio), ma pensato non per sviluppare applicazioni ma per sviluppare sistemi operativi basati sulla piattaforma fornita da Microsoft. Il tool in questione si chiama “Platform Builder for Windows CE”, e fino alla versione 5.0 era un tool separato da Visual Studio.
Windows CE è una piattaforma modulare. Questo significa che l’OEM ha piena libertà di includere soltanto i moduli, i driver e le applicazioni che gli interessano. Microsoft fornisce circa il 90% di codice sorgente della piattaforma Windows CE, oltre ad esempi di codice driver e varie raccomandazioni (che l’OEM può scegliere di seguire o no). Ad esempio, se il dispositivo non sarà dotato di un’uscita audio, allora non sarà inserito il driver audio. Se non deve avere un display, allora l’OEM non svilupperà nè inserirà un driver video. E così via per la connettività di rete, la presenza di lettore di codice a barre o una fotocamera. Su un dispositivo basato su Windows CE l’OEM può includere quello che vuole. Ecco perchè, dal punto di vista dello supporto tecnico agli Sviluppatori, spesso non ci è possibile aiutare un programmatore che abbia come target uno specifico dispositivo il cui sistema operativo sia basato con Windows CE. Infatti, l’OEM può anche decidere se offrire agli sviluppatori di applicazioni la possibilità di interagire via codice con particolari funzioni del dispositivo, attraverso un cosiddetto “Private SDK”.
Un dettaglio importante: al contrario dei sistemi operativi Windows Embedded (Standard\Enterprise\POSReady\NavReady\Server), per i sistemi operativi basati su Windows CE gli OEM *COMPILANO* il codice sorgente della piattaforma (a parte circa un 10% fornito da Microsoft e corrispondente allo zoccolo duro del kernel e altre funzionalità).
Windows Mobile è una particolare personalizzazione di Windows CE, in cui però l’OEM deve creare un sistema operativo che soddisfi tutta una serie di requisiti, detta “Windows Mobile Logo Test Kit”. Il tool usato dai Windows Mobile-OEM si chiama “Adaptation Kit for Windows Mobile”, una edizione speciale del “Platform Builder”, e serve ad adattare la “piattaforma Windows Mobile” al preciso hardware che essi stessi hanno costruito oppure che hanno commissionato ad un ODM (“Original Device Manufacturer”). Nello scenario di Windows Mobile non vanno dimenticati gli Operatori Mobili, che spesso “brandizzano” un dispositivo richiedendo all’OEM di inserire particolari applicazioni e in genere di configurare la connettività della rete mobile (GPRS, UMTS, WAP, etc.). Attenzione: nulla vieta ad un WinMo-OEM di includere anche funzionalità particolari come il lettore di codice a barre o un chip RFID o altro… l’importante è che il set minimo sia lo stesso. Inoltre, anche i WinMo-OEM possono fornire SDK Privati relativi a funzionalità specifiche del loro sistema operativo, un esempio ne è quello di Samsung che permette di accedere programmaticamente all’accelerometro e altre funzioni, attraverso API documentate e supportate da Samsung stessa.
Infine, un ultimo dettaglio prima di parlare di memoria: Windows Mobile 5.0, 6, 6.1 e 6.5 sono tutte piattaforme basate su Windows CE 5.0. Quindi condividono la stessa gestione della memoria virtuale, a parte alcuni dettagli introdotti nelle ultime, a totale beneficio degli Sviluppatori di applicazioni.
Credo che a questo punto possiamo cominciare a parlare di memoria… o no? (commenti ben accetti!)
A presto, ciao!
~raffaele
Raffaele Limosani
Senior Support Engineer
Windows Mobile & Embedded Developer Support
My Blog around Mobile Development
Comments
Anonymous
September 21, 2009
Salve, volevo chiederLe se è possibile, per noi sviluppatori, reperire da qualche parte il Platform Builder for Windows CE o l'Adaptation Kit for Windows Mobile? Se si, c'è un modo per testarli (es.i emulatori, ...)? ALAnonymous
September 21, 2009
Ciao Antonio, diamoci del tu! :-) E' possibile scaricare una "copia di valutazione" del "Platform Builder per Windows CE 5.0", al link http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=486e8250-d311-4f67-9fb3-23e8b8944f3e. Si tratta di una versione del tutto funzionante, ma limitata nell'uso a 120 giorni. Passati i quali non sarà più possibile creare nuove piattaforme (e usare altri tool), ma cmq rimarrà a tua disposizione parte del codice di Windows CE "suggerito" agli OEM, che spesso è utile... Lo stesso vale per Windows CE 6.0, se interessa (180 giorni): http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=7e286847-6e06-4a0c-8cac-ca7d4c09cb56. Per quanto riguarda invece l'"Adaptation Kit per Windows Mobile" invece, questo tool (del tutto simile al "Platform Builder") NON è disponibile nella versione di valutazione. Però, esiste la possibilità di ottenere il tool diventando un "Windows Mobile In-ROM ISV" o "Windows Mobile In-ROM IHV", nel caso in cui un costruttore di Windows Mobile ti commissioni un'applicazione o un driver: il processo prevede che l'OEM in questione ti "nomini" come suo In-ROM ISVIHV, e Microsoft valuterà tale nomina. Quindi è scontata una stretta collaborazione tra lo sviluppatore di applicazioni o driver e l'OEM. Ne ho parlato qui, se interessa: "Support Boundaries for Windows Mobile Programming (Developing Drivers, for example... Or even WiFi Programming)" http://blogs.msdn.com/raffael/archive/2008/02/27/support-boundaries-for-windows-mobile-programming-developing-drivers-for-example-or-even-wifi-programming.aspx "[...] If your goal is to develop a driver, then the best way you may have is to partner with one or more licensed Windows Mobile OEMs, and ask them to sponsor you as a Windows Mobile In-ROM IHV (or ISV). The OEM would need to nominate you and Microsoft would then evaluate that nomination. If the nomination was accepted you would be eligible to receive the Windows Mobile OEM Adaptation Kit, so you'll have access to the same source and samples that the OEMs have access to. " Attenzione: non ho detto che non sia "tecnicamente possibile" scaricare la versione di valutazione del Windows CE 5.0 ed usare il codice di esempio come prototipo per un driver su Windows Mobile 5.066.x. Ma seppur "tecnicamente possibile", non sarebbe "supportato", ovvero non sarebbe possibile per lo sviluppatore richiedere supporto tecnico in caso di problemi. Spero questo punto sia chiaro, fammi sapere se non è così. Grazie, ciao! ~raffaeleAnonymous
September 22, 2009
Non capisco...se le versioni Mobile sono personalizzazione di CE, la nuova 6.5, che come la 6.1 è basata su CE 5, cosa ha in più della 6.1?Anonymous
September 22, 2009
Ciao Michele, grazie per la domanda! In effetti ne parlerò in dettaglio nel prossimo post della serie: puoi aspettare? :-) In 2 parole, la novità principale in WinMo 6.1 è stato dare la possibilità di caricare le DLL >64KB nella Large Memory Area anzichè sprecare il già limitato Address Space del processo, a beneficio della stabilità dell'intero sistema, in particolare nei 2 slot 60 e 61. Oltre a questo, da WinMo 6.5 quei 2 slot possono anche contenere file di risorse utilizzate dalle applicazioni (non solo DLL), al fine di alleviare la pressione sullo Slot 0. Mi rendo conto che non è tutto cristallino, ma ti chiedo la cortesia di aspettare il prossimo post della serie... Grazie, ciao! ~raffaele