Sviluppo di soluzioni embedded moderne con .NET Micro Framework Lorenzo Maiorfi – Innovactive Engineering s.r.l.  Virtualizzazione del «core»  Un processore software (CLR) stack-based esegue bytecode espresso in linguaggio «CIL»  Integrazione binaria tra moduli software  La CLR si occupa di threading, gestione della memoria, interazione con procedure «native»,ecc.  La CLR «consuma» delle unità eseguibili dette «assembly»  Un assembly è costituito da:  metadati (un db interno che descrive i «prototipi» di tutti i tipi e membri definiti nell’assembly)  bytecode CIL (la sequenza di istruzioni che costituisce il «corpo» di ciascun metodo (funzione)  manifest (esprime le dipendenze da altri assembly) 1. 2. 3. 4. 5. Lo sviluppatore scrive codice utilizzando linguaggi di alto livello (C#/VB.NET) Il compilatore genera uno o più assembly Il bytecode degli assembly così generati viene scritto sulla memoria Flash del dispositivo mediante l’IDE o con un apposito tool (MFDeploy) Il device al reset esegue il «TinyBooter» che a sua volta carica la «TinyCLR» La TinyCLR carica gli assembly ed esegue il metodo «entry-point» utente     Utilizziamo Mountaineer USB Eseguiamo la scrittura, il test, il debug e il rilascio di un semplice firmware Diamo uno sguardo al compilato “IL” Esploriamo più nel dettaglio il modello di threading e l’interazione con il flusso di esecuzione del firmware nativo del microcontrollore (gestione interrupt)  Produttività  Ambiente di sviluppo, compilatore, debugger ed emulatore costituiscono la toolchain più produttiva disponibile nel mercato embedded  Affidabilità  Portabilità  Runtime «managed», controllo completo su ogni «layer» dell’applicazione  Virtualmente portabile su tutti qualsiasi core, attualmente copre tutti i core ARM™ 32 bit  Supporto  Completamente «open», molte librerie di base, molte risorse community Applicazione e Librerie Utente Layer Applicazione «PORTING» Layer Librerie Layer Runtime Librerie .NET WPF Comms … CLR Exec Engine Type System Garbage Coll. Interop PAL HAL Layer Hardware Timers Drivers RAM oppure I/O OS Processore e Periferiche Facilities  Funzionalità di base  Tipi di base, XML, webservice, globalizzazione, crittografia, manipolazione testo, diagnostica, sicurezza  Funzionalità di sistema  Networking, file-system, user interface, threading  Gestione periferiche  USB (device/host), GPIO (con interrupt), I2C, SPI, UART, ADC, PWM, Watchdog, power  Componenti di terze parti  CAN, DAC, RTC, Glide (UI+Touch), SQLLite, ecc.       Sperimentazione con un semplice ADC 12bit con interfaccia SPI (Microchip MCP3201) Sviluppo di un semplice driver “managed” Aggiunta di nuove funzionalità tramite ereditarietà Astrazione del modello di interazione con la periferica Implementazione di un nuovo driver con lo stesso modello Integrazione dei due componenti in un’applicazione completa  Controllo Accesso Impianti «Outdoor»  Identificazione mezzi RFID (short/long range)  ZigBee (mesh)  Integrazione con sistemi informativi di terze parti (AS/400, Windows, Unix)  Controllo barriere mezzi  Logging remoto attività sistema  Monitoraggio continuo parametri ambientali delle centraline  Banco prove motori ventilanti  Caratterizzazione flusso/potenza a norme CEI  Acquisizione continua di     Encoder velocità motori Pressioni (in diversi punti del tubo Venturi) Temperatura/umidità ambientali Potenza DC e AC  Gestione motori induzione 220V/50Hz, 110V/60Hz, DC brushless con e senza controller integrato  Interfacciamento con software gestione prove «kiosk» (Windows 7+WPF+touch)  Terminali controllo produzione  Gestione ingressi digitali «conta-pezzi» industriali (24V, PLC)  Interfaccia utente con display Touch 4.3" Wide  Lettore RFID  Lettore Barcode  Supporto Ethernet/WiFi  Tastiera capacitiva con microcontrollore dedicato  Buzzer piezoelettrico  Controllo uscite digitali 24V e proporzionali (anche con controllo PID)  Banco cassa autonomo self-checkout  Gestisce tutta l’attività di check-out senza operatori, parallelizzando le fasi «lente»  14 moduli (hardware+firmware) indipendenti         8 Celle di carico 2 Motori AC trifase con encoder assoluto SSI 36 Barriere IR (30 singole,4 array da 32, 2 da 10) 8 Motori DC (gestione portelli) con lock magnetico 8 Lettori barcode integrati 14 Nastri trasportatori/mototamburi 20 strisce led «guida» multi-colore Integrazione con software «front-end» kiosk  Performance  Non adatto ad applicazioni molto intensive sul piano computazionale  Controllo del timing  Non adatto ad applicazioni real-time  Non è un OS  Non esiste un supporto «di base» per processi, file-system, comunicazione, sicurezza, ecc.  Pochi porting  GHI Electronics (4), Secret Labs (2), Mountaineer Group (2), Sytech Designs, Love Electronics  Performance  Interoperabilità codice «managed» / nativo  Controllo del timing  Utilizzo di schede multi-processore (come la Triumvirato: USBizi+MSP430+CPLD !!!)  Non è un OS  Molti servizi sono stati sviluppati nel tempo dai vendor come estensioni del framework  Pochi «porting»  Molti sono open (Netduino, Mountaineer Boards, GHI OSH) e lo stesso Porting Kit è completamente open (netmf.codeplex.com)    Visual Studio 2013 (anche in versione Community) .NET Micro Framework SDK (4.3.1 R2) Scheda .NET MF a scelta tra  Fez-Cerberus, Netduino, Fez-Panda II, Fez-Cerbuino Bee €<30  Netduino+, Mountaineer, Fez-Hydra, ArgonR1, Nano €<100  Fez-Spider, Fez-Raptor €120-250  Moduli     con connettori standard «Gadgeteer» in formato «shield» Arduino da collegare con jumper-wires «proto-boards» innovactive.it mountaineer-boards.com ghielectronics.com netduino.com