Introduzione a Micro Framework
La vision di Micro Framework
Piccoli dispositivi elettronici controllati da microprocessori sono sempre più diffusi ma:
- Pochi tool ne supportano lo sviluppo
- Sono necessari forti skill per fare cose semplici
- Lo sviluppo avviene generalmente in C/C++ o assembler, ad un livello di astrazione molto basso e difficilmente manutenibile.
Micro Framework si propone per lo sviluppo embedded come ha fatto VB6 per lo sviluppo delle vecchie applicazioni desktop:
- MF introduce un modello di sviluppo semplice ed intuitivo.
- MF introduce uno sviluppo applicativo ad un livello di astrazione alto, in cui lo sviluppatore gestisce i dispositivi periferici tramite oggetti, metodi ed eventi.
- Lo sviluppo può avvenire con un ambiente di sviluppo semplice da utilizzare.
Posizionamento di Micro framework
MF è un .Net Runtime piccolo per processori embedded 32bit, economici e a basso consuno
Lo sviluppo embedded con Micro Framework avviene in modo consistente con lo sviluppo sulle le altre piattaforme applicative Microsoft.
Le piattaforme embedded di microsoft
Le piattaforme embedded di microsoft includono a questo punto:
- .Net Micro Framework: indirizza l'hardware di fascia minima, è adatto per dispositivi wareable, piccola automazione industriale e applicazioni su oggetti di largo consumo
- Windows CE: Indirizza lo sviluppo per elettronica di consumo più sofisticata come la telefonia cellulare, computer sofisticati per automobili etc
- Windows XP Embedded: è la piattaforma per sviluppo embedded più potente dal punto di vista funzionale, dispone di tutte le capacità della piattaforma Windows XP e richiede hardware intel X86.
La figura riportata di seguito illustra le 3 piattaforme ed il tipo di target applicativo che permettono di indirizzare.
Le piattaforme embedded a confronto
Scendendo nel dettaglio del confronto delle piattaforme embedded possiamo notare alcuni aspetti interessanti:
Micro framework può eseguire applicazioni .Net con soli 300K
Per una applicazione .Net Compact Framework Windows CE richiede almeno 10MB.
Windows XP Embedded ha requisiti di memoria 100 volte superiori.
Micro framework permette l'utilizzo di hardware a bassissimo consumo di energia
Possiamo immaginare che un dispositivo Micro Framework può funzionare con hw che non richiede ricarica o sostituzione delle batterie per molto tempo.
Questa caratteristica lo rende adatto per l'elettronica su oggetti di largo consumo.
Rispetto alle altre piattaforme Micro framework ha un run time molto semplice
Vedremo che Micro framework offre funzionalità grafiche molto interessanti ma non dispone del motore directX, di applicazioni client come il browser, o per la gestione dei dati come SQLServer Compact Edition.
A livello di sistema, vedremo che Micro Framework implementa un multithreading di tipo cooperativo non realtime mentre windows CE permette un multithreading di tipo preemptive e supporta funzioni di tipo realtime.
La tabella illustrata di seguito mostra queste ed altri dettagli di differenziazione tra le 3 piattaforme embedded:
| .NET Micro Framework
| Windows CE
| Windows XPe
|
Example Devices
| Sensor Nodes, Aux displays, Health Monitoring, Remote Controls, Robotics
| GPS Handhelds, PDAs, Automotive, Set Top Boxes
| Thin Clients, ATMs, Kiosks
|
Features
| Connected, Small, Wearable, Graphical UI
| Connected, Graphical UI, Server, Browser, RAS, DirectX
| PCclass performance, PC networking
|
Footprint
| 250-500KB managed code Full featured
| 300KB+ without managed code 12MB with managed code
| 40MB + Depending on features
|
Power
| Very low power
| Low power
| Mains power
|
CPU
| ARM7, ARM9, No MMU
| X86, MIPS, SH4, ARM, with MMU
| X86
|
Real-time
| Not Real-time
| Hard Real-time
| Real-time capable through 3rd party extensions
|
Managed vs. Native Code
| Managed via .NET Micro Framework, native code through interop only.
| Supports both, managed code requires .NET Compact Framework
| Supports both, managed code requires .NET Framework
|
Un po' di storia
Micro Framework nasce nel 2001 con il nome di TinyCLR, all'interno del progetto Smart Personal Object Technology (SPOT).
La prima impementazione Micro Framework si vede nel 2004 con gli Smart Watches di MSN Direct.
Nel 2005 microsoft rilascia una implementazione Microsoft TV basata su Micro Framework insieme alle altre implementazioni, più sofisticate, basate su Windows CE.
Alla Microsoft Embedded Developer Conference (MEDC) del 2006 microsoft mostra il Sumo Robot Kit, una prima implementazione Micro Framework veramente sofisticata.
Con Windows Vista Sideshow, l'SDK 2.0 rilasciati a Febbraio 2007 e le schede per sviluppo HW proposte sul mercato da vari partner microsoft, micro framework diventa finalmente una piattaforma a disposizione di tutti.
Caratteristiche di micro framework
Ecco alcuni punti chiave che caratterizzano Micro Framework:
Runtime features
Dal punto di vista funzionale Micro Framework si evidenzia per:
Il Runtime grafico che implemeta l'object model Windows Presentation Foundation (WPF).
Questo significa che con Micro Framework è possible comporre controlli utilizzare colori, gradienti e trasparenze, utilizzare i pannelli di gestione del layout.
Questo significa inoltre che la programmazione delle interfacce Micro Framework avviene con lo stesso modello di programmazione utilizzato per le altre piattaforme microsoft.
I servizi di
Runtime. Alcuni esempi interessanti includono:
- la gestione dei Threads, che si utilizzano con le stesse, classi (Thread) e namespaces (System.Threading) utilizzate dalle altre implementazioni .Net.
- la gestione della memoria: infatti Micro Framework implementa un algoritmo di Garbage collection appositamente progettato per minimizzare la occupazione di memoria delle applicazioni.
- Il support della localizzazione delle applicazioni; infatti, con Micro Framework è possibile creare applicazioni con diverse localizzazioni all'interno di resource files.
Le Funzioni di interazione con periferiche hardware.
Micro Framework permette di gestire dispositivi periferici tramite un insieme di protocolli standard ed utilizzati sul mercato come:
- Managed drivers for LCDs
- Universal Asynchronous Receiver/Transmitter (USART)
- I2C™
- General-purpose I/O (GPIO)
- Pulse-Width modulation (PWM)
La interazione con questo tipo di dispositivi avviene sempre tramite codice managed, agendo sulle classi .Net che li rappresentano ed intercettando gli eventi da esse scatenati.
La tabella illustrata di seguito mostra alcuni esempi di device esterni, con quale protocollo e quali API Micro Framework permette di interagire con essi.
External device | Protocol to communicate | API to control |
Bottoni | GPIO | Microsft.SPOT.Hardware.InterruptPort (o Port family e classi drivate in generale) |
Potenziometri/Attuatori | GPIO (PWM non e' disponibile al momento) | Microsft.SPOT.Hardware.InterruptPort (o Port family e classi drivate in generale) |
Accelerometri | SPI o I2C (tipicamente) | Microsft.SPOT.Hardware.SPI e Microsft.SPOT.Hardware.I2CDevice |
Outputs booleani (backlight, vibrator) | GPIO | Microsoft.SPOT.hardware.Backlight o Microsoft.SPT.Hardware.OutputPort |
Monochrome LCD | SPI o I2C o driver nativo (tipicamente) | Microsft.SPOT.Hardware.SPI e Microsft.SPOT.Hardware.I2Cdevice. LCD (display) API (LCD_BitBlt e LCD_BitBltEx) |
OEM-specific (heart rate monitor, air pressure sensor, touch screen) | SPI o I2C o Seriale (Tipicamente, Dipende dal device) | Microsft.SPOT.Hardware.SPI, Microsft.SPOT.Hardware.I2Cdevice e Microsft.SPOT.Hardware.SerialPort |
Battery monitoring | Battery API | Microsft.SPOT.Hardware.Battery e Battery and Charger HAL API |
Flash memory | | Microsoft.SPOT.ExtendedWeakReferences Microsoft.SPOT.Logging (solo per debug)
HAL FLASH API |
Bluetooth | Seriale o SPI (dipende dal controllore, vedi Promi-SD o BlueCore) | Microsoft.SPOT.hardware.SerialPort o Microsoft.SPOT.Hardware.SPI |
802.15.4 | SPI
(Tipicamente, vedi Ember or Chipcon CC2420) | Microsoft.SPOT.Hardware.SPI |
EEPROM memory | Unsupported Legacy | n/a |
Calibrated accurate time | Dell'apposito codice e' provvisto nel porting kit ma deve essere abilitato manualmente | |
L'esempio di codice illustrato di seguito mostra alcune istruzioni C# molto semplici per intercettare un evento proveniente da bottone (device esterno) collegato al sistema tramite il pin 12 di un bus GPIO.
Tool di sviluppo
Oltre che per le funzioni che implementa, che abbiamo visto essere molto interessanti, Micro Framework si differenzia dalle altre piattaforme per gli strumenti per lo sviluppatore.
Installando Visual Studio 2005 e l'SDK Micro Framework lo sviluppatore potrà disporre:
- Templates di progetto per la realizzazione di applicazioni
- Supporto Intellisense
- Evendi di PostBuild
- Deployment delle applicazioni ai device (seriale, usb o emulatore)
- Debugging interattivo dall'IDE, sia verso l'emulatore che verso il dispositivo hardware
La figura illustrata di seguito mostra una applicazione Micro Framework nell'ambiente di sviluppo Visual Studio 2005 e l'emulatore di default, installato dall'SDK.

Schema architetturale
Il seguente schema illustra una architettura di massima del runtime microframewrok.
Lo strato di basso livello Hardware Abstraction Layer (HAL) definisce una prima astrazione dell'hardware sottostante.
Questo permette di limitare gli sforzi necessari per portare Micro Framework verso nuove piattaforme, che consiste nel riscrivere un numero limitato di API nella HAL.
- Il Platform Abstraction Layer (PAL) realizza su di essa alcune funzioni di runtime, necessarie per il funzionamento del sistema (timer, funzioni di accesso alla ram ed IO etc).
Al livello dello strato CLR sono realizzati:
L'Execution Engine: il vero motore di esecuzione del codice binario Micro Framework.
Il codice MSIL di Micro Framework è eseguito con un approccio di tipo interpretato.
Questo permette di minimizzare l'occupazione della memoria della applicazione in quanto, un approccio compilato, richiederebbe almeno di caricare in memoria 2 copie dei binari applicazione (il binario MSIL ed il codoce binario compilato)
Il Type System necessario per la esecuzione di applicazioni .Net.
Per esempio, Il type system serve per gestire la istanziazione delle classi, la esecuzione dei costruttori e garbace collection ed anche per realizzare le funzioni di reflection.
Il Garbage collector che implementa la gestione della memoria.
Micro Framework è stata implementata una versione completamente custom del garbage collector che, per massimizzarne l'efficienza in spazio, implementa un algoritmo di tipo Mark and sweep piuttosto che generazionale, come avviene per le altre implementazioni .Net.
Piattaforme supportate
Micro Framework è disponibile, come bootable runtime, sulle seguenti piattaforme hardware (Aprile 2007):
- ARM7TDMI @ 27MHz (384K RAM, 1M Flash)
- ARM7TDMI @ 50MHz (4M RAM, 2M Flash)
- ARM920T @ 96MHz (4M RAM, 2M Flash)
- ARM Cortex M3
- Motorola 68K (implementazioni custom)
Come hosted runtime, Micro Framework è disponibile su piattaforme hardware come:
- Dual ARM7TDMI @100Mhz (32M RAM, 1G Flash); con sitemi operativi NetOS/ThreadX per CONNECTME e WinCE.
- Intel x86; con sitemi operativi Windows XP/Vista.
Il Porting di Micro Framework come bootable runtime può richiedere la riscrittura di 80-100 APIs.
Come hosted runtime, il porting si limita alla riscrittura di 20-40 APIs.
Come si sviluppa una applicazione Micro Framework?
Di seguito illustro alcuni partner che vendono sul mercato kit di sviluppo per Micro Framework.

Un kit di sviluppo come quello illustrato in figura include generalmente una scheda su cui sono montati:
- Il processore
- Micro Framework (es. su memoria rom o flash)
- Alcune periferiche di base (es. un display LCD).
- Una porta seriale o USB che permette di collegare la scheda al computer dello sviluppatore, durante la attività di sviluppo.
Per realizzare una applicazione Micro Framework sarà in generale necessario:
- Disporre di Visual Studio 2005 e l'SDK di Micro Framework
- Acquistare un kit di sviluppo come quello illustrato in figura.
- (Se necessario,) personalizzare l'emulatore per simulare in esso il comportamento delle periferiche del sistema che vogliamo realizzare.
- Sviluppare la applicazione sull'emulatore.
- Eseguire test finale sul kit di sviluppo.
Le figure illustrate di seguito mostrano una applicazione molto semplice che ho utilizzato per esemplificare la realizzazione un computer di bordo per una automobile.
La immagine di destra mostra una versione dell'emulatore in cui ho aggiunto alcuni tasti (i.e. periferiche GPIO) per simulare il trip computer reale.

Maggiori informazioni
Ecco alcuni riferimenti dove ottenere maggiori informazioni sull'utilizzo Micro Framework:
Allego a questo post la presentazione "Introduzione a Micro Framework" (slides e registrazione) che illustrano alcuni dettagli aggiuntivi su Micro Framework ed i punti importanti della applicazione TripComputerSample.
Attachment(s): 1. Introduzione a microframework rel.pptx