# .NET Micro Framework

Das .NET Micro Framework von Microsoft ist ein Abkömmling des .NET Frameworks zur Programmierung von Embedded-Systemen mit geringen Ressourcen wie Getränkeautomaten oder Bordsystemen in Automobilen.

## Überblick

So wird beispielsweise die MSN Watch mit dem .NET Micro Framework betrieben. Ein weiterer Einsatzbereich sind Sideshow Gadgets, die von Windows Vista unterstützt werden. Die Firma Digi International hat im April 2007 mit ihrem Kommunikationsmodul Digi Connect ME die erste Ethernet-Netzwerklösung vorgestellt.
Das Entwicklungskonzept basiert auf dem .NET Framework. Als Programmiersprache kommt jedoch nur C# zur Verwendung.

## Technische Einzelheiten

Die Entwicklung mit dem Micro Framework ist grundlegend anders als die Entwicklung für Windows CE mit dem .NET Compact Framework. Das Micro Framework selbst fungiert als Betriebssystem direkt auf der Hardware. Eine entsprechende Hardwareabstraktionsschicht ist im Micro Framework integriert.
Das Micro Framework ist kein Echtzeitsystem. Der Code wird nicht wie bei den anderen .NET Frameworks üblich mit Hilfe des Just-in-time-Compilers zur Laufzeit kompiliert, sondern interpretiert. Die damit einhergehenden Geschwindigkeitseinbußen können jedoch kompensiert werden, indem die performancekritischen Codesegmente als nativer Code implementiert und über Interop aufgerufen werden.

### Hardwareabstraktionsschicht

Die Hardwareabstraktionsschicht (HAL) kann mit Hilfe von Delegaten und Ereignissen mit der Common Language Runtime (CLR) kommunizieren. Somit ist es möglich, das Gerät in einen Schlafzustand zu versetzen, jedoch immer noch in der Lage zu sein, auf bestimmte Ereignisse zu reagieren.

#### Treiber im HAL

Folgende Treiber sind im HAL bereits integriert:
* Gepufferter serieller RS-232 I/O
* Serial Peripheral Interface (SPI) mit 13,8 MHz
* Monochrom LCD (120 × 96)
* Batterieüberwachung (Temperatur, Spannung und Ladezustand)
* Bluetooth
* 802.15.4 low-rate Wireless Personal Area Networking (WPAN)
* Flash (parallel) und EEPROM (seriell) Speicher
* Kalibrierte Zeit
* Boolesche Ausgaben (Hintergrundbeleuchtung, Vibration etc.)
* Boolesche Eingänge (Schaltflächen etc.)
* PWM-Ausgänge (Piezolautsprecher, Dimmer, Vibration)
Mit dem Micro Framework ist es weiterhin möglich, Treiber in Managed Code zu schreiben.

### Multithreading

Das Micro Framework stellt Multithreading bereit, selbst wenn die zu Grunde liegende Hardware dies nicht unterstützt. Genau betrachtet handelt es sich bei der Execution Engine nicht um eine multithread-fähige Engine. Vielmehr kann diese als Simulator einer solchen betrachtet werden. Der Kontextwechsel erfolgt in 20-ms-Abständen, Threads sind priorisierbar und unterstützen Unterbrechungen.

### Garbage Collection

Auch der Garbage Collector hat einige Änderungen erfahren. Auf Grund des meistens sehr kleinen Arbeitsspeichers auf den Zielsystemen wurde auf einen hierarchischen Garbage Collector verzichtet. Stattdessen wird ein Mark-And-Sweep-Algorithmus benutzt. Dieser wird zusätzlich durch Ablage von Metadaten auf dem Heap optimiert.
Um die Nutzung des Arbeitsspeichers weiter zu verbessern, wurde der Garbage Collector dahingehend erweitert, dass er Daten in nicht flüchtigen Speicher auslagern kann, wenn die zugehörige Anwendung inaktiv ist.

### Klassenbibliothek

Das Micro Framework enthält eine Untermenge der Klassen des .NET Frameworks. Bei der Auswahl der Namensräume wurde darauf geachtet, lediglich die Teile in das Micro Framework zu integrieren, die für den Betrieb kleiner, autonomer Geräte nötig sind.
Neben den Namensräumen des .NET Frameworks wurde der Namensraum SPOT hinzugefügt, der lediglich im Micro Framework zur Verwendung kommt. SPOT bedeutet Smart Personal Objects Technology und ist die Microsoft-Terminologie für elektronische Geräte wie Uhren, Wecker, Schlüsselanhänger etc., die deren Besitzer Informationen zugänglich machen.
Die vollständig oder teilweise geerbten Namensräume der .NET Base Class Libraries:
* System
* System.Collections
* System.Diagnostics
* System.Globalization
* System.IO
* System.Net
* System.Net.Sockets
* System.Reflection
* System.Resources
* System.Runtime.CompilerServices
* System.Runtime.InteropServices
* System.Runtime.Remoting
* System.Runtime.Text
Die neu hinzugefügten Namensräume für intelligente persönliche Objekte:
* Microsoft.SPOT
* Microsoft.SPOT.Cryptography
* Microsoft.SPOT.Hardware
* Microsoft.SPOT.Input
* Microsoft.SPOT.Net.NetworkInformation
* Microsoft.SPOT.Presentation
* Microsoft.SPOT.Presentation.Controls
* Microsoft.SPOT.Presentation.Media
* Microsoft.SPOT.Presentation.Shapes

## Änderungen in Version 2.5

Das .NET Micro Framework 2.5 wurde mit einem TCP/IP-Stack erweitert. Darauf aufbauend wurde ein DPWS-Stack in das Micro Framework integriert. Dieser DPWS-Stack wurde eigens für das Micro Framework in Managed Code entwickelt und trägt den Namen MFDPWS. Er stellt eine Untermenge des DPWS-Standards dar. Durch den DPWS-Stack ist es nun möglich, Web-Services for Devices (WSD) zu nutzen. Dabei kommunizieren die Netzwerkteilnehmer über SOAP und können Dienste des jeweils anderen Teilnehmers nutzen.

## Technische Voraussetzungen

Aktuell unterstützt das Micro Framework ARM7 und ARM9 Prozessoren sowie Analog Devices Blackfin. Das Zielsystem muss über mindestens ~128 kB RAM und 512 kB Flash/ROM zur Entwicklung verfügen. Im laufenden Betrieb hat das Micro Framework mindestens eine Größe von 390 kB. Die Größe ist abhängig von der Menge der verwendeten Funktionen.
Für die Installation und das Debugging benötigt das Gerät eine serielle, USB- oder Netzwerkschnittstelle.

## Entwicklungsumgebung

Als Integrierte Entwicklungsumgebung kommt Microsofts Visual Studio 2008 oder höher in Verbindung mit dem .NET Micro Framework SDK zum Einsatz. Außerdem benötigt man das Board Support Package für das jeweilige Gerät.