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

  • Le applicazioni Micro framework hanno un Memory Footprint molto ridotto (~256K RAM)
    Per esempio, Windows CE permette di scrivere applicazioni con 300K di memoria solo sviluppando codice nativo.
  • Micro framework permette lo sviluppo su hardware particolarmente semplice
    Per esempio, non richiede nemmeno l'uso di Memory Management Unit
  • Micro framework permette lo sviluppo embedded con Visual Studio 2005
    • L'ambiente Include un emulatore completo e funzionale
    • Permette lo sviluppo con linguaggio C# e .Net framework
  • Micro framework esegue codice managed controllato e sicuro

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:

  • Micro Framework è un runtime Bootable: MF Può eseguire boot autonomamente sull'hardware anche se, ovviamente, può essere ospitato su sistemi operativi esistenti.
  • Micro Framework permette un modello di sviluppo Sicuro: infatti, l'accesso alle risorse avviene tramite oggetti con proprietà tipizzate, metodi ed eventi.
  • Micro Framework è una piattaforma di esecuzione sicura: micro framework utilizza assemblies firmati ed il loader degli assemblies esegue verifiche di integrità del codice binario che viene eseguito.
  • Micro Framework Estensibile A livello software ed Hardware:
    • A livello software perchè, sul runtime Micro Framework, è possibile costruire nuove classi e librerie che ne estendano le capacità
    • A livello hardware perchè, Micro Framework può interagire con dispositivi periferici, tramite un insieme di protocolli standard predefiniti su porte seriali, parallele, bluetooth etc.
  • Micro Framework è disponibile su varie architetture Hardware ma può essere portato anche su Hardware attualmente non tramite un Porting Kit reso disponibile da microsoft.

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:

  1. Disporre di Visual Studio 2005 e l'SDK di Micro Framework
  2. Acquistare un kit di sviluppo come quello illustrato in figura.
  3. (Se necessario,) personalizzare l'emulatore per simulare in esso il comportamento delle periferiche del sistema che vogliamo realizzare.
  4. Sviluppare la applicazione sull'emulatore.
  5. 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.