Metti il .Net Framework nel micro ! - Il mondo embedded secondo Microsoft Paolo Patierno Software Engineer
←
→
Trascrizione del contenuto della pagina
Se il tuo browser non visualizza correttamente la pagina, ti preghiamo di leggere il contenuto della pagina quaggiù
Metti il .Net Framework nel micro ! Il mondo embedded secondo Microsoft Paolo Patierno Software Engineer
Chi sono … contatti • Blog (su DotNetCampania) • http://dotnetcampania.org/blogs/paolopat/default.aspx • Blog (su Embedded101) • http://www.embedded101.com/Blogs/PaoloPatierno.aspx • Twitter • @ppatierno • Linkedin • http://it.linkedin.com/in/paolopatierno • Skype • paolopat80 • Email • paolo.patierno@gmail.com
Agenda • Perché e cos’è ? Ma soprattutto cosa non è ! • Internals : l’architettura • IDE ed SDK • Hardware Object Model • Base Class Library e SPOT Library • Hardware ed Emulatore • DEMO : sviluppo e deploy
Perché ? • Nel mondo, i sistemi embedded sono ormai diffusi ovunque ma : • Gli skill necessari per lo sviluppo sono elevati; • Il firmware è tipicamente sviluppato in C/C++; • I tool di sviluppo spesso non sono molto user friendly (Keil, Iar, AVR Studio, ...) rispetto Visual Studio ; • Il .Net Micro Framework si propone come strumento per lo sviluppo sui sistemi embedded, sfruttando un ambiente come Visual Studio ed un linguaggio come il C# (anche VB dalla 4.2). Il tutto ovviamente con codice managed;
Cosa non è … cosa è … • Non è ... • Un sistema operativo tradizionale con un runtime (virtual machine) di codice managed on top; • E’... • Un mix tra le funzionalità tradizionali di un sistema operativo (gestione risorse, controllo esecuzione, Input/Output, ...) e le funzionalità tradizionali di un runtime (GC, execution engine, interop, ...); • Bootable runtime, al reset il «TinyBooter» carica il «TinyCLR»;
Architettura User Applications & Libraries managed Libraries .NET WPF COMM … native Execution Type Garbage Runtime per il CLR Engine System Collector Interop codice managed Astrazione PAL Timers RAM I/O dell’hardware Accesso diretto HAL Drivers or OS Facilities all’hardware ~20 – 30 KB Hardware
Compilazione ed Esecuzione Assembler C/C++ .Net Framework .Net Micro Framework Assembler Source code Source code Source code Source Compiler Compiler Microsoft Microsoft Intermediate Intermediate Language Language Assembly Assembly Just in Time Assembler Compiler Compiler Intermediate 1:1 1:n Managed Language Environment Interpreter Machine Code Machine Code Machine Code Computer Processor
IDE, SDKs e Porting Kit • Visual Studio 2010 e 2012; • .Net Micro Framework SDK (fino alla 4.1 sul sito Microsoft, dalla 4.2 su CodePlex … è open source); • OEMs SDK (SecretLabs, GHI, …) • Ciascun OEM può customizzare alcune funzionalità ed esportarne delle altre • Porting Kit : permette di sviluppare la parte di basso livello (in C/C++ e Assembler) che si interfaccia con l’hardware : • Non c’è un IDE specifico (c’è un tentativo nella 4.2) e si può compilare con GCC (CodeSourcery), Keil MDK, ARM RVDS • Include lwIP come stack TCP/IP ed OpenSSL per le funzionalità di SSL/TLS;
Hardware : Object Model • Bit-Based Control • Scrittura/Lettura di una porta e quindi della sequenza di bit che ne costituiscono il contenuto avviene attraverso delle operazioni logiche AND e OR e con l’ausilio di opportune maschere #define PORTA 0x0000A000 // indirizzo PORTA ... ... DWORD* pPort = PORTA; *pPort |= 0x00000020; // setto ad 1 il bit 5 ... if (*pPort & 0x00000001) // verifico se il bit 0 vale 1 { ...
Hardware : Object Model • Ogni Port è rappresentata attraverso l’istanza di una classe • OutputPort e InputPort rispettivamente per rappresentare porte di output e di input; InterruptPort per la gestione delle interruzioni con un event handler; • Scrittura/Lettura attraverso i due metodi Write() e Read() OutputPort outPort = new OutputPort(Cpu.Pin.GPIO_Pin0, false); outPort.Write(true); ... InputPort inPort = new InputPort(Cpu.Pin.GPIO_Pin1, true, Port.ResistorMode.Disabled); bool value = inPort.Read();
Hardware : Object Model OutputPort Object sull’heap +Write(bool) InputPort Native Code +bool Read() outPort Native Code Reference sullo stack inPort Pin3 Pin2 Pin1 Pin0 Porta fisica • Più che alla port, permettono di accedere al singolo pin all’interno di essa
BCL e SPOT • Supporto per le classi principali del «fratello maggiore» .Net Framework (es. collections, threading, networking, …); • Namespace Microsoft.SPOT con le classi per la gestione managed dell’hardware e supporto per i principali protocolli di comunicazione (es. SPI, I2C, 1-Wire, UART, …); • DPWS (Device Profile for Web Services) implementa un sottoinsieme delle specifiche dei Web Services (WS-*) ed aggiunge un meccanismo di ricerca dei devices che esponsono determinati servizi (discovery/probing)
Base Class Library Array Attribute DateTime Delegate Enum Exception System Math TimeSpan TimeZone Type WeakReference Hashtable System.Globalization CultureInfo DaylightTime DateTime/Number FormatInfo ArrayList Hashtable System.Resources ResourceManager System.Collections Queue Stack System.Diagnostics Debugger System.Xml XmlReader System.IO Stream UTF8Encoding System.Text System.Text.RegularExpressions Regex Match StringBuilder
Base Class Library WebRequest WebResponse HttpWebRequest HttpWebResponse System.Net Dns EndPoint IPEndPoint Socket System.Reflection Assembly FieldInfo MethodInfo PropertyInfo Thread Timer Interlocked System.Threading AutoResetEvent ManualResetEvent
SPOT Library e DPWS Microsoft.SPOT Microsoft.SPOT.Hardware Microsoft.SPOT.Cryptography GPIO UART SPI I2C 1WIRE PWM RSA XTEA Microsoft.SPOT.IO Microsoft.SPOT.Presentation Removable Media VolumeInfo Controls Media Shapes Microsoft.SPOT.Touch Microsoft.SPOT.Input Microsoft.SPOT.Net FTP Microsoft.SPOT.Messaging Microsoft.SPOT.Net.NetworkInformation Microsoft.SPOT.Time NetworkInterface NetworkChange Dpws Ws.Services Microsoft.SPOT.Net.Security Client Device Soap Binding Microsoft.SPOT.Wireless Discovery Transport Microsoft.VisualBasic Microsoft.SPOT.Cryptoki Microsoft.SPOT.Update
Emulatore Managed Application Emulator Emulator Emulator Custom Emulator Configuration Component Component Component Engine • Configurabile via XML; • Utilizzo e configurazione di componenti esistenti; • Possibilità di creare nuovi componenti; • Sviluppare la UI dell’emulatore;
Hardware
Vantaggi/Svantaggi • Costi hardware bassi (footprint RAM, CPU, …); • Costi sviluppo bassi • Time to market rapido (prototipizzazione); • Codice managed (indipendente dall’hardware); • Visual Studio e C#/ VB.Net per lo sviluppo; • Supporto debugging sul target via Visual Studio; • Sviluppo iniziale su PC attraverso l’emulatore; • No real time (latenza interrupt e GC); • Più consumo di risorse (Flash e RAM); • Meno performance (codice managed interpretato);
DEMO
Qualche libro ... • Expert .Net Micro Framework 2° Edition - Jens Kuhner, Apress (2009) • Embedded Programming with the Microsoft .Net Micro Framework – D.Thompson, R.S.Miles, Microsoft Press (2007)
… e risorse dal Web • .Net Micro Framework Official Site • http://www.netmf.com/ • .Net Micro Framework Codeplex • http://netmf.codeplex.com/ • .Net Gadgeteer • http://www.netmf.com/gadgeteer/ • TinyCLR.it • http://www.tinyclr.it/ • TinyCLR.com • http://tinyclr.com/ • Netduino • http://netduino.com/ • uPLibrary • http://uplibrary.codeplex.com/
Puoi anche leggere