Prova di titolo - Better Embedded
Download
Report
Transcript Prova di titolo - Better Embedded
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 Netduino
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)
Server WEB
HTTP
TCP/IP
Digital
INPUTs
Digital
OUTPUTs
Browser
(PC, SmartPhone, Tablet)
.NET MF
BOARD
Analog
INPUTs
Analog
OUTPUTs
Access Point WiFi con SSID
«maiorfi_sopra» (è aperto!)
http://192.168.1.50/demoiot
Visual Studio 2010 (anche in versione Express)
.NET Micro Framework SDK (4.2 QFE2)
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, ChipworkX
€120-250
Moduli
con connettori standard «Gadgeteer»
in formato «shield» Arduino
da collegare con jumper-wires
«proto-boards»
innovactive.it
mountaineer-boards.com
tinyclr.com
netduino.com
loveelectronics.co.uk
sytechdesigns.com