<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://dotnettoscana.org/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"><channel><title>Articoli</title><link>http://dotnettoscana.org/wikis/articles/default.aspx</link><description>Gli articoli della Community</description><dc:language>en-US</dc:language><generator>CommunityServer 2008.5 (Build: 30912.2823)</generator><item><title>Creiamo una console per Windows Virtual PC</title><link>http://dotnettoscana.org/wikis/articles/creiamo-una-console-per-windows-virtual-pc/revision/0.aspx</link><pubDate>Sun, 20 Sep 2009 14:18:02 GMT</pubDate><guid isPermaLink="false">ada252f7-7fca-4bac-88b6-ec47648018b0:6</guid><dc:creator>Marco Minerva</dc:creator><description>&lt;p&gt;&lt;a target="_blank" href="http://www.microsoft.com/windows/virtual-pc/"&gt;Windows Virtual PC&lt;/a&gt;, la nuova versione del software di emulazione targato Microsoft, &amp;egrave; disponibile per i sistemi operativi Windows 7 Professional, Ultimate ed Enteprise.&amp;nbsp;E&amp;#39; disponibile gratutitamente in versione &lt;a href="http://www.microsoft.com/windows/virtual-pc/download.aspx"&gt;Release Candidate&lt;/a&gt;; per la sua corretta esecuzione, &amp;egrave; necessario che il processore disponga delle funzionalit&amp;agrave; di virtualizzazione hardware. Se non si &amp;egrave; sicuri che il proprio sistema supporti tale caratteristica,&amp;nbsp;&amp;egrave; possibile eseguire il software diagnostico &lt;a target="_blank" href="http://securable.softonic.it/"&gt;SecurAble&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Scopo di questo articolo non &amp;egrave; per&amp;ograve; evidenziare le caratteristiche del prodotto (per cui si pu&amp;ograve; fare riferimento al link sopra riportato); quello che vogliamo fare &amp;egrave; realizzare una console di amministrazione per le macchine virtuali, simile a quella presente in Windows Virtual PC 2007. La nuova release del software, infatti, perlomeno attualmente, ne &amp;egrave; priva, quindi l&amp;#39;unico modo di gestire le macchine virtuali &amp;egrave; utilizzare la shell di Explorer. Tralasceremo gli aspetti di base, come la creazione delle form e l&amp;#39;impostazione delle propriet&amp;agrave; degli oggetti, per concentrarci invece sulla realizzazione delle funzionalit&amp;agrave; vere e proprie. E&amp;#39; comunque possibile scaricare il codice sorgente completo dell&amp;#39;applicazione che realizzeremo.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Il progetto&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;L&amp;#39;applicazione &amp;egrave; realizzata con Visual Studio 2008 SP1, linguaggio di programmazione C#, e consiste di un semplice form che l&amp;#39;interfaccia grafica di Virtual PC 2007:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;In fase di realizzazione...&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;La libreria per l&amp;#39;utilizzo di Virtual PC&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;In fase di realizzazione...&lt;/em&gt;&lt;/p&gt;</description></item><item><title>Creiamo una console per Windows Virtual PC</title><link>http://dotnettoscana.org/wikis/articles/creiamo-una-console-per-windows-virtual-pc/revision/4.aspx</link><pubDate>Wed, 16 Sep 2009 13:57:12 GMT</pubDate><guid isPermaLink="false">ada252f7-7fca-4bac-88b6-ec47648018b0:11</guid><dc:creator>Marco Minerva</dc:creator><description>&lt;p&gt;&lt;a target="_blank" href="http://www.microsoft.com/windows/virtual-pc/"&gt;Windows Virtual PC&lt;/a&gt;, la nuova versione del software di emulazione targato Microsoft, &amp;egrave; disponibile per i sistemi operativi Windows 7 Professional, Ultimate ed Enteprise.&amp;nbsp;E&amp;#39; disponibile gratutitamente in versione &lt;a href="http://www.microsoft.com/windows/virtual-pc/download.aspx"&gt;Release Candidate&lt;/a&gt;; per la sua corretta esecuzione, &amp;egrave; necessario che il processore disponga delle funzionalit&amp;agrave; di virtualizzazione hardware. Se non si &amp;egrave; sicuri che il proprio sistema supporti tale caratteristica,&amp;nbsp;&amp;egrave; possibile eseguire il software diagnostico &lt;a target="_blank" href="http://securable.softonic.it/"&gt;SecurAble&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Scopo di questo articolo non &amp;egrave; per&amp;ograve; evidenziare le caratteristiche del prodotto (per cui si pu&amp;ograve; fare riferimento al link sopra riportato); quello che vogliamo fare &amp;egrave; realizzare una console di amministrazione per le macchine virtuali, simile a quella presente in Windows Virtual PC 2007. La nuova release del software, infatti, perlomeno attualmente, ne &amp;egrave; priva, quindi l&amp;#39;unico modo di gestire le macchine virtuali &amp;egrave; utilizzare la shell di Explorer. Tralasceremo gli aspetti di base, come la creazione delle form e l&amp;#39;impostazione delle propriet&amp;agrave; degli oggetti, per concentrarci invece sulla realizzazione delle funzionalit&amp;agrave; vere e proprie. E&amp;#39; comunque possibile scaricare il codice sorgente completo dell&amp;#39;applicazione che realizzeremo.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Il progetto&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;L&amp;#39;applicazione &amp;egrave; realizzata con Visual Studio 2008 SP1, linguaggio di programmazione C#, e consiste di due semplici form: la prima ricalca l&amp;#39;interfaccia grafica di Virtual PC 2007, mentre l&amp;#39;altra permette di modificare le (per ora minimali)&amp;nbsp;opzioni del programma:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;In fase di realizzazione...&lt;/em&gt;&lt;/p&gt;</description></item><item><title>Creiamo una console per Windows Virtual PC</title><link>http://dotnettoscana.org/wikis/articles/creiamo-una-console-per-windows-virtual-pc/revision/3.aspx</link><pubDate>Tue, 15 Sep 2009 12:05:51 GMT</pubDate><guid isPermaLink="false">ada252f7-7fca-4bac-88b6-ec47648018b0:10</guid><dc:creator>Marco Minerva</dc:creator><description>&lt;p&gt;&lt;a target="_blank" href="http://www.microsoft.com/windows/virtual-pc/"&gt;Windows Virtual PC&lt;/a&gt;, la nuova versione del software di emulazione targato Microsoft, &amp;egrave; disponibile per i sistemi operativi Windows 7 Professional, Ultimate ed Enteprise.&amp;nbsp;E&amp;#39; disponibile gratutitamente in versione &lt;a href="http://www.microsoft.com/windows/virtual-pc/download.aspx"&gt;Release Candidate&lt;/a&gt;; per la sua corretta esecuzione, &amp;egrave; necessario che il processore disponga delle funzionalit&amp;agrave; di virtualizzazione hardware. Se non si &amp;egrave; sicuri che il proprio sistema supporti tale caratteristica,&amp;nbsp;&amp;egrave; possibile eseguire il software diagnostico &lt;a target="_blank" href="http://securable.softonic.it/"&gt;SecurAble&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Scopo di questo articolo non &amp;egrave; per&amp;ograve; evidenziare le caratteristiche del prodotto (per cui si pu&amp;ograve; fare riferimento al link sopra riportato); quello che vogliamo fare &amp;egrave; realizzare una console di amministrazione per le macchine virtuali, simile a quella presente in Windows Virtual PC 2007. La nuova release del software, infatti, perlomeno attualmente, ne &amp;egrave; priva, quindi l&amp;#39;unico modo di gestire le macchine virtuali &amp;egrave; utilizzare la shell di Explorer. Tralasceremo gli aspetti di base, come la creazione delle form e l&amp;#39;impostazione delle propriet&amp;agrave; degli oggetti, per concentrarci invece sulla realizzazione delle funzionalit&amp;agrave; vere e proprie. E&amp;#39; comunque possibile scaricare il codice sorgente completo dell&amp;#39;applicazione che realizzeremo.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;In fase di realizzazione...&lt;/em&gt;&lt;/p&gt;</description></item><item><title>Creiamo una console per Windows Virtual PC</title><link>http://dotnettoscana.org/wikis/articles/creiamo-una-console-per-windows-virtual-pc/revision/2.aspx</link><pubDate>Tue, 15 Sep 2009 12:04:48 GMT</pubDate><guid isPermaLink="false">ada252f7-7fca-4bac-88b6-ec47648018b0:9</guid><dc:creator>Marco Minerva</dc:creator><description>&lt;p&gt;&lt;a target="_blank" href="http://www.microsoft.com/windows/virtual-pc/"&gt;Windows Virtual PC&lt;/a&gt;, la nuova versione del software di emulazione targato Microsoft, &amp;egrave; disponibile per i sistemi operativi Windows 7 Professional, Ultimate ed Enteprise.&amp;nbsp;E&amp;#39; disponibile gratutitamente in versione &lt;a href="http://www.microsoft.com/windows/virtual-pc/download.aspx"&gt;Release Candidate&lt;/a&gt;; per la sua corretta esecuzione, &amp;egrave; necessario che il processore disponga delle funzionalit&amp;agrave; di virtualizzazione hardware. Se non si &amp;egrave; sicuri che il proprio sistema supporti tale caratteristica,&amp;nbsp;&amp;egrave; possibile eseguire il software diagnostico &lt;a target="_blank" href="http://securable.softonic.it/"&gt;SecurAble&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Scopo di questo articolo non &amp;egrave; per&amp;ograve; evidenziare le caratteristiche del prodotto (per cui si pu&amp;ograve; fare riferimento al link sopra riportato); quello che vogliamo fare &amp;egrave; realizzare una console di amministrazione per le macchine virtuali, simile a quella presente in Windows Virtual PC 2007. La nuova release del software, infatti, perlomeno attualmente, ne &amp;egrave; priva, quindi l&amp;#39;unico modo di gestire le macchine virtuali &amp;egrave; utilizzare la shell di Explorer. Tralasceremo gli aspetti di base, come la creazione delle form e l&amp;#39;impostazione delle propriet&amp;agrave; degli oggetti, per concentrarci invece sulla realizzazione delle funzionalit&amp;agrave; vere e proprie. E&amp;#39; comunque possibile scaricare il codice sorgente completo dell&amp;#39;applicazione che realizzeremo.&lt;/p&gt;</description></item><item><title>Creiamo una console per Windows Virtual PC</title><link>http://dotnettoscana.org/wikis/articles/creiamo-una-console-per-windows-virtual-pc/revision/1.aspx</link><pubDate>Tue, 15 Sep 2009 12:02:40 GMT</pubDate><guid isPermaLink="false">ada252f7-7fca-4bac-88b6-ec47648018b0:8</guid><dc:creator>Marco Minerva</dc:creator><description>&lt;p&gt;&lt;a target="_blank" href="http://www.microsoft.com/windows/virtual-pc/"&gt;Windows Virtual PC&lt;/a&gt;, la nuova versione del software di emulazione targato Microsoft, &amp;egrave; disponibile per i sistemi operativi Windows 7 Professional, Ultimate ed Enteprise.&amp;nbsp;E&amp;#39; disponibile gratutitamente in versione &lt;a href="http://www.microsoft.com/windows/virtual-pc/download.aspx"&gt;Release Candidate&lt;/a&gt;; per la sua corretta esecuzione, &amp;egrave; necessario che il processore disponga delle funzionalit&amp;agrave; di virtualizzazione hardware. Se non si &amp;egrave; sicuri che il proprio sistema supporti tale caratteristica,&amp;nbsp;&amp;egrave; possibile eseguire il software diagnostico &lt;a target="_blank" href="http://securable.softonic.it/"&gt;SecurAble&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Scopo di questo articolo non &amp;egrave; per&amp;ograve; evidenziare le caratteristiche del prodotto (per cui si pu&amp;ograve; fare riferimento al link sopra riportato); quello che vogliamo fare &amp;egrave; realizzare una console di amministrazione per le macchine virtuali, simile a quella presente in Windows Virtual PC 2007. La nuova release del software, infatti, perlomeno attualmente, ne &amp;egrave; priva, quindi l&amp;#39;unico modo di gestire le macchine virtuali &amp;egrave; utilizzare la shell di Explorer.&lt;/p&gt;</description></item><item><title>Introduzione al .NET Micro Framework</title><link>http://dotnettoscana.org/wikis/articles/introduzione-al-net-micro-framework/revision/0.aspx</link><pubDate>Wed, 31 Dec 2008 10:02:28 GMT</pubDate><guid isPermaLink="false">ada252f7-7fca-4bac-88b6-ec47648018b0:5</guid><dc:creator>Andrea Angella</dc:creator><description>&lt;p&gt;&lt;em&gt;Livello: Base - Autore: &lt;a href="/members/angellaa/default.aspx"&gt;&lt;em&gt;Andrea Angella&lt;/em&gt;&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Il presente articolo &amp;egrave; suddiviso nelle seguenti sezioni:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Introduzione allo sviluppo su piattaforme embedded&lt;/li&gt;
&lt;li&gt;Che cos&amp;#39;&amp;egrave; e perch&amp;eacute; &amp;egrave; stato creato il .NET Micro Framework&lt;/li&gt;
&lt;li&gt;Versioni disponibili e caratteristiche principali&lt;/li&gt;
&lt;li&gt;Architettura del framework e Common Language Runtime&lt;/li&gt;
&lt;li&gt;Uno sguardo alla Base Class Library&lt;/li&gt;
&lt;li&gt;Come iniziare a sviluppare con il .NET Micro Framework&lt;/li&gt;
&lt;li&gt;Risorse utili per ottenere maggiori informazioni&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;1.&amp;nbsp;&amp;nbsp;&amp;nbsp; Introduzione allo sviluppo su piattaforme embedded&lt;/h3&gt;
&lt;p style="text-align:justify;"&gt;I &lt;strong&gt;sistemi embedded&lt;/strong&gt; sono &lt;strong&gt;sistemi informatici dedicati&lt;/strong&gt; che vengono progettati, al contrario dei sistemi general purpuse, per svolgere compiti ben precisi e determinati. L&amp;#39;hardware in questo tipo di sistemi &amp;egrave; spesso progettato ad hoc e l&amp;#39;interazione con il mondo esterno rende indispensabile la capacit&amp;agrave; di raccogliere, campionare e trasmettere segnali utilizzando dispositivi quali sensori, attuatori e convertitori A/D e D/A. L&amp;#39;interazione con l&amp;#39;utente avviene con mezzi spesso semplificati quali pulsanti e display di dimensione ridotta. L&amp;#39;affidabilit&amp;agrave;, il costo e il consumo di energia diventano metriche importantissime da valutare in fase di progettazione e spesso questi sistemi sono soggetti a particolari vincoli real-time che se non rispettati posso anche portare a conseguenze molto gravi.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Esempi di sistemi embedded sono sportelli bancomat,&amp;nbsp; apparecchi POS, telefoni cellulari e smartphone, dispositivi di rete come router o firewall, stampanti, distributori di bevande, elettrodomestici&amp;nbsp;, centraline di controllo nelle automobili, robot industriali ecc. In pratica, &lt;strong&gt;qualunque dispositivo hardware dotato di software con lo scopo di risolvere uno specifico problema pu&amp;ograve; essere classificato come un sistema embedded&lt;/strong&gt;.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Nell&amp;#39;ambito dei sistemi embedded sono disponibili un&amp;#39;ampia variet&amp;agrave; di microprocessori dedicati a 8, 16 e 32 bit. Visto il crescente utilizzo di questo tipo di sistemi sia in ambiente industriale sia in ambiente consumer, Microsoft negli ultimi 10 anni ha rilasciato diversi strumenti e in particolare sistemi operativi per l&amp;#39;utilizzo delle risorse hardware dei sistemi embedded, che nel tempo si sono rapidamente evoluti fino ai recenti &amp;quot;&lt;strong&gt;Windows XP Embedded&lt;/strong&gt;&amp;quot; e &amp;quot;&lt;strong&gt;Windows Embedded CE&lt;/strong&gt;&amp;quot;.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Windows XP Embedded &amp;egrave; costruito a partire dal sistema desktop Windows XP ed &amp;egrave; caratterizzato da un&amp;#39;alta modularit&amp;agrave; che permette allo sviluppatore di selezionare solo i moduli e i servizi desiderati, con il vantaggio di ottenere un sistema operativo &amp;quot;ritagliato&amp;quot; in base alle proprie esigenze con basso profilo di memoria e maggiore velocit&amp;agrave; di boot.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Windows Embedded CE &amp;egrave; una piattaforma pi&amp;ugrave; leggera di Windows XP Embedded e, in particolare, fornisce il supporto alla realizzazione di applicazioni real-time e la possibilit&amp;agrave; (in certe configurazioni) di sviluppare applicazioni managed tramite il Microsoft .NET Compact Framework.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Negli ultimi anni, in numero sempre crescente, sono stati realizzati piccoli dispositivi embedded, spesso connessi in qualche modo fra loro, che svolgono &amp;quot;semplici&amp;quot; ma utili funzionalit&amp;agrave;. Questi dispositivi utilizzano piattaforme hardware molto limitate in termini di memoria disponibile e capacit&amp;agrave; di elaborazione tanto che spesso non &amp;egrave; necessario l&amp;#39;utilizzo di un sistema operativo. In questo scenario, fino a qualche anno fa, non era possibile sfruttare le tecnologie Microsoft, perch&amp;eacute; i sistemi operativi embedded che essa fornisce hanno requisiti hardware e di memoria eccessivi.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Per questo motivo entra in gioco una nuova e innovativa proposta di Microsoft:&lt;strong&gt; il .NET Micro Framework.&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;2.&amp;nbsp;&amp;nbsp;&amp;nbsp; Che cos&amp;#39;&amp;egrave; e perch&amp;eacute; &amp;egrave; stato creato il .NET Micro Framework&lt;/h3&gt;
&lt;p style="text-align:justify;"&gt;La maggior parte degli sviluppatori di&amp;nbsp; sistemi embedded utilizza codice nativo scritto in linguaggio C e talvolta anche direttamente in linguaggio assembly. La necessit&amp;agrave; di interfacciarsi direttamente con l&amp;#39;hardware richiede una profonda conoscenza della piattaforma sopra la quale si sviluppa e quest&amp;#39;aspetto rende notevolmente complessa anche la realizzazione di semplici applicazioni. A complicare la situazione vi &amp;egrave; la disuniformit&amp;agrave; di tool e ambienti di sviluppo per sistemi embedded che ancora oggi non sono sufficientemente completi. Tutto questo rende difficile la realizzazione, il debugging, il testing e soprattutto la manutenzione dei propri progetti.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;La frase utilizzata da Microsoft per far comprendere in poche parole le motivazioni che hanno portato allo sviluppo del &amp;nbsp;Micro Framework &amp;egrave; la seguente: &amp;quot;&lt;strong&gt;&lt;em&gt;Il .NET Micro Framework si propone per lo sviluppo embedded come ha fatto Visual Basic 6 per lo sviluppo delle vecchie applicazioni desktop&lt;/em&gt;&lt;/strong&gt;&amp;quot;.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Il .NET Micro Framework &amp;egrave; un ambiente operativo per processori embedded a 32 bit, ormai diventati molto economici e a basso consumo, che aumenta il livello di astrazione al quale lo sviluppatore software di sistemi embedded deve lavorare evitando di &amp;quot;sporcarsi le mani&amp;quot; con fastidiosi dettagli relativi all&amp;#39;hardware sottostante. In questo modo lo sviluppatore potr&amp;agrave; preoccuparsi maggiormente dei problemi di alto livello che vuole risolvere: &lt;strong&gt;l&amp;#39;interazione con elementi hardware si limiter&amp;agrave; all&amp;#39;utilizzo di opportune classi in modo completamente object-oriented,&lt;/strong&gt; favorendo quindi la realizzazione di software indipendente dalla piattaforma.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Il .NET Micro Framework vuole portare nel mondo embedded i principali vantaggi offerti dal mondo managed, permettendo l&amp;#39;utilizzo di una&amp;nbsp; ricca libreria di funzionalit&amp;agrave; indipendenti dall&amp;#39;hardware ed accessibili tramite la scrittura di codice C#, supportata da un completo e potente ambiente di sviluppo come Microsoft Visual Studio, che offre anche avanzate funzionalit&amp;agrave; di debugging ed emulazione del dispositivo reale.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;&lt;strong&gt;&lt;em&gt;Con il .NET Micro Framework qualsiasi sviluppatore familiare al mondo .NET pu&amp;ograve; diventare, in modo estremamente semplice e veloce, anche uno sviluppatore embedded!&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;3.&amp;nbsp;&amp;nbsp;&amp;nbsp; Versioni disponibili e caratteristiche principali&lt;/h3&gt;
&lt;p style="text-align:justify;"&gt;Il .NET Micro Framework &amp;egrave; stato rilasciato pubblicamente, e messo a disposizione di tutti gli sviluppatori, a partire dalla versione 2.0, resa disponibile nei primi mesi del 2007.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Le principali caratteristiche del .NET Micro Framework sono:&lt;/p&gt;
&lt;ul style="text-align:justify;"&gt;
&lt;li&gt;Disponibilit&amp;agrave; per i processori a 32 bit a basso costo quali &lt;strong&gt;ARM7&lt;/strong&gt; e &lt;strong&gt;ARM9&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Occupazione di spazio (&lt;strong&gt;footprint&lt;/strong&gt;) molto ridotta, dell&amp;#39;ordine di qualche centinaio di Kilobyte&lt;/li&gt;
&lt;li&gt;Runtime che gestisce il boot autonomamente (&lt;strong&gt;non richiede MMU&lt;/strong&gt;)&lt;/li&gt;
&lt;li&gt;Efficiente controllo sul consumo di energia&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Portabilit&amp;agrave;&lt;/strong&gt; su nuove architetture grazie all&amp;#39;utilizzo di un &lt;a href="http://store.microsoft.com/microsoft/-NET-Micro-Framework/product/667DC827?WT.mc_id=netmicroframework"&gt;Porting Kit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Interfacciamento con dispositivi hardware tramite porta seriale RS232, bus I2C o bus SPI &lt;/li&gt;
&lt;li&gt;Ricca libreria indipendente dall&amp;#39;hardware (Base Class Library)&lt;/li&gt;
&lt;li&gt;Runtime grafico basato su un &lt;strong&gt;sottoinsieme di &lt;em&gt;WPF&lt;/em&gt; (&lt;/strong&gt;&lt;em&gt;Windows Presentation Foundation&lt;/em&gt;)&lt;/li&gt;
&lt;li&gt;Caratteristiche e vantaggi ereditati dal Framework .NET&lt;/li&gt;
&lt;li&gt;Supporto alla &lt;strong&gt;localizzazione&lt;/strong&gt; e alla &lt;strong&gt;globalizzazione&lt;/strong&gt; delle applicazioni&lt;/li&gt;
&lt;li&gt;Notevole supporto alla &lt;strong&gt;serializzazione&lt;/strong&gt; dei dati in forma compressa anche su memoria non volatile&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Estensibilit&amp;agrave;&lt;/strong&gt; a livello software e hardware&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sicurezza&lt;/strong&gt; grazie all&amp;#39;utilizzo di assembly firmati e meccanismi di crittografia&lt;/li&gt;
&lt;li&gt;Ambiente di sviluppo &lt;strong&gt;Microsoft Visual Studio&lt;/strong&gt; con debugging ed &lt;strong&gt;emulazione del device&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="text-align:justify;"&gt;La versione 2.5 aggiunge il supporto nativo allo &lt;strong&gt;stack TCP/IP&lt;/strong&gt; e ai &lt;strong&gt;Web Services&lt;/strong&gt; (rilasciati in forma separata).&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Le novit&amp;agrave; della versione 3.0, rilasciata nel mese di Ottobre 2008, sono:&lt;/p&gt;
&lt;ul style="text-align:justify;"&gt;
&lt;li&gt;Supporto alla famiglia di processori Blackfin di Analog Devices e il set di istruzioni ARM Thumb e Thumb2&lt;/li&gt;
&lt;li&gt;Riduzione del &lt;a&gt;&lt;strong&gt;footprint &lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;minimo a 64KB di RAM&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Miglioramenti nell&amp;#39;interoperabilit&amp;agrave; con codice nativo permettendo l&amp;#39;&lt;strong&gt;accesso diretto all&amp;#39;hardware&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Un &lt;a href="http://store.microsoft.com/microsoft/-NET-Micro-Framework/product/667DC827?WT.mc_id=netmicroframework"&gt;Porting-Kit&lt;/a&gt; pi&amp;ugrave; accessibile e facile da utilizzare&lt;/li&gt;
&lt;li&gt;Nuovo supporto alla connettivit&amp;agrave; che comprende &lt;strong&gt;Wi-Fi&lt;/strong&gt;, &lt;strong&gt;USB&lt;/strong&gt;, &lt;strong&gt;Web Services for Devices&lt;/strong&gt;, &lt;strong&gt;SSL&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Supporto per un &lt;strong&gt;file system&lt;/strong&gt; compatibile con &lt;strong&gt;FAT32&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Supporto delle funzionalit&amp;agrave; &lt;strong&gt;Touch&lt;/strong&gt; e &lt;strong&gt;Gesture&lt;/strong&gt; per sviluppare applicazioni pi&amp;ugrave; interattive&lt;/li&gt;
&lt;li&gt;Integrazione con &lt;strong&gt;Visual Studio 2008&lt;/strong&gt; e &lt;strong&gt;Visual C# 2008 Express Edition&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;4.&amp;nbsp;&amp;nbsp;&amp;nbsp; Architettura del framework e Common Language Runtime&lt;/h3&gt;
&lt;p style="text-align:justify;"&gt;E&amp;#39; sbagliato e limitativo classificare il .NET Micro Framework come un sistema operativo per lo sviluppo di sistemi embedded. Rispetto alla versione completa del .NET Framework tuttavia il .NET Micro Framework deve in qualche modo sovraintendere alla gestione delle risorse hardware, al controllo dell&amp;#39;esecuzione del codice e alle funzionalit&amp;agrave; di input/output che rappresentano tipiche caratteristiche fornite intrinsecamente da un sistema operativo. La capacit&amp;agrave; di essere eseguito direttamente sull&amp;#39;hardware, senza la presenza di un vero e completo sistema operativo, permette di dire che il .NET Micro Framework &amp;egrave; un &lt;strong&gt;bootable runtime&lt;/strong&gt;.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Analizziamo ora in maggior dettaglio l&amp;#39;architettura del .NET Micro Framework:&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;&amp;nbsp;&lt;img src="/cfs-file.ashx/__key/CommunityServer.Wikis.Components.Files/articles/architettura-micro_2D00_framework.jpg" alt="" /&gt;&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Alla base di tutto c&amp;#39;&amp;egrave; la &lt;strong&gt;&lt;em&gt;HAL&lt;/em&gt;&lt;/strong&gt; (&lt;em&gt;Hardware Abstraction Layer&lt;/em&gt;) che ha il compito di gestire le funzionalit&amp;agrave; di basso livello direttamente connesse all&amp;#39;hardware e alle periferiche. In particolare la HAL contiene codice assembler per gestire la fase di &lt;a href="http://it.wikipedia.org/wiki/Boot"&gt;boot del sistema&lt;/a&gt;, le operazioni di I/O, le &lt;a href="http://it.wikipedia.org/wiki/Interrupt_request"&gt;richieste di interruzioni&lt;/a&gt; (&lt;em&gt;IRQ&lt;/em&gt;), i timer nativi e i driver delle periferiche implementati dallo specifico &lt;strong&gt;&lt;em&gt;OEM&lt;/em&gt;&lt;/strong&gt; (&lt;em&gt;Original Equipment Manufacturer&lt;/em&gt;).&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Immediatamente sopra la HAL &amp;egrave; presente un&amp;#39;importante componente chiamato &lt;strong&gt;&lt;em&gt;PAL&lt;/em&gt;&lt;/strong&gt; (&lt;em&gt;Platform Abstaction Layer&lt;/em&gt;) che permette di realizzare la completa astrazione dalla piattaforma hardware sottostante fornendo quindi una interfaccia di alto livello per l&amp;#39;implementazione del &lt;strong&gt;&lt;em&gt;CLR&lt;/em&gt;&lt;/strong&gt; (&lt;em&gt;Common Language Runtime&lt;/em&gt;).&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Sulla base delle precedenti affermazioni &amp;egrave; facilmente intuibile che il porting del .NET Micro Framework su nuove piattaforme si limiti alla sola riscrittura dei due componenti HAL e &lt;a&gt;PAL&lt;/a&gt;. Nel caso in cui si volesse costruire una versione del .NET Micro Framework che venga eseguita sopra un particolare sistema operativo &amp;egrave; possibile implementare la sola PAL utilizzando direttamente i servizi offerti dal sottostante sistema operativo. Questo &amp;egrave; esattamente il modo in cui &amp;egrave; stato realizzato l&amp;#39;emulatore presente nel SDK.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Il CLR del .NET Micro Framework rispetta la &lt;strong&gt;&lt;em&gt;CLS&lt;/em&gt;&lt;/strong&gt; (&lt;em&gt;Common Language Specification&lt;/em&gt;) e permette l&amp;#39;esecuzione di assembly contenenti l&amp;#39;applicazione sotto forma di codice &lt;strong&gt;&lt;em&gt;IL&lt;/em&gt;&lt;/strong&gt; (&lt;em&gt;Intermediate Language&lt;/em&gt;). L&amp;#39;utilizzo del codice IL permette teoricamente lo sviluppo con differenti linguaggi di programmazione, tuttavia al momento della scrittura di questo articolo l&amp;#39;unico linguaggio direttamente supportato &amp;egrave; il C#.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;In particolare il CLR &amp;egrave; costituito dalle seguenti parti:&lt;/p&gt;
&lt;ul style="text-align:justify;"&gt;
&lt;li&gt;&lt;strong&gt;Execution Engine&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="padding-left:60px;text-align:justify;"&gt;La versione completa del .NET Framework implementa un modello di esecuzione che al momento della chiamata di una funzione prevede la compilazione al volo del codice IL in codice nativo mediante l&amp;#39;utilizzo del &lt;strong&gt;&lt;em&gt;JIT&lt;/em&gt;&lt;/strong&gt; (&lt;em&gt;Just in Time Compiler&lt;/em&gt;). Dal punto di vista dell&amp;#39;occupazione di memoria un approccio di questo tipo richiede uno spazio doppio in quanto &amp;egrave; necessario memorizzare sia la versione IL che la versione nativa del codice applicativo. Siccome la riduzione del footprint dell&amp;#39;applicazione &amp;egrave; un aspetto troppo importante per questo tipo di sistemi embedded, i progettisti del .NET Micro Framework hanno deciso di &lt;strong&gt;interpretare direttamente il codice IL&lt;/strong&gt; a scapito di una minore velocit&amp;agrave; di esecuzione. Tuttavia &amp;egrave; importante sottolineare che il codice IL essendo in forma binaria permette di evitare complesse operazioni di parsing dei sorgenti e questo ha permesso la realizzazione di un interprete molto efficiente. Il CLR inoltre realizza l&amp;#39;astrazione dei thread implementando un &lt;a href="http://en.wikipedia.org/wiki/Cooperative_multitasking#Cooperative_multitasking.2Ftime-sharing"&gt;multitasking di tipo cooperativo&lt;/a&gt; con la possibilit&amp;agrave; di assegnare una priorit&amp;agrave; a ciascun thread e assegnare un tempo massimo di esecuzione ad una porzione di codice.&lt;/p&gt;
&lt;ul style="text-align:justify;"&gt;
&lt;li&gt;&lt;strong&gt;Type &lt;a&gt;System&lt;/a&gt;&lt;/strong&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="padding-left:60px;text-align:justify;"&gt;Il Type System definisce l&amp;#39;infrastruttura dei tipi all&amp;#39;interno del framework che si possono suddividere in due grandi categorie: &lt;a href="http://msdn.microsoft.com/en-us/library/s1ax56ch(VS.80).aspx"&gt;value-types&lt;/a&gt; e &lt;a href="http://msdn.microsoft.com/en-us/library/490f96s2(VS.80).aspx"&gt;reference-type&lt;/a&gt;.&lt;/p&gt;
&lt;ul style="text-align:justify;"&gt;
&lt;li&gt;&lt;strong&gt;Garbage Collector&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="padding-left:60px;text-align:justify;"&gt;Per il .NET Micro Framework &amp;egrave; stata realizzata una versione semplificata e molto leggera del Garbage Collector basata su un algoritmo di &lt;a href="http://www.brpreiss.com/books/opus5/html/page424.html"&gt;Mark and Sweep&lt;/a&gt; non incrementale. Il suo vantaggio principale &amp;egrave; la minimizzazione dello spazio occupato per la sua implementazione. Inoltre tramite l&amp;#39;utilizzo dei &lt;strong&gt;Weak Reference&lt;/strong&gt; &amp;egrave; possibile permettere al Garbage Collector di reclamare e liberare memoria quando si &amp;egrave; molto vicini all&amp;#39;esaurimento della stessa (condizioni di &lt;strong&gt;Memory Pressure&lt;/strong&gt;).&lt;/p&gt;
&lt;ul style="text-align:justify;"&gt;
&lt;li&gt;&lt;strong&gt;Interop&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="padding-left:60px;text-align:justify;"&gt;Il meccanismo di Interop permette di scrivere funzioni direttamente in codice nativo. Il motivo per cui pu&amp;ograve; essere necessaria un&amp;#39;operazione di questo tipo &amp;egrave; quanto si hanno parti dell&amp;#39;applicazione che sono molto critiche in termini di performance. E&amp;#39; importante sottolineare che utilizzando questo meccanismo la portabilit&amp;agrave; della propria applicazione diventa molto pi&amp;ugrave; difficile da gestire quindi, se possibile, &amp;egrave; bene evitare di utilizzare questa caratteristica offerta dal CLR.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Sopra il CLR &amp;egrave; stato implementato un ricco insieme di funzionalit&amp;agrave; che fanno parte di quella che viene comunemente chiamata &lt;strong&gt;BCL&lt;/strong&gt; (&lt;em&gt;Base Class &lt;a&gt;Library&lt;/a&gt;&lt;/em&gt;&lt;em&gt;&amp;nbsp;&lt;/em&gt;).&lt;/p&gt;
&lt;h3&gt;5.&amp;nbsp;&amp;nbsp;&amp;nbsp; Uno sguardo alla Base Class Library&lt;/h3&gt;
&lt;p style="text-align:justify;"&gt;La BCL del .NET Micro Framework cerca di mantenere il pi&amp;ugrave; possibile la compatibilit&amp;agrave; con la versione completa del framework .NET. Per questo motivo, le funzionalit&amp;agrave; direttamente ereditate sono accessibili utilizzando gli stessi namespace e le stesse classi disponibili all&amp;#39;interno della versione completa. Per la realizzazione di funzionalit&amp;agrave; specifiche al .NET Micro Framework sono stati introdotti i nuovi namespace &lt;strong&gt;&lt;em&gt;Microsoft.SPOT&lt;/em&gt;&lt;/strong&gt;, &lt;strong&gt;Dpws&lt;/strong&gt; e &lt;strong&gt;Ws&lt;/strong&gt;. Il nome &lt;strong&gt;&lt;em&gt;SPOT&lt;/em&gt;&lt;/strong&gt; (&lt;em&gt;Smart Personal Object Technology&lt;/em&gt;) &amp;egrave; quello di un progetto, risalente all&amp;#39;anno 2001, dal quale &amp;egrave; nata la prima implementazione del .NET Micro Framework, a cui era stato dato il nome di &lt;strong&gt;TinyCLR&lt;/strong&gt;.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;I namespace ereditati dalla versione completa del .NET Framework sono i seguenti:&lt;/p&gt;
&lt;ul style="text-align:justify;"&gt;
&lt;li&gt;System&lt;/li&gt;
&lt;li&gt;System.Collections&lt;/li&gt;
&lt;li&gt;System.ComponentModel&lt;/li&gt;
&lt;li&gt;System.Diagnostics&lt;/li&gt;
&lt;li&gt;System.Ext&lt;/li&gt;
&lt;li&gt;System.Globalization&lt;/li&gt;
&lt;li&gt;System.IO&lt;/li&gt;
&lt;li&gt;System.IO.Ports&lt;/li&gt;
&lt;li&gt;System.Net&lt;/li&gt;
&lt;li&gt;System.Net.Sockets&lt;/li&gt;
&lt;li&gt;System.Reflection&lt;/li&gt;
&lt;li&gt;System.Resources&lt;/li&gt;
&lt;li&gt;System.Runtime.CompilerServices&lt;/li&gt;
&lt;li&gt;System.Runtime.InteropServices&lt;/li&gt;
&lt;li&gt;System.Runtime.Remoting&lt;/li&gt;
&lt;li&gt;System.Text&lt;/li&gt;
&lt;li&gt;System.Threading&lt;/li&gt;
&lt;li&gt;System.Xml&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="text-align:justify;"&gt;Rispetto al framework completo, si segnalano le seguenti caratteristiche:&lt;/p&gt;
&lt;ul style="text-align:justify;"&gt;
&lt;li&gt;Sono disponibili tutti i tipi primitivi del framework .NET ad eccezione del tipo decimal&lt;/li&gt;
&lt;li&gt;Le stringhe sono memorizzate internamente nel formato UTF8 per minimizzare lo spazio occupato&lt;/li&gt;
&lt;li&gt;E&amp;#39; presente la classe &lt;strong&gt;System.Text.Encoding&lt;/strong&gt; per convertire stringhe in array di byte e viceversa&lt;/li&gt;
&lt;li&gt;La classe &lt;strong&gt;System.Text.StringBuilder&lt;/strong&gt; &lt;strong&gt;non &amp;egrave; disponibile&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Non sono presenti le funzionalit&amp;agrave; di parsing per i numeri e funzioni matematiche sofisticate&lt;/li&gt;
&lt;li&gt;E&amp;#39; possibile utilizzare solamente gli &lt;a href="http://msdn.microsoft.com/en-us/library/2s05feca.aspx"&gt;jagged array&lt;/a&gt; e non gli &lt;a href="http://msdn.microsoft.com/en-us/library/2yd9wwz4.aspx"&gt;array rettangolari&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;I generics non sono disponibili all&amp;#39;interno del .NET Micro Framework&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ArrayList&lt;/strong&gt; &amp;egrave; l&amp;#39;unica collection disponibile nel framework&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="text-align:justify;"&gt;I namespace specifici del .NET Micro Framework sono:&lt;/p&gt;
&lt;ul style="text-align:justify;"&gt;
&lt;li&gt;Microsoft.SPOT&lt;/li&gt;
&lt;li&gt;Microsoft.SPOT.Cryptography&lt;/li&gt;
&lt;li&gt;Microsoft.SPOT.Hardware&lt;/li&gt;
&lt;li&gt;Microsoft.SPOT.Ink&lt;/li&gt;
&lt;li&gt;Microsoft.SPOT.Input&lt;/li&gt;
&lt;li&gt;Microsoft.SPOT.IO&lt;/li&gt;
&lt;li&gt;Microsoft.SPOT.Messaging&lt;/li&gt;
&lt;li&gt;Microsoft.SPOT.Net&lt;/li&gt;
&lt;li&gt;Microsoft.SPOT.Net.NetworkInformation&lt;/li&gt;
&lt;li&gt;Microsoft.SPOT.Net.Security&lt;/li&gt;
&lt;li&gt;Microsoft.SPOT.Presentation&lt;/li&gt;
&lt;li&gt;Microsoft.SPOT.Presentation.Controls&lt;/li&gt;
&lt;li&gt;Microsoft.SPOT.Presentation.Media&lt;/li&gt;
&lt;li&gt;Microsoft.SPOT.Presentation.Shapes&lt;/li&gt;
&lt;li&gt;Microsoft.SPOT.Touch&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="text-align:justify;"&gt;Le classi &lt;strong&gt;Microsoft.SPOT.Dubug&lt;/strong&gt; e &lt;strong&gt;Microsoft.SPOT.Trace&lt;/strong&gt; sono particolarmente importanti per effettuare operazioni di debugging e tracing del codice. La classe &lt;strong&gt;Microsoft.SPOT.Hardware.Utility&lt;/strong&gt; fornisce un insieme di funzionalit&amp;agrave; utili per lo sviluppo delle proprie applicazioni come impostare la data di sistema e la Time Zone o combinare insieme due array. La classe &lt;strong&gt;Microsoft.SPOT.ExtendedTimer&lt;/strong&gt; fornisce altre funzionalit&amp;agrave; di timing come la possibilit&amp;agrave; di avviare un timer a una specifica data.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Per quanto riguarda l&amp;#39;interazione con l&amp;#39;hardware, sono importanti le classi contenute nel namespace &lt;strong&gt;Microsoft.SPOT.Hardware&lt;/strong&gt;. In particolare, le classi &lt;strong&gt;OutputPort&lt;/strong&gt;, &lt;strong&gt;InputPort&lt;/strong&gt;, &lt;strong&gt;InterruptPort&lt;/strong&gt; e &lt;strong&gt;TristatePort&lt;/strong&gt; permettono di gestire in modo estremamente semplice i pin di I/O digitale offrendo un consistente modello a eventi. E&amp;#39; &amp;nbsp;interessante la possibilit&amp;agrave; di inserire&amp;nbsp;un filtro antiglitch in modo da evitare il rilevamento di transizioni spurie sui piedini in ingresso. Con le classi &lt;strong&gt;SerialPort&lt;/strong&gt;, &lt;strong&gt;I2Cdevice&lt;/strong&gt; ed &lt;strong&gt;SPI&lt;/strong&gt; &amp;egrave; possibile facilmente gestire l&amp;#39;interazione con un componente hardware che comunica rispettivamente tramite porta seriale, bus I2C o bus SPI al fine di costruire una opportuna classe (&lt;strong&gt;managed driver&lt;/strong&gt;) che astrae l&amp;#39;interfacciamento al componente stesso e ne semplifica l&amp;#39;utilizzo.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;All&amp;#39;interno del namespace &lt;strong&gt;Microsoft.SPOT.Hardware&lt;/strong&gt; &amp;egrave; inoltre presente la classe &lt;strong&gt;Battery&lt;/strong&gt; per interrogare lo stato della batteria, la classe &lt;strong&gt;Cpu&lt;/strong&gt; per ottenere informazioni relative alla velocit&amp;agrave; di elaborazione e la classe &lt;strong&gt;SystemInfo.SystemID&lt;/strong&gt; per conoscere i codici identificativi del dispositivo hardware su cui l&amp;#39;applicazione viene fatta girare.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Il namespace &lt;strong&gt;Microsoft.SPOT.Net&lt;/strong&gt; e &lt;strong&gt;System.Net&lt;/strong&gt; con l&amp;#39;implementazione della classe &lt;strong&gt;Socket&lt;/strong&gt; aprono il mondo del networking al .NET Micro Framework. Con la classe &lt;strong&gt;Microsoft.SPOT.Net.NetworkInformation.NetworkInterface&lt;/strong&gt; &amp;egrave; possibile ottenere informazioni sulle interfacce di rete disponibili, programmarle con un indirizzo di rete statico o attivare l&amp;#39;acquisizione dinamica dell&amp;#39;indirizzo tramite il protocollo DHCP. Con la classe &lt;strong&gt;System.Net.Dns&lt;/strong&gt;, se &amp;egrave; stata stabilita una connessione, &amp;egrave; possibile facilmente risolvere un nome di dominio in un indirizzo IP.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Ricordiamo anche il &lt;strong&gt;DPWS&lt;/strong&gt; (&lt;strong&gt;Device Profile for Web Services&lt;/strong&gt;), che consiste in un sottoinsieme delle specifiche dei Web Services con l&amp;#39;aggiunta di un meccanismo di ricerca dei dispositivi. Grazie a questa infrastruttura &amp;egrave; possibile collegare in rete tanti dispositivi (o nodi), ciascuno dei quali offrir&amp;agrave; diversi servizi agli altri. Il campo in cui questa tecnologia potrebbe essere applicata con interesse sono le &lt;a href="http://it.wikipedia.org/wiki/Wireless_sensor_network"&gt;reti di sensori wirelesss&lt;/a&gt;.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Le funzionalit&amp;agrave; del DPWS sono contenute all&amp;#39;interno dei vari namespace &lt;strong&gt;Dpws&lt;/strong&gt; e &lt;strong&gt;Ws&lt;/strong&gt;:&lt;/p&gt;
&lt;ul style="text-align:justify;"&gt;
&lt;li&gt;Dpws.Client&lt;/li&gt;
&lt;li&gt;Dpws.Client.Discovery&lt;/li&gt;
&lt;li&gt;Dpws.Client.Eventing&lt;/li&gt;
&lt;li&gt;Dpws.Client.Transport&lt;/li&gt;
&lt;li&gt;Dpws.Device&lt;/li&gt;
&lt;li&gt;Dpws.Device.Services&lt;/li&gt;
&lt;li&gt;Ws.ServiceModel&lt;/li&gt;
&lt;li&gt;Ws.Services&lt;/li&gt;
&lt;li&gt;Ws.Services.Faults&lt;/li&gt;
&lt;li&gt;Ws.Services.Mtom&lt;/li&gt;
&lt;li&gt;Ws.Services.Serialization&lt;/li&gt;
&lt;li&gt;Ws.Services.Soap&lt;/li&gt;
&lt;li&gt;Ws.Services.Transport&lt;/li&gt;
&lt;li&gt;Ws.Services.Transport.HTTP&lt;/li&gt;
&lt;li&gt;Ws.Services.Transport.UDP&lt;/li&gt;
&lt;li&gt;Ws.Services.Utilities&lt;/li&gt;
&lt;li&gt;Ws.Services.WsaAddressing&lt;/li&gt;
&lt;li&gt;Ws.Services.Xml&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="text-align:justify;"&gt;Per gestire le questioni legate alla sicurezza il .NET Micro Framework fornisce l&amp;#39;implementazione del protocollo di cifratura simmetrica &lt;strong&gt;&lt;em&gt;XTEA&lt;/em&gt;&lt;/strong&gt; (&lt;em&gt;Extended Tiny Encryption Algorithm&lt;/em&gt;) e l&amp;#39;implementazione del famoso protocollo a chiave pubblica e privata &lt;strong&gt;&lt;em&gt;RSA&lt;/em&gt;&lt;/strong&gt; tramite le classi &lt;strong&gt;Microsoft.SPOT.Cryptography.Key_TinyEncryptionAlgorithm&lt;/strong&gt; e &lt;strong&gt;Microsoft.SPOT.Key_RSA&lt;/strong&gt;.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Tramite la classe &lt;strong&gt;Microsoft.SPOT.ExecutionContraint&lt;/strong&gt; &amp;egrave; possibile monitorare se una certa operazione viene eseguita all&amp;#39;interno di una prefissata quantit&amp;agrave; di tempo al termine della quale viene sollevata una eccezione.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Estremamente importante &amp;egrave; la capacit&amp;agrave; offerta dal .NET Micro Framework per la serializzazione binaria degli oggetti, utile per trasferire informazioni con il mondo esterno o persisterle su dispositivi di memoria non volatile. Tramite la classe &lt;strong&gt;Microsoft.SPOT.Reflection&lt;/strong&gt; &amp;egrave; possibile effettuare le operazioni di serializzazione e deserializzazione. Utilizzando opportuni attributi inoltre &amp;egrave; possibile alterare il comportamento dell&amp;#39;algoritmo di serializzazione in modo da ridurre al massimo lo spazio occupato dallo stream binario generato. Un valido supporto alla memorizzazione di dati in modo permanente sulla memoria flash e il loro recupero dopo il riavvio del dispositivo &amp;egrave; offerto da quelli che sono chiamati &lt;strong&gt;ExtendedWeakReference&lt;/strong&gt;.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Per quanto riguarda l&amp;#39;interazione con il display e quindi la realizzazione dell&amp;#39;interfaccia grafica della propria applicazione &amp;egrave; possibile utilizzare la classe &lt;strong&gt;Microsoft.SPOT.Bitmap&lt;/strong&gt; per disegnare figure geometriche, immagini e testo in differenti colori. Per realizzare qualcosa di pi&amp;ugrave; sofisticato &amp;egrave; possibile utilizzare le classi presenti all&amp;#39;interno del namespace &lt;strong&gt;Microsoft.SPOT.Presentation&lt;/strong&gt; che rappresentano un piccolissimo sottoinsieme delle funzionalit&amp;agrave; offerte da WPF. Non &amp;egrave; disponibile il linguaggio &lt;a href="http://it.wikipedia.org/wiki/XAML"&gt;&lt;em&gt;XAML&lt;/em&gt;&lt;/a&gt; (&lt;em&gt;eXtensible Application Markup Language&lt;/em&gt;) e gli unici pannelli utilizzabili sono &lt;strong&gt;Canvas&lt;/strong&gt; e &lt;strong&gt;StackPanel&lt;/strong&gt;. I controlli a disposizione sono &lt;strong&gt;Border&lt;/strong&gt;, &lt;strong&gt;ListBox&lt;/strong&gt;, &lt;strong&gt;ListBoxItem&lt;/strong&gt;, &lt;strong&gt;ScrollViewer&lt;/strong&gt;, &lt;strong&gt;Window&lt;/strong&gt;, &lt;strong&gt;Image&lt;/strong&gt;, &lt;strong&gt;Text&lt;/strong&gt; e &lt;strong&gt;TextFlow&lt;/strong&gt;. Infine sono presenti le classiche figure geometriche rappresentate dalle classi &lt;strong&gt;Ellipse&lt;/strong&gt;, &lt;strong&gt;Line&lt;/strong&gt;, &lt;strong&gt;Polygon&lt;/strong&gt; e &lt;strong&gt;Rectangle&lt;/strong&gt;.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;A partire dalla versione 3.0 del framework inoltre &amp;egrave; presente il namespace &lt;strong&gt;Microsft.SPOT.Touch&lt;/strong&gt; che fornisce i tipi necessari alla gestione di uno schermo sensibile al tocco.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;E&amp;#39; molto importante sottolineare la &lt;strong&gt;possibilit&amp;agrave; di gestire in modo strongly-typed le risorse&lt;/strong&gt; (grazie a Visual Studio che genera la classe &lt;strong&gt;Resources&lt;/strong&gt;) e la possibilit&amp;agrave; di gestire la globalizzazione e la localizzazione della propria applicazione in modo da realizzare prodotti per il mercato mondiale. A questo scopo si devono realizzare opportuni assembly satelliti e utilizzare la classe &lt;strong&gt;System.Globalization.CultureInfo&lt;/strong&gt;.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;&lt;a&gt;Per concludere &amp;egrave; fondamentale ricordare che la maggior parte delle classi fornite con il .NET Micro Framework possono essere estese per ottenere funzionalit&amp;agrave; che altrimenti non sarebbero disponibili.&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;6.&amp;nbsp;&amp;nbsp;&amp;nbsp; Come iniziare a sviluppare con il .NET Micro Framework&lt;/h3&gt;
&lt;p style="text-align:justify;"&gt;Per sviluppare applicazioni con il .NET Micro Framework versione 2 o 2.5:&lt;/p&gt;
&lt;ul style="text-align:justify;"&gt;
&lt;li&gt;Installare Microsoft Visual Studio 2005 con SP1&lt;/li&gt;
&lt;li&gt;Installare l&amp;#39; &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=32f5df20-6c95-4fe8-a76c-0ed56a839ad2&amp;amp;displaylang=en"&gt;SDK del .NET Micro Framework 2.0 SP1&lt;/a&gt; o l&amp;#39; &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=EB0EF2A6-03E2-402C-89A4-A636BD0080C5&amp;amp;displaylang=en"&gt;SDK del .NET Micro Framework 2.5&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Creare un nuovo progetto e sviluppare l&amp;#39;applicazione sull&amp;#39;emulatore di base&lt;/li&gt;
&lt;li&gt;Eventualmente realizzare un emulatore personalizzato&lt;/li&gt;
&lt;li&gt;Acquistare un &lt;a href="http://www.microsoft.com/netmf/hardware/default.mspx"&gt;kit di sviluppo&lt;/a&gt; per effettuare il test finale sul dispositivo reale&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="text-align:justify;"&gt;Per sviluppare applicazioni con il .NET Micro Framework versione 3.0:&lt;/p&gt;
&lt;ul style="text-align:justify;"&gt;
&lt;li&gt;Installare Microsoft Visual Studio 2008 con SP1 o &lt;a href="http://www.microsoft.com/express/vcsharp/"&gt;Visual C# 2008 Express Edition&lt;/a&gt; con SP1&lt;/li&gt;
&lt;li&gt;Installare l&amp;#39; &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=9356ED6F-F1F0-43EF-B21A-4644DD089B4A&amp;amp;displaylang=en"&gt;SDK del .NET Micro Framework 3.0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Creare un nuovo progetto e sviluppare l&amp;#39;applicazione sull&amp;#39;emulatore di base&lt;/li&gt;
&lt;li&gt;Eventualmente realizzare un emulatore personalizzato&lt;/li&gt;
&lt;li&gt;Acquistare un &lt;a href="http://www.microsoft.com/netmf/hardware/default.mspx"&gt;kit di sviluppo&lt;/a&gt; per effettuare il test finale sul dispositivo reale&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="text-align:justify;"&gt;E&amp;#39; importante evidenziare che &lt;strong&gt;l&amp;#39;intero SDK del .NET Micro Framework &amp;egrave; rilasciato gratuitamente da Microsoft&lt;/strong&gt; quindi utilizzando la versione Express di Visual C# 2008 &amp;egrave; possibile realizzare qualsiasi applicazione senza alcun costo. L&amp;#39;unica spesa inevitabile rimane l&amp;#39;acquisto di una scheda di valutazione (&lt;strong&gt;evaluation board&lt;/strong&gt;) tramite la quale &amp;egrave; possibile eseguire e testare la propria applicazione direttamente sull&amp;#39;hardware.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Esistono diversi kit di sviluppo ciascuno dei quali fornisce una evaluation board che supporta in modo pi&amp;ugrave; o meno completo una o pi&amp;ugrave; versioni del .NET Micro Framework. Per maggiori informazioni consultare nel &lt;a href="http://www.microsoft.com/netmf/default.mspx"&gt;sito ufficiale del .NET Micro Framework&lt;/a&gt; la pagina &amp;quot;&lt;a href="http://www.microsoft.com/netmf/hardware/default.mspx"&gt;Get Hardware&lt;/a&gt;&amp;quot; che viene costantemente aggiornata in base alle nuove piattaforme su cui viene fatto il porting.&lt;/p&gt;
&lt;h3&gt;7.&amp;nbsp;&amp;nbsp;&amp;nbsp; Risorse utili per ottenere maggiori informazioni&lt;/h3&gt;
&lt;p style="text-align:justify;"&gt;Ecco alcune risorse per ottenere informazioni in generale sullo sviluppo di sistemi embedded con tecnologia Microsoft:&lt;/p&gt;
&lt;ul style="text-align:justify;"&gt;
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/it-it/library/cc185079.aspx"&gt;Articolo &amp;quot;10 anni di Windows Embedded&amp;quot;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://msdn2.microsoft.com/embedded"&gt;Windows Embedded Developer Center&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;
&lt;p style="text-align:justify;"&gt;Per ottenere maggiori informazioni sul .NET Micro Framework e il suo utilizzo consultare le seguenti pagine:&lt;/p&gt;
&lt;ul style="text-align:justify;"&gt;
&lt;li&gt;&lt;a href="http://msevents.microsoft.com/cui/WebCastEventDetails.aspx?culture=en-US&amp;amp;EventID=1032314669&amp;amp;CountryCode=US"&gt;Webcast MSDN: An Introduction to the .NET Micro Framework&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Articolo di &lt;a href="https://mvp.support.microsoft.com/profile=1A0D4B3B-DD09-4EAF-8535-13298702C524"&gt;Raffaele Rialdi&lt;/a&gt; : &lt;a href="http://msdn.microsoft.com/it-it/library/cc185077.aspx"&gt;&amp;quot;Introduzione al Micro Framework.NET&amp;quot;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Articolo di &lt;a href="https://mvp.support.microsoft.com/profile=1A0D4B3B-DD09-4EAF-8535-13298702C524"&gt;Raffaele Rialdi&lt;/a&gt; : &lt;a href="http://msdn.microsoft.com/it-it/library/cc185076.aspx"&gt;&amp;quot;Realizzare una applicazione con Micro Framework.NET&amp;quot;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Articolo di &lt;a href="http://blogs.msdn.com/darioait/"&gt;Dario Airoldi&lt;/a&gt;: &lt;a href="http://blogs.msdn.com/darioait/archive/2007/04/28/introduzione-a-micro-framework.aspx"&gt;&amp;quot;Introduzione a Micro Framework - La vision di Micro Framework&amp;quot;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.microsoft.com/netmf/default.mspx"&gt;Sito ufficiale .NET Micro Framework&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/embedded/netmf"&gt;.NET Micro Framework Developer Center&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="http://blogs.msdn.com/netmfteam/"&gt;.NET Micro Framework Team Blog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.microsoft.com/communities/newsgroups/list/en-us/default.aspx?dg=microsoft.public.dotnet.framework.microframework"&gt;.NET Micro Framework Newsgroup&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="text-align:justify;"&gt;I libri sul .NET Micro Framework attualmente disponibili all&amp;#39;acquisto sono:&lt;/p&gt;
&lt;ul style="text-align:justify;"&gt;
&lt;li&gt;&lt;a href="http://www.amazon.com/Embedded-Programming-Microsoft-Micro-Framework/dp/0735623651/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1229889838&amp;amp;sr=1-1"&gt;Embedded Programming with the Microsoft .NET Micro Framework&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.amazon.com/Expert-NET-Micro-Framework-K%C3%BChner/dp/159059973X/ref=sr_1_2?ie=UTF8&amp;amp;s=books&amp;amp;qid=1229889838&amp;amp;sr=1-2"&gt;Expert .NET Microframework&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description></item><item><title>Introduzione al .NET Micro Framework</title><link>http://dotnettoscana.org/wikis/articles/introduzione-al-net-micro-framework/revision/4.aspx</link><pubDate>Tue, 30 Dec 2008 18:08:06 GMT</pubDate><guid isPermaLink="false">ada252f7-7fca-4bac-88b6-ec47648018b0:7</guid><dc:creator>Andrea Angella</dc:creator><description>&lt;p&gt;&lt;em&gt;Livello: Base - Autore: &lt;/em&gt;&lt;a href="/wikis/articles/introduzione-al-net-micro-framework/members/angellaa/default.aspx"&gt;&lt;em&gt;Andrea Angella&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Il presente articolo &amp;egrave; suddiviso nelle seguenti sezioni:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Introduzione allo sviluppo su piattaforme embedded&lt;/li&gt;
&lt;li&gt;Che cos&amp;#39;&amp;egrave; e perch&amp;eacute; &amp;egrave; stato creato il .NET Micro Framework&lt;/li&gt;
&lt;li&gt;Versioni disponibili e caratteristiche principali&lt;/li&gt;
&lt;li&gt;Architettura del framework e Common Language Runtime&lt;/li&gt;
&lt;li&gt;Uno sguardo alla Base Class Library&lt;/li&gt;
&lt;li&gt;Come iniziare a sviluppare con il .NET Micro Framework&lt;/li&gt;
&lt;li&gt;Risorse utili per ottenere maggiori informazioni&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;1.&amp;nbsp;&amp;nbsp;&amp;nbsp; Introduzione allo sviluppo su piattaforme embedded&lt;/h3&gt;
&lt;p style="text-align:justify;"&gt;I &lt;strong&gt;sistemi embedded&lt;/strong&gt; sono &lt;strong&gt;sistemi informatici dedicati&lt;/strong&gt; che vengono progettati, al contrario dei sistemi general purpuse, per svolgere compiti ben precisi e determinati. L&amp;#39;hardware in questo tipo di sistemi &amp;egrave; spesso progettato ad hoc e l&amp;#39;interazione con il mondo esterno rende indispensabile la capacit&amp;agrave; di raccogliere, campionare e trasmettere segnali utilizzando dispositivi quali sensori, attuatori e convertitori A/D e D/A. L&amp;#39;interazione con l&amp;#39;utente avviene con mezzi spesso semplificati quali pulsanti e display di dimensione ridotta. L&amp;#39;affidabilit&amp;agrave;, il costo e il consumo di energia diventano metriche importantissime da valutare in fase di progettazione e spesso questi sistemi sono soggetti a particolari vincoli real-time che se non rispettati posso anche portare a conseguenze molto gravi.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Esempi di sistemi embedded sono sportelli bancomat,&amp;nbsp; apparecchi POS, telefoni cellulari e smartphone, dispositivi di rete come router o firewall, stampanti, distributori di bevande, elettrodomestici&amp;nbsp;, centraline di controllo nelle automobili, robot industriali ecc. In pratica, &lt;strong&gt;qualunque dispositivo hardware dotato di software con lo scopo di risolvere uno specifico problema pu&amp;ograve; essere classificato come un sistema embedded&lt;/strong&gt;.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Nell&amp;#39;ambito dei sistemi embedded sono disponibili un&amp;#39;ampia variet&amp;agrave; di microprocessori dedicati a 8, 16 e 32 bit. Visto il crescente utilizzo di questo tipo di sistemi sia in ambiente industriale sia in ambiente consumer, Microsoft negli ultimi 10 anni ha rilasciato diversi strumenti e in particolare sistemi operativi per l&amp;#39;utilizzo delle risorse hardware dei sistemi embedded, che nel tempo si sono rapidamente evoluti fino ai recenti &amp;quot;&lt;strong&gt;Windows XP Embedded&lt;/strong&gt;&amp;quot; e &amp;quot;&lt;strong&gt;Windows Embedded CE&lt;/strong&gt;&amp;quot;.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Windows XP Embedded &amp;egrave; costruito a partire dal sistema desktop Windows XP ed &amp;egrave; caratterizzato da un&amp;#39;alta modularit&amp;agrave; che permette allo sviluppatore di selezionare solo i moduli e i servizi desiderati, con il vantaggio di ottenere un sistema operativo &amp;quot;ritagliato&amp;quot; in base alle proprie esigenze con basso profilo di memoria e maggiore velocit&amp;agrave; di boot.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Windows Embedded CE &amp;egrave; una piattaforma pi&amp;ugrave; leggera di Windows XP Embedded e, in particolare, fornisce il supporto alla realizzazione di applicazioni real-time e la possibilit&amp;agrave; (in certe configurazioni) di sviluppare applicazioni managed tramite il Microsoft .NET Compact Framework.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Negli ultimi anni, in numero sempre crescente, sono stati realizzati piccoli dispositivi embedded, spesso connessi in qualche modo fra loro, che svolgono &amp;quot;semplici&amp;quot; ma utili funzionalit&amp;agrave;. Questi dispositivi utilizzano piattaforme hardware molto limitate in termini di memoria disponibile e capacit&amp;agrave; di elaborazione tanto che spesso non &amp;egrave; necessario l&amp;#39;utilizzo di un sistema operativo. In questo scenario, fino a qualche anno fa, non era possibile sfruttare le tecnologie Microsoft, perch&amp;eacute; i sistemi operativi embedded che essa fornisce hanno requisiti hardware e di memoria eccessivi.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Per questo motivo entra in gioco una nuova e innovativa proposta di Microsoft:&lt;strong&gt; il .NET Micro Framework.&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;2.&amp;nbsp;&amp;nbsp;&amp;nbsp; Che cos&amp;#39;&amp;egrave; e perch&amp;eacute; &amp;egrave; stato creato il .NET Micro Framework&lt;/h3&gt;
&lt;p style="text-align:justify;"&gt;La maggior parte degli sviluppatori di&amp;nbsp; sistemi embedded utilizza codice nativo scritto in linguaggio C e talvolta anche direttamente in linguaggio assembly. La necessit&amp;agrave; di interfacciarsi direttamente con l&amp;#39;hardware richiede una profonda conoscenza della piattaforma sopra la quale si sviluppa e quest&amp;#39;aspetto rende notevolmente complessa anche la realizzazione di semplici applicazioni. A complicare la situazione vi &amp;egrave; la disuniformit&amp;agrave; di tool e ambienti di sviluppo per sistemi embedded che ancora oggi non sono sufficientemente completi. Tutto questo rende difficile la realizzazione, il debugging, il testing e soprattutto la manutenzione dei propri progetti.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;La frase utilizzata da Microsoft per far comprendere in poche parole le motivazioni che hanno portato allo sviluppo del &amp;nbsp;Micro Framework &amp;egrave; la seguente: &amp;quot;&lt;strong&gt;&lt;em&gt;Il .NET Micro Framework si propone per lo sviluppo embedded come ha fatto Visual Basic 6 per lo sviluppo delle vecchie applicazioni desktop&lt;/em&gt;&lt;/strong&gt;&amp;quot;.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Il .NET Micro Framework &amp;egrave; un ambiente operativo per processori embedded a 32 bit, ormai diventati molto economici e a basso consumo, che aumenta il livello di astrazione al quale lo sviluppatore software di sistemi embedded deve lavorare evitando di &amp;quot;sporcarsi le mani&amp;quot; con fastidiosi dettagli relativi all&amp;#39;hardware sottostante. In questo modo lo sviluppatore potr&amp;agrave; preoccuparsi maggiormente dei problemi di alto livello che vuole risolvere: &lt;strong&gt;l&amp;#39;interazione con elementi hardware si limiter&amp;agrave; all&amp;#39;utilizzo di opportune classi in modo completamente object-oriented,&lt;/strong&gt; favorendo quindi la realizzazione di software indipendente dalla piattaforma.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Il .NET Micro Framework vuole portare nel mondo embedded i principali vantaggi offerti dal mondo managed, permettendo l&amp;#39;utilizzo di una&amp;nbsp; ricca libreria di funzionalit&amp;agrave; indipendenti dall&amp;#39;hardware ed accessibili tramite la scrittura di codice C#, supportata da un completo e potente ambiente di sviluppo come Microsoft Visual Studio, che offre anche avanzate funzionalit&amp;agrave; di debugging ed emulazione del dispositivo reale.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;&lt;strong&gt;&lt;em&gt;Con il .NET Micro Framework qualsiasi sviluppatore familiare al mondo .NET pu&amp;ograve; diventare, in modo estremamente semplice e veloce, anche uno sviluppatore embedded!&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;3.&amp;nbsp;&amp;nbsp;&amp;nbsp; Versioni disponibili e caratteristiche principali&lt;/h3&gt;
&lt;p style="text-align:justify;"&gt;Il .NET Micro Framework &amp;egrave; stato rilasciato pubblicamente, e messo a disposizione di tutti gli sviluppatori, a partire dalla versione 2.0, resa disponibile nei primi mesi del 2007.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Le principali caratteristiche del .NET Micro Framework sono:&lt;/p&gt;
&lt;ul style="text-align:justify;"&gt;
&lt;li&gt;Disponibilit&amp;agrave; per i processori a 32 bit a basso costo quali &lt;strong&gt;ARM7&lt;/strong&gt; e &lt;strong&gt;ARM9&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Occupazione di spazio (&lt;strong&gt;footprint&lt;/strong&gt;) molto ridotta, dell&amp;#39;ordine di qualche centinaio di Kilobyte&lt;/li&gt;
&lt;li&gt;Runtime che gestisce il boot autonomamente (&lt;strong&gt;non richiede MMU&lt;/strong&gt;)&lt;/li&gt;
&lt;li&gt;Efficiente controllo sul consumo di energia&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Portabilit&amp;agrave;&lt;/strong&gt; su nuove architetture grazie all&amp;#39;utilizzo di un &lt;a href="http://store.microsoft.com/microsoft/-NET-Micro-Framework/product/667DC827?WT.mc_id=netmicroframework"&gt;Porting Kit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Interfacciamento con dispositivi hardware tramite porta seriale RS232, bus I2C o bus SPI &lt;/li&gt;
&lt;li&gt;Ricca libreria indipendente dall&amp;#39;hardware (Base Class Library)&lt;/li&gt;
&lt;li&gt;Runtime grafico basato su un &lt;strong&gt;sottoinsieme di &lt;em&gt;WPF&lt;/em&gt; (&lt;/strong&gt;&lt;em&gt;Windows Presentation Foundation&lt;/em&gt;)&lt;/li&gt;
&lt;li&gt;Caratteristiche e vantaggi ereditati dal Framework .NET&lt;/li&gt;
&lt;li&gt;Supporto alla &lt;strong&gt;localizzazione&lt;/strong&gt; e alla &lt;strong&gt;globalizzazione&lt;/strong&gt; delle applicazioni&lt;/li&gt;
&lt;li&gt;Notevole supporto alla &lt;strong&gt;serializzazione&lt;/strong&gt; dei dati in forma compressa anche su memoria non volatile&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Estensibilit&amp;agrave;&lt;/strong&gt; a livello software e hardware&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sicurezza&lt;/strong&gt; grazie all&amp;#39;utilizzo di assembly firmati e meccanismi di crittografia&lt;/li&gt;
&lt;li&gt;Ambiente di sviluppo &lt;strong&gt;Microsoft Visual Studio&lt;/strong&gt; con debugging ed &lt;strong&gt;emulazione del device&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="text-align:justify;"&gt;La versione 2.5 aggiunge il supporto nativo allo &lt;strong&gt;stack TCP/IP&lt;/strong&gt; e ai &lt;strong&gt;Web Services&lt;/strong&gt; (rilasciati in forma separata).&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Le novit&amp;agrave; della versione 3.0, rilasciata nel mese di Ottobre 2008, sono:&lt;/p&gt;
&lt;ul style="text-align:justify;"&gt;
&lt;li&gt;Supporto alla famiglia di processori Blackfin di Analog Devices e il set di istruzioni ARM Thumb e Thumb2&lt;/li&gt;
&lt;li&gt;Riduzione del &lt;a&gt;&lt;strong&gt;footprint &lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;minimo a 64KB di RAM&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Miglioramenti nell&amp;#39;interoperabilit&amp;agrave; con codice nativo permettendo l&amp;#39;&lt;strong&gt;accesso diretto all&amp;#39;hardware&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Un &lt;a href="http://store.microsoft.com/microsoft/-NET-Micro-Framework/product/667DC827?WT.mc_id=netmicroframework"&gt;Porting-Kit&lt;/a&gt; pi&amp;ugrave; accessibile e facile da utilizzare&lt;/li&gt;
&lt;li&gt;Nuovo supporto alla connettivit&amp;agrave; che comprende &lt;strong&gt;Wi-Fi&lt;/strong&gt;, &lt;strong&gt;USB&lt;/strong&gt;, &lt;strong&gt;Web Services for Devices&lt;/strong&gt;, &lt;strong&gt;SSL&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Supporto per un &lt;strong&gt;file system&lt;/strong&gt; compatibile con &lt;strong&gt;FAT32&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Supporto delle funzionalit&amp;agrave; &lt;strong&gt;Touch&lt;/strong&gt; e &lt;strong&gt;Gesture&lt;/strong&gt; per sviluppare applicazioni pi&amp;ugrave; interattive&lt;/li&gt;
&lt;li&gt;Integrazione con &lt;strong&gt;Visual Studio 2008&lt;/strong&gt; e &lt;strong&gt;Visual C# 2008 Express Edition&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;4.&amp;nbsp;&amp;nbsp;&amp;nbsp; Architettura del framework e Common Language Runtime&lt;/h3&gt;
&lt;p style="text-align:justify;"&gt;E&amp;#39; sbagliato e limitativo classificare il .NET Micro Framework come un sistema operativo per lo sviluppo di sistemi embedded. Rispetto alla versione completa del .NET Framework tuttavia il .NET Micro Framework deve in qualche modo sovraintendere alla gestione delle risorse hardware, al controllo dell&amp;#39;esecuzione del codice e alle funzionalit&amp;agrave; di input/output che rappresentano tipiche caratteristiche fornite intrinsecamente da un sistema operativo. La capacit&amp;agrave; di essere eseguito direttamente sull&amp;#39;hardware, senza la presenza di un vero e completo sistema operativo, permette di dire che il .NET Micro Framework &amp;egrave; un &lt;strong&gt;bootable runtime&lt;/strong&gt;.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Analizziamo ora in maggior dettaglio l&amp;#39;architettura del .NET Micro Framework:&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;&amp;nbsp;&lt;img src="/cfs-file.ashx/__key/CommunityServer.Wikis.Components.Files/articles/architettura-micro_2D00_framework.jpg" alt="" /&gt;&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Alla base di tutto c&amp;#39;&amp;egrave; la &lt;strong&gt;&lt;em&gt;HAL&lt;/em&gt;&lt;/strong&gt; (&lt;em&gt;Hardware Abstraction Layer&lt;/em&gt;) che ha il compito di gestire le funzionalit&amp;agrave; di basso livello direttamente connesse all&amp;#39;hardware e alle periferiche. In particolare la HAL contiene codice assembler per gestire la fase di &lt;a href="http://it.wikipedia.org/wiki/Boot"&gt;boot del sistema&lt;/a&gt;, le operazioni di I/O, le &lt;a href="http://it.wikipedia.org/wiki/Interrupt_request"&gt;richieste di interruzioni&lt;/a&gt; (&lt;em&gt;IRQ&lt;/em&gt;), i timer nativi e i driver delle periferiche implementati dallo specifico &lt;strong&gt;&lt;em&gt;OEM&lt;/em&gt;&lt;/strong&gt; (&lt;em&gt;Original Equipment Manufacturer&lt;/em&gt;).&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Immediatamente sopra la HAL &amp;egrave; presente un&amp;#39;importante componente chiamato &lt;strong&gt;&lt;em&gt;PAL&lt;/em&gt;&lt;/strong&gt; (&lt;em&gt;Platform Abstaction Layer&lt;/em&gt;) che permette di realizzare la completa astrazione dalla piattaforma hardware sottostante fornendo quindi una interfaccia di alto livello per l&amp;#39;implementazione del &lt;strong&gt;&lt;em&gt;CLR&lt;/em&gt;&lt;/strong&gt; (&lt;em&gt;Common Language Runtime&lt;/em&gt;).&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Sulla base delle precedenti affermazioni &amp;egrave; facilmente intuibile che il porting del .NET Micro Framework su nuove piattaforme si limiti alla sola riscrittura dei due componenti HAL e &lt;a&gt;PAL&lt;/a&gt;. Nel caso in cui si volesse costruire una versione del .NET Micro Framework che venga eseguita sopra un particolare sistema operativo &amp;egrave; possibile implementare la sola PAL utilizzando direttamente i servizi offerti dal sottostante sistema operativo. Questo &amp;egrave; esattamente il modo in cui &amp;egrave; stato realizzato l&amp;#39;emulatore presente nel SDK.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Il CLR del .NET Micro Framework rispetta la &lt;strong&gt;&lt;em&gt;CLS&lt;/em&gt;&lt;/strong&gt; (&lt;em&gt;Common Language Specification&lt;/em&gt;) e permette l&amp;#39;esecuzione di assembly contenenti l&amp;#39;applicazione sotto forma di codice &lt;strong&gt;&lt;em&gt;IL&lt;/em&gt;&lt;/strong&gt; (&lt;em&gt;Intermediate Language&lt;/em&gt;). L&amp;#39;utilizzo del codice IL permette teoricamente lo sviluppo con differenti linguaggi di programmazione, tuttavia al momento della scrittura di questo articolo l&amp;#39;unico linguaggio direttamente supportato &amp;egrave; il C#.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;In particolare il CLR &amp;egrave; costituito dalle seguenti parti:&lt;/p&gt;
&lt;ul style="text-align:justify;"&gt;
&lt;li&gt;&lt;strong&gt;Execution Engine&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="padding-left:60px;text-align:justify;"&gt;La versione completa del .NET Framework implementa un modello di esecuzione che al momento della chiamata di una funzione prevede la compilazione al volo del codice IL in codice nativo mediante l&amp;#39;utilizzo del &lt;strong&gt;&lt;em&gt;JIT&lt;/em&gt;&lt;/strong&gt; (&lt;em&gt;Just in Time Compiler&lt;/em&gt;). Dal punto di vista dell&amp;#39;occupazione di memoria un approccio di questo tipo richiede uno spazio doppio in quanto &amp;egrave; necessario memorizzare sia la versione IL che la versione nativa del codice applicativo. Siccome la riduzione del footprint dell&amp;#39;applicazione &amp;egrave; un aspetto troppo importante per questo tipo di sistemi embedded, i progettisti del .NET Micro Framework hanno deciso di &lt;strong&gt;interpretare direttamente il codice IL&lt;/strong&gt; a scapito di una minore velocit&amp;agrave; di esecuzione. Tuttavia &amp;egrave; importante sottolineare che il codice IL essendo in forma binaria permette di evitare complesse operazioni di parsing dei sorgenti e questo ha permesso la realizzazione di un interprete molto efficiente. Il CLR inoltre realizza l&amp;#39;astrazione dei thread implementando un &lt;a href="http://en.wikipedia.org/wiki/Cooperative_multitasking#Cooperative_multitasking.2Ftime-sharing"&gt;multitasking di tipo cooperativo&lt;/a&gt; con la possibilit&amp;agrave; di assegnare una priorit&amp;agrave; a ciascun thread e assegnare un tempo massimo di esecuzione ad una porzione di codice.&lt;/p&gt;
&lt;ul style="text-align:justify;"&gt;
&lt;li&gt;&lt;strong&gt;Type &lt;a&gt;System&lt;/a&gt;&lt;/strong&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="padding-left:60px;text-align:justify;"&gt;Il Type System definisce l&amp;#39;infrastruttura dei tipi all&amp;#39;interno del framework che si possono suddividere in due grandi categorie: &lt;a href="http://msdn.microsoft.com/en-us/library/s1ax56ch(VS.80).aspx"&gt;value-types&lt;/a&gt; e &lt;a href="http://msdn.microsoft.com/en-us/library/490f96s2(VS.80).aspx"&gt;reference-type&lt;/a&gt;.&lt;/p&gt;
&lt;ul style="text-align:justify;"&gt;
&lt;li&gt;&lt;strong&gt;Garbage Collector&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="padding-left:60px;text-align:justify;"&gt;Per il .NET Micro Framework &amp;egrave; stata realizzata una versione semplificata e molto leggera del Garbage Collector basata su un algoritmo di &lt;a href="http://www.brpreiss.com/books/opus5/html/page424.html"&gt;Mark and Sweep&lt;/a&gt; non incrementale. Il suo vantaggio principale &amp;egrave; la minimizzazione dello spazio occupato per la sua implementazione. Inoltre tramite l&amp;#39;utilizzo dei &lt;strong&gt;Weak Reference&lt;/strong&gt; &amp;egrave; possibile permettere al Garbage Collector di reclamare e liberare memoria quando si &amp;egrave; molto vicini all&amp;#39;esaurimento della stessa (condizioni di &lt;strong&gt;Memory Pressure&lt;/strong&gt;).&lt;/p&gt;
&lt;ul style="text-align:justify;"&gt;
&lt;li&gt;&lt;strong&gt;Interop&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="padding-left:60px;text-align:justify;"&gt;Il meccanismo di Interop permette di scrivere funzioni direttamente in codice nativo. Il motivo per cui pu&amp;ograve; essere necessaria un&amp;#39;operazione di questo tipo &amp;egrave; quanto si hanno parti dell&amp;#39;applicazione che sono molto critiche in termini di performance. E&amp;#39; importante sottolineare che utilizzando questo meccanismo la portabilit&amp;agrave; della propria applicazione diventa molto pi&amp;ugrave; difficile da gestire quindi, se possibile, &amp;egrave; bene evitare di utilizzare questa caratteristica offerta dal CLR.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Sopra il CLR &amp;egrave; stato implementato un ricco insieme di funzionalit&amp;agrave; che fanno parte di quella che viene comunemente chiamata &lt;strong&gt;BCL&lt;/strong&gt; (&lt;em&gt;Base Class &lt;a&gt;Library&lt;/a&gt;&lt;/em&gt;&lt;em&gt;&amp;nbsp;&lt;/em&gt;).&lt;/p&gt;
&lt;h3&gt;5.&amp;nbsp;&amp;nbsp;&amp;nbsp; Uno sguardo alla Base Class Library&lt;/h3&gt;
&lt;p style="text-align:justify;"&gt;La BCL del .NET Micro Framework cerca di mantenere il pi&amp;ugrave; possibile la compatibilit&amp;agrave; con la versione completa del framework .NET. Per questo motivo, le funzionalit&amp;agrave; direttamente ereditate sono accessibili utilizzando gli stessi namespace e le stesse classi disponibili all&amp;#39;interno della versione completa. Per la realizzazione di funzionalit&amp;agrave; specifiche al .NET Micro Framework sono stati introdotti i nuovi namespace &lt;strong&gt;&lt;em&gt;Microsoft.SPOT&lt;/em&gt;&lt;/strong&gt;, &lt;strong&gt;Dpws&lt;/strong&gt; e &lt;strong&gt;Ws&lt;/strong&gt;. Il nome &lt;strong&gt;&lt;em&gt;SPOT&lt;/em&gt;&lt;/strong&gt; (&lt;em&gt;Smart Personal Object Technology&lt;/em&gt;) &amp;egrave; quello di un progetto, risalente all&amp;#39;anno 2001, dal quale &amp;egrave; nata la prima implementazione del .NET Micro Framework, a cui era stato dato il nome di &lt;strong&gt;TinyCLR&lt;/strong&gt;.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;I namespace ereditati dalla versione completa del .NET Framework sono i seguenti:&lt;/p&gt;
&lt;ul style="text-align:justify;"&gt;
&lt;li&gt;System&lt;/li&gt;
&lt;li&gt;System.Collections&lt;/li&gt;
&lt;li&gt;System.ComponentModel&lt;/li&gt;
&lt;li&gt;System.Diagnostics&lt;/li&gt;
&lt;li&gt;System.Ext&lt;/li&gt;
&lt;li&gt;System.Globalization&lt;/li&gt;
&lt;li&gt;System.IO&lt;/li&gt;
&lt;li&gt;System.IO.Ports&lt;/li&gt;
&lt;li&gt;System.Net&lt;/li&gt;
&lt;li&gt;System.Net.Sockets&lt;/li&gt;
&lt;li&gt;System.Reflection&lt;/li&gt;
&lt;li&gt;System.Resources&lt;/li&gt;
&lt;li&gt;System.Runtime.CompilerServices&lt;/li&gt;
&lt;li&gt;System.Runtime.InteropServices&lt;/li&gt;
&lt;li&gt;System.Runtime.Remoting&lt;/li&gt;
&lt;li&gt;System.Text&lt;/li&gt;
&lt;li&gt;System.Threading&lt;/li&gt;
&lt;li&gt;System.Xml&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="text-align:justify;"&gt;Rispetto al framework completo, si segnalano le seguenti caratteristiche:&lt;/p&gt;
&lt;ul style="text-align:justify;"&gt;
&lt;li&gt;Sono disponibili tutti i tipi primitivi del framework .NET ad eccezione del tipo decimal&lt;/li&gt;
&lt;li&gt;Le stringhe sono memorizzate internamente nel formato UTF8 per minimizzare lo spazio occupato&lt;/li&gt;
&lt;li&gt;E&amp;#39; presente la classe &lt;strong&gt;System.Text.Encoding&lt;/strong&gt; per convertire stringhe in array di byte e viceversa&lt;/li&gt;
&lt;li&gt;La classe &lt;strong&gt;System.Text.StringBuilder&lt;/strong&gt; &lt;strong&gt;non &amp;egrave; disponibile&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Non sono presenti le funzionalit&amp;agrave; di parsing per i numeri e funzioni matematiche sofisticate&lt;/li&gt;
&lt;li&gt;E&amp;#39; possibile utilizzare solamente gli &lt;a href="http://msdn.microsoft.com/en-us/library/2s05feca.aspx"&gt;jagged array&lt;/a&gt; e non gli &lt;a href="http://msdn.microsoft.com/en-us/library/2yd9wwz4.aspx"&gt;array rettangolari&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;I generics non sono disponibili all&amp;#39;interno del .NET Micro Framework&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ArrayList&lt;/strong&gt; &amp;egrave; l&amp;#39;unica collection disponibile nel framework&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="text-align:justify;"&gt;I namespace specifici del .NET Micro Framework sono:&lt;/p&gt;
&lt;ul style="text-align:justify;"&gt;
&lt;li&gt;Microsoft.SPOT&lt;/li&gt;
&lt;li&gt;Microsoft.SPOT.Cryptography&lt;/li&gt;
&lt;li&gt;Microsoft.SPOT.Hardware&lt;/li&gt;
&lt;li&gt;Microsoft.SPOT.Ink&lt;/li&gt;
&lt;li&gt;Microsoft.SPOT.Input&lt;/li&gt;
&lt;li&gt;Microsoft.SPOT.IO&lt;/li&gt;
&lt;li&gt;Microsoft.SPOT.Messaging&lt;/li&gt;
&lt;li&gt;Microsoft.SPOT.Net&lt;/li&gt;
&lt;li&gt;Microsoft.SPOT.Net.NetworkInformation&lt;/li&gt;
&lt;li&gt;Microsoft.SPOT.Net.Security&lt;/li&gt;
&lt;li&gt;Microsoft.SPOT.Presentation&lt;/li&gt;
&lt;li&gt;Microsoft.SPOT.Presentation.Controls&lt;/li&gt;
&lt;li&gt;Microsoft.SPOT.Presentation.Media&lt;/li&gt;
&lt;li&gt;Microsoft.SPOT.Presentation.Shapes&lt;/li&gt;
&lt;li&gt;Microsoft.SPOT.Touch&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="text-align:justify;"&gt;Le classi &lt;strong&gt;Microsoft.SPOT.Dubug&lt;/strong&gt; e &lt;strong&gt;Microsoft.SPOT.Trace&lt;/strong&gt; sono particolarmente importanti per effettuare operazioni di debugging e tracing del codice. La classe &lt;strong&gt;Microsoft.SPOT.Hardware.Utility&lt;/strong&gt; fornisce un insieme di funzionalit&amp;agrave; utili per lo sviluppo delle proprie applicazioni come impostare la data di sistema e la Time Zone o combinare insieme due array. La classe &lt;strong&gt;Microsoft.SPOT.ExtendedTimer&lt;/strong&gt; fornisce altre funzionalit&amp;agrave; di timing come la possibilit&amp;agrave; di avviare un timer a una specifica data.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Per quanto riguarda l&amp;#39;interazione con l&amp;#39;hardware, sono importanti le classi contenute nel namespace &lt;strong&gt;Microsoft.SPOT.Hardware&lt;/strong&gt;. In particolare, le classi &lt;strong&gt;OutputPort&lt;/strong&gt;, &lt;strong&gt;InputPort&lt;/strong&gt;, &lt;strong&gt;InterruptPort&lt;/strong&gt; e &lt;strong&gt;TristatePort&lt;/strong&gt; permettono di gestire in modo estremamente semplice i pin di I/O digitale offrendo un consistente modello a eventi. E&amp;#39; &amp;nbsp;interessante la possibilit&amp;agrave; di inserire&amp;nbsp;un filtro antiglitch in modo da evitare il rilevamento di transizioni spurie sui piedini in ingresso. Con le classi &lt;strong&gt;SerialPort&lt;/strong&gt;, &lt;strong&gt;I2Cdevice&lt;/strong&gt; ed &lt;strong&gt;SPI&lt;/strong&gt; &amp;egrave; possibile facilmente gestire l&amp;#39;interazione con un componente hardware che comunica rispettivamente tramite porta seriale, bus I2C o bus SPI al fine di costruire una opportuna classe (&lt;strong&gt;managed driver&lt;/strong&gt;) che astrae l&amp;#39;interfacciamento al componente stesso e ne semplifica l&amp;#39;utilizzo.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;All&amp;#39;interno del namespace &lt;strong&gt;Microsoft.SPOT.Hardware&lt;/strong&gt; &amp;egrave; inoltre presente la classe &lt;strong&gt;Battery&lt;/strong&gt; per interrogare lo stato della batteria, la classe &lt;strong&gt;Cpu&lt;/strong&gt; per ottenere informazioni relative alla velocit&amp;agrave; di elaborazione e la classe &lt;strong&gt;SystemInfo.SystemID&lt;/strong&gt; per conoscere i codici identificativi del dispositivo hardware su cui l&amp;#39;applicazione viene fatta girare.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Il namespace &lt;strong&gt;Microsoft.SPOT.Net&lt;/strong&gt; e &lt;strong&gt;System.Net&lt;/strong&gt; con l&amp;#39;implementazione della classe &lt;strong&gt;Socket&lt;/strong&gt; aprono il mondo del networking al .NET Micro Framework. Con la classe &lt;strong&gt;Microsoft.SPOT.Net.NetworkInformation.NetworkInterface&lt;/strong&gt; &amp;egrave; possibile ottenere informazioni sulle interfacce di rete disponibili, programmarle con un indirizzo di rete statico o attivare l&amp;#39;acquisizione dinamica dell&amp;#39;indirizzo tramite il protocollo DHCP. Con la classe &lt;strong&gt;System.Net.Dns&lt;/strong&gt;, se &amp;egrave; stata stabilita una connessione, &amp;egrave; possibile facilmente risolvere un nome di dominio in un indirizzo IP.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Ricordiamo anche il &lt;strong&gt;DPWS&lt;/strong&gt; (&lt;strong&gt;Device Profile for Web Services&lt;/strong&gt;), che consiste in un sottoinsieme delle specifiche dei Web Services con l&amp;#39;aggiunta di un meccanismo di ricerca dei dispositivi. Grazie a questa infrastruttura &amp;egrave; possibile collegare in rete tanti dispositivi (o nodi), ciascuno dei quali offrir&amp;agrave; diversi servizi agli altri. Il campo in cui questa tecnologia potrebbe essere applicata con interesse sono le &lt;a href="http://it.wikipedia.org/wiki/Wireless_sensor_network"&gt;reti di sensori wirelesss&lt;/a&gt;.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Le funzionalit&amp;agrave; del DPWS sono contenute all&amp;#39;interno dei vari namespace &lt;strong&gt;Dpws&lt;/strong&gt; e &lt;strong&gt;Ws&lt;/strong&gt;:&lt;/p&gt;
&lt;ul style="text-align:justify;"&gt;
&lt;li&gt;Dpws.Client&lt;/li&gt;
&lt;li&gt;Dpws.Client.Discovery&lt;/li&gt;
&lt;li&gt;Dpws.Client.Eventing&lt;/li&gt;
&lt;li&gt;Dpws.Client.Transport&lt;/li&gt;
&lt;li&gt;Dpws.Device&lt;/li&gt;
&lt;li&gt;Dpws.Device.Services&lt;/li&gt;
&lt;li&gt;Ws.ServiceModel&lt;/li&gt;
&lt;li&gt;Ws.Services&lt;/li&gt;
&lt;li&gt;Ws.Services.Faults&lt;/li&gt;
&lt;li&gt;Ws.Services.Mtom&lt;/li&gt;
&lt;li&gt;Ws.Services.Serialization&lt;/li&gt;
&lt;li&gt;Ws.Services.Soap&lt;/li&gt;
&lt;li&gt;Ws.Services.Transport&lt;/li&gt;
&lt;li&gt;Ws.Services.Transport.HTTP&lt;/li&gt;
&lt;li&gt;Ws.Services.Transport.UDP&lt;/li&gt;
&lt;li&gt;Ws.Services.Utilities&lt;/li&gt;
&lt;li&gt;Ws.Services.WsaAddressing&lt;/li&gt;
&lt;li&gt;Ws.Services.Xml&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="text-align:justify;"&gt;Per gestire le questioni legate alla sicurezza il .NET Micro Framework fornisce l&amp;#39;implementazione del protocollo di cifratura simmetrica &lt;strong&gt;&lt;em&gt;XTEA&lt;/em&gt;&lt;/strong&gt; (&lt;em&gt;Extended Tiny Encryption Algorithm&lt;/em&gt;) e l&amp;#39;implementazione del famoso protocollo a chiave pubblica e privata &lt;strong&gt;&lt;em&gt;RSA&lt;/em&gt;&lt;/strong&gt; tramite le classi &lt;strong&gt;Microsoft.SPOT.Cryptography.Key_TinyEncryptionAlgorithm&lt;/strong&gt; e &lt;strong&gt;Microsoft.SPOT.Key_RSA&lt;/strong&gt;.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Tramite la classe &lt;strong&gt;Microsoft.SPOT.ExecutionContraint&lt;/strong&gt; &amp;egrave; possibile monitorare se una certa operazione viene eseguita all&amp;#39;interno di una prefissata quantit&amp;agrave; di tempo al termine della quale viene sollevata una eccezione.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Estremamente importante &amp;egrave; la capacit&amp;agrave; offerta dal .NET Micro Framework per la serializzazione binaria degli oggetti, utile per trasferire informazioni con il mondo esterno o persisterle su dispositivi di memoria non volatile. Tramite la classe &lt;strong&gt;Microsoft.SPOT.Reflection&lt;/strong&gt; &amp;egrave; possibile effettuare le operazioni di serializzazione e deserializzazione. Utilizzando opportuni attributi inoltre &amp;egrave; possibile alterare il comportamento dell&amp;#39;algoritmo di serializzazione in modo da ridurre al massimo lo spazio occupato dallo stream binario generato. Un valido supporto alla memorizzazione di dati in modo permanente sulla memoria flash e il loro recupero dopo il riavvio del dispositivo &amp;egrave; offerto da quelli che sono chiamati &lt;strong&gt;ExtendedWeakReference&lt;/strong&gt;.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Per quanto riguarda l&amp;#39;interazione con il display e quindi la realizzazione dell&amp;#39;interfaccia grafica della propria applicazione &amp;egrave; possibile utilizzare la classe &lt;strong&gt;Microsoft.SPOT.Bitmap&lt;/strong&gt; per disegnare figure geometriche, immagini e testo in differenti colori. Per realizzare qualcosa di pi&amp;ugrave; sofisticato &amp;egrave; possibile utilizzare le classi presenti all&amp;#39;interno del namespace &lt;strong&gt;Microsoft.SPOT.Presentation&lt;/strong&gt; che rappresentano un piccolissimo sottoinsieme delle funzionalit&amp;agrave; offerte da WPF. Non &amp;egrave; disponibile il linguaggio &lt;a href="http://it.wikipedia.org/wiki/XAML"&gt;&lt;em&gt;XAML&lt;/em&gt;&lt;/a&gt; (&lt;em&gt;eXtensible Application Markup Language&lt;/em&gt;) e gli unici pannelli utilizzabili sono &lt;strong&gt;Canvas&lt;/strong&gt; e &lt;strong&gt;StackPanel&lt;/strong&gt;. I controlli a disposizione sono &lt;strong&gt;Border&lt;/strong&gt;, &lt;strong&gt;ListBox&lt;/strong&gt;, &lt;strong&gt;ListBoxItem&lt;/strong&gt;, &lt;strong&gt;ScrollViewer&lt;/strong&gt;, &lt;strong&gt;Window&lt;/strong&gt;, &lt;strong&gt;Image&lt;/strong&gt;, &lt;strong&gt;Text&lt;/strong&gt; e &lt;strong&gt;TextFlow&lt;/strong&gt;. Infine sono presenti le classiche figure geometriche rappresentate dalle classi &lt;strong&gt;Ellipse&lt;/strong&gt;, &lt;strong&gt;Line&lt;/strong&gt;, &lt;strong&gt;Polygon&lt;/strong&gt; e &lt;strong&gt;Rectangle&lt;/strong&gt;.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;A partire dalla versione 3.0 del framework inoltre &amp;egrave; presente il namespace &lt;strong&gt;Microsft.SPOT.Touch&lt;/strong&gt; che fornisce i tipi necessari alla gestione di uno schermo sensibile al tocco.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;E&amp;#39; molto importante sottolineare la &lt;strong&gt;possibilit&amp;agrave; di gestire in modo strongly-typed le risorse&lt;/strong&gt; (grazie a Visual Studio che genera la classe &lt;strong&gt;Resources&lt;/strong&gt;) e la possibilit&amp;agrave; di gestire la globalizzazione e la localizzazione della propria applicazione in modo da realizzare prodotti per il mercato mondiale. A questo scopo si devono realizzare opportuni assembly satelliti e utilizzare la classe &lt;strong&gt;System.Globalization.CultureInfo&lt;/strong&gt;.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;&lt;a&gt;Per concludere &amp;egrave; fondamentale ricordare che la maggior parte delle classi fornite con il .NET Micro Framework possono essere estese per ottenere funzionalit&amp;agrave; che altrimenti non sarebbero disponibili.&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;6.&amp;nbsp;&amp;nbsp;&amp;nbsp; Come iniziare a sviluppare con il .NET Micro Framework&lt;/h3&gt;
&lt;p style="text-align:justify;"&gt;Per sviluppare applicazioni con il .NET Micro Framework versione 2 o 2.5:&lt;/p&gt;
&lt;ul style="text-align:justify;"&gt;
&lt;li&gt;Installare Microsoft Visual Studio 2005 con SP1&lt;/li&gt;
&lt;li&gt;Installare l&amp;#39; &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=32f5df20-6c95-4fe8-a76c-0ed56a839ad2&amp;amp;displaylang=en"&gt;SDK del .NET Micro Framework 2.0 SP1&lt;/a&gt; o l&amp;#39; &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=EB0EF2A6-03E2-402C-89A4-A636BD0080C5&amp;amp;displaylang=en"&gt;SDK del .NET Micro Framework 2.5&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Creare un nuovo progetto e sviluppare l&amp;#39;applicazione sull&amp;#39;emulatore di base&lt;/li&gt;
&lt;li&gt;Eventualmente realizzare un emulatore personalizzato&lt;/li&gt;
&lt;li&gt;Acquistare un &lt;a href="http://www.microsoft.com/netmf/hardware/default.mspx"&gt;kit di sviluppo&lt;/a&gt; per effettuare il test finale sul dispositivo reale&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="text-align:justify;"&gt;Per sviluppare applicazioni con il .NET Micro Framework versione 3.0:&lt;/p&gt;
&lt;ul style="text-align:justify;"&gt;
&lt;li&gt;Installare Microsoft Visual Studio 2008 con SP1 o &lt;a href="http://www.microsoft.com/express/vcsharp/"&gt;Visual C# 2008 Express Edition&lt;/a&gt; con SP1&lt;/li&gt;
&lt;li&gt;Installare l&amp;#39; &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=9356ED6F-F1F0-43EF-B21A-4644DD089B4A&amp;amp;displaylang=en"&gt;SDK del .NET Micro Framework 3.0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Creare un nuovo progetto e sviluppare l&amp;#39;applicazione sull&amp;#39;emulatore di base&lt;/li&gt;
&lt;li&gt;Eventualmente realizzare un emulatore personalizzato&lt;/li&gt;
&lt;li&gt;Acquistare un &lt;a href="http://www.microsoft.com/netmf/hardware/default.mspx"&gt;kit di sviluppo&lt;/a&gt; per effettuare il test finale sul dispositivo reale&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="text-align:justify;"&gt;E&amp;#39; importante evidenziare che &lt;strong&gt;l&amp;#39;intero SDK del .NET Micro Framework &amp;egrave; rilasciato gratuitamente da Microsoft&lt;/strong&gt; quindi utilizzando la versione Express di Visual C# 2008 &amp;egrave; possibile realizzare qualsiasi applicazione senza alcun costo. L&amp;#39;unica spesa inevitabile rimane l&amp;#39;acquisto di una scheda di valutazione (&lt;strong&gt;evaluation board&lt;/strong&gt;) tramite la quale &amp;egrave; possibile eseguire e testare la propria applicazione direttamente sull&amp;#39;hardware.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Esistono diversi kit di sviluppo ciascuno dei quali fornisce una evaluation board che supporta in modo pi&amp;ugrave; o meno completo una o pi&amp;ugrave; versioni del .NET Micro Framework. Per maggiori informazioni consultare nel &lt;a href="http://www.microsoft.com/netmf/default.mspx"&gt;sito ufficiale del .NET Micro Framework&lt;/a&gt; la pagina &amp;quot;&lt;a href="http://www.microsoft.com/netmf/hardware/default.mspx"&gt;Get Hardware&lt;/a&gt;&amp;quot; che viene costantemente aggiornata in base alle nuove piattaforme su cui viene fatto il porting.&lt;/p&gt;
&lt;h3&gt;7.&amp;nbsp;&amp;nbsp;&amp;nbsp; Risorse utili per ottenere maggiori informazioni&lt;/h3&gt;
&lt;p style="text-align:justify;"&gt;Ecco alcune risorse per ottenere informazioni in generale sullo sviluppo di sistemi embedded con tecnologia Microsoft:&lt;/p&gt;
&lt;ul style="text-align:justify;"&gt;
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/it-it/library/cc185079.aspx"&gt;Articolo &amp;quot;10 anni di Windows Embedded&amp;quot;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://msdn2.microsoft.com/embedded"&gt;Windows Embedded Developer Center&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;
&lt;p style="text-align:justify;"&gt;Per ottenere maggiori informazioni sul .NET Micro Framework e il suo utilizzo consultare le seguenti pagine:&lt;/p&gt;
&lt;ul style="text-align:justify;"&gt;
&lt;li&gt;&lt;a href="http://msevents.microsoft.com/cui/WebCastEventDetails.aspx?culture=en-US&amp;amp;EventID=1032314669&amp;amp;CountryCode=US"&gt;Webcast MSDN: An Introduction to the .NET Micro Framework&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Articolo di &lt;a href="https://mvp.support.microsoft.com/profile=1A0D4B3B-DD09-4EAF-8535-13298702C524"&gt;Raffaele Rialdi&lt;/a&gt; : &lt;a href="http://msdn.microsoft.com/it-it/library/cc185077.aspx"&gt;&amp;quot;Introduzione al Micro Framework.NET&amp;quot;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Articolo di &lt;a href="https://mvp.support.microsoft.com/profile=1A0D4B3B-DD09-4EAF-8535-13298702C524"&gt;Raffaele Rialdi&lt;/a&gt; : &lt;a href="http://msdn.microsoft.com/it-it/library/cc185076.aspx"&gt;&amp;quot;Realizzare una applicazione con Micro Framework.NET&amp;quot;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Articolo di &lt;a href="http://blogs.msdn.com/darioait/"&gt;Dario Airoldi&lt;/a&gt;: &lt;a href="http://blogs.msdn.com/darioait/archive/2007/04/28/introduzione-a-micro-framework.aspx"&gt;&amp;quot;Introduzione a Micro Framework - La vision di Micro Framework&amp;quot;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.microsoft.com/netmf/default.mspx"&gt;Sito ufficiale .NET Micro Framework&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/embedded/netmf"&gt;.NET Micro Framework Developer Center&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="http://blogs.msdn.com/netmfteam/"&gt;.NET Micro Framework Team Blog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.microsoft.com/communities/newsgroups/list/en-us/default.aspx?dg=microsoft.public.dotnet.framework.microframework"&gt;.NET Micro Framework Newsgroup&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="text-align:justify;"&gt;I libri sul .NET Micro Framework attualmente disponibili all&amp;#39;acquisto sono:&lt;/p&gt;
&lt;ul style="text-align:justify;"&gt;
&lt;li&gt;&lt;a href="http://www.amazon.com/Embedded-Programming-Microsoft-Micro-Framework/dp/0735623651/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1229889838&amp;amp;sr=1-1"&gt;Embedded Programming with the Microsoft .NET Micro Framework&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.amazon.com/Expert-NET-Micro-Framework-K%C3%BChner/dp/159059973X/ref=sr_1_2?ie=UTF8&amp;amp;s=books&amp;amp;qid=1229889838&amp;amp;sr=1-2"&gt;Expert .NET Microframework&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description></item><item><title>Introduzione al .NET Micro Framework</title><link>http://dotnettoscana.org/wikis/articles/introduzione-al-net-micro-framework/revision/3.aspx</link><pubDate>Tue, 30 Dec 2008 17:36:03 GMT</pubDate><guid isPermaLink="false">ada252f7-7fca-4bac-88b6-ec47648018b0:6</guid><dc:creator>Andrea Angella</dc:creator><description>&lt;p&gt;&lt;em&gt;Livello: Base - Autore: &lt;/em&gt;&lt;a href="/members/angellaa/default.aspx"&gt;&lt;em&gt;Andrea Angella&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Il presente articolo &amp;egrave; suddiviso nelle seguenti sezioni:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Introduzione allo sviluppo su piattaforme embedded&lt;/li&gt;
&lt;li&gt;Che cos&amp;#39;&amp;egrave; e perch&amp;eacute; &amp;egrave; stato creato il .NET Micro Framework&lt;/li&gt;
&lt;li&gt;Versioni disponibili e caratteristiche principali&lt;/li&gt;
&lt;li&gt;Architettura del framework e Common Language Runtime&lt;/li&gt;
&lt;li&gt;Uno sguardo alla Base Class Library&lt;/li&gt;
&lt;li&gt;Come iniziare a sviluppare con il .NET Micro Framework&lt;/li&gt;
&lt;li&gt;Risorse utili per ottenere maggiori informazioni&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;1.&amp;nbsp;&amp;nbsp;&amp;nbsp; Introduzione allo sviluppo su piattaforme embedded&lt;/h3&gt;
&lt;p&gt;I &lt;strong&gt;sistemi embedded&lt;/strong&gt; sono &lt;strong&gt;sistemi informatici dedicati&lt;/strong&gt; che vengono progettati, al contrario dei sistemi general purpuse, per svolgere compiti ben precisi e determinati. L&amp;#39;hardware in questo tipo di sistemi &amp;egrave; spesso progettato ad hoc e l&amp;#39;interazione con il mondo esterno rende indispensabile la capacit&amp;agrave; di raccogliere, campionare e trasmettere segnali utilizzando dispositivi quali sensori, attuatori e convertitori A/D e D/A. L&amp;#39;interazione con l&amp;#39;utente avviene con mezzi spesso semplificati quali pulsanti e display di dimensione ridotta. L&amp;#39;affidabilit&amp;agrave;, il costo e il consumo di energia diventano metriche importantissime da valutare in fase di progettazione e spesso questi sistemi sono soggetti a particolari vincoli real-time che se non rispettati posso anche portare a conseguenze molto gravi.&lt;/p&gt;
&lt;p&gt;Esempi di sistemi embedded sono sportelli bancomat,&amp;nbsp; apparecchi POS, telefoni cellulari e smartphone, dispositivi di rete come router o firewall, stampanti, distributori di bevande, elettrodomestici&amp;nbsp;, centraline di controllo nelle automobili, robot industriali ecc. In pratica, &lt;strong&gt;qualunque dispositivo hardware dotato di software con lo scopo di risolvere uno specifico problema pu&amp;ograve; essere classificato come un sistema embedded&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Nell&amp;#39;ambito dei sistemi embedded sono disponibili un&amp;#39;ampia variet&amp;agrave; di microprocessori dedicati a 8, 16 e 32 bit. Visto il crescente utilizzo di questo tipo di sistemi sia in ambiente industriale sia in ambiente consumer, Microsoft negli ultimi 10 anni ha rilasciato diversi strumenti e in particolare sistemi operativi per l&amp;#39;utilizzo delle risorse hardware dei sistemi embedded, che nel tempo si sono rapidamente evoluti fino ai recenti &amp;quot;&lt;strong&gt;Windows XP Embedded&lt;/strong&gt;&amp;quot; e &amp;quot;&lt;strong&gt;Windows Embedded CE&lt;/strong&gt;&amp;quot;.&lt;/p&gt;
&lt;p&gt;Windows XP Embedded &amp;egrave; costruito a partire dal sistema desktop Windows XP ed &amp;egrave; caratterizzato da un&amp;#39;alta modularit&amp;agrave; che permette allo sviluppatore di selezionare solo i moduli e i servizi desiderati, con il vantaggio di ottenere un sistema operativo &amp;quot;ritagliato&amp;quot; in base alle proprie esigenze con basso profilo di memoria e maggiore velocit&amp;agrave; di boot.&lt;/p&gt;
&lt;p&gt;Windows Embedded CE &amp;egrave; una piattaforma pi&amp;ugrave; leggera di Windows XP Embedded e, in particolare, fornisce il supporto alla realizzazione di applicazioni real-time e la possibilit&amp;agrave; (in certe configurazioni) di sviluppare applicazioni managed tramite il Microsoft .NET Compact Framework.&lt;/p&gt;
&lt;p&gt;Negli ultimi anni, in numero sempre crescente, sono stati realizzati piccoli dispositivi embedded, spesso connessi in qualche modo fra loro, che svolgono &amp;quot;semplici&amp;quot; ma utili funzionalit&amp;agrave;. Questi dispositivi utilizzano piattaforme hardware molto limitate in termini di memoria disponibile e capacit&amp;agrave; di elaborazione tanto che spesso non &amp;egrave; necessario l&amp;#39;utilizzo di un sistema operativo. In questo scenario, fino a qualche anno fa, non era possibile sfruttare le tecnologie Microsoft, perch&amp;eacute; i sistemi operativi embedded che essa fornisce hanno requisiti hardware e di memoria eccessivi.&lt;/p&gt;
&lt;p&gt;Per questo motivo entra in gioco una nuova e innovativa proposta di Microsoft:&lt;strong&gt; il .NET Micro Framework.&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;2.&amp;nbsp;&amp;nbsp;&amp;nbsp; Che cos&amp;#39;&amp;egrave; e perch&amp;eacute; &amp;egrave; stato creato il .NET Micro Framework&lt;/h3&gt;
&lt;p&gt;La maggior parte degli sviluppatori di&amp;nbsp; sistemi embedded utilizza codice nativo scritto in linguaggio C e talvolta anche direttamente in linguaggio assembly. La necessit&amp;agrave; di interfacciarsi direttamente con l&amp;#39;hardware richiede una profonda conoscenza della piattaforma sopra la quale si sviluppa e quest&amp;#39;aspetto rende notevolmente complessa anche la realizzazione di semplici applicazioni. A complicare la situazione vi &amp;egrave; la disuniformit&amp;agrave; di tool e ambienti di sviluppo per sistemi embedded che ancora oggi non sono sufficientemente completi. Tutto questo rende difficile la realizzazione, il debugging, il testing e soprattutto la manutenzione dei propri progetti.&lt;/p&gt;
&lt;p&gt;La frase utilizzata da Microsoft per far comprendere in poche parole le motivazioni che hanno portato allo sviluppo del &amp;nbsp;Micro Framework &amp;egrave; la seguente: &amp;quot;&lt;strong&gt;&lt;em&gt;Il .NET Micro Framework si propone per lo sviluppo embedded come ha fatto Visual Basic 6 per lo sviluppo delle vecchie applicazioni desktop&lt;/em&gt;&lt;/strong&gt;&amp;quot;.&lt;/p&gt;
&lt;p&gt;Il .NET Micro Framework &amp;egrave; un ambiente operativo per processori embedded a 32 bit, ormai diventati molto economici e a basso consumo, che aumenta il livello di astrazione al quale lo sviluppatore software di sistemi embedded deve lavorare evitando di &amp;quot;sporcarsi le mani&amp;quot; con fastidiosi dettagli relativi all&amp;#39;hardware sottostante. In questo modo lo sviluppatore potr&amp;agrave; preoccuparsi maggiormente dei problemi di alto livello che vuole risolvere: &lt;strong&gt;l&amp;#39;interazione con elementi hardware si limiter&amp;agrave; all&amp;#39;utilizzo di opportune classi in modo completamente object-oriented,&lt;/strong&gt; favorendo quindi la realizzazione di software indipendente dalla piattaforma.&lt;/p&gt;
&lt;p&gt;Il .NET Micro Framework vuole portare nel mondo embedded i principali vantaggi offerti dal mondo managed, permettendo l&amp;#39;utilizzo di una&amp;nbsp; ricca libreria di funzionalit&amp;agrave; indipendenti dall&amp;#39;hardware ed accessibili tramite la scrittura di codice C#, supportata da un completo e potente ambiente di sviluppo come Microsoft Visual Studio, che offre anche avanzate funzionalit&amp;agrave; di debugging ed emulazione del dispositivo reale.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;Con il .NET Micro Framework qualsiasi sviluppatore familiare al mondo .NET pu&amp;ograve; diventare, in modo estremamente semplice e veloce, anche uno sviluppatore embedded!&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;3.&amp;nbsp;&amp;nbsp;&amp;nbsp; Versioni disponibili e caratteristiche principali&lt;/h3&gt;
&lt;p&gt;Il .NET Micro Framework &amp;egrave; stato rilasciato pubblicamente, e messo a disposizione di tutti gli sviluppatori, a partire dalla versione 2.0, resa disponibile nei primi mesi del 2007.&lt;/p&gt;
&lt;p&gt;Le principali caratteristiche del .NET Micro Framework sono:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Disponibilit&amp;agrave; per i processori a 32 bit a basso costo quali &lt;strong&gt;ARM7&lt;/strong&gt; e &lt;strong&gt;ARM9&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Occupazione di spazio (&lt;strong&gt;footprint&lt;/strong&gt;) molto ridotta, dell&amp;#39;ordine di qualche centinaio di Kilobyte&lt;/li&gt;
&lt;li&gt;Runtime che gestisce il boot autonomamente (&lt;strong&gt;non richiede MMU&lt;/strong&gt;)&lt;/li&gt;
&lt;li&gt;Efficiente controllo sul consumo di energia&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Portabilit&amp;agrave;&lt;/strong&gt; su nuove architetture grazie all&amp;#39;utilizzo di un &lt;a href="http://store.microsoft.com/microsoft/-NET-Micro-Framework/product/667DC827?WT.mc_id=netmicroframework"&gt;Porting Kit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Interfacciamento con dispositivi hardware tramite porta seriale RS232, bus I2C o bus SPI &lt;/li&gt;
&lt;li&gt;Ricca libreria indipendente dall&amp;#39;hardware (Base Class Library)&lt;/li&gt;
&lt;li&gt;Runtime grafico basato su un &lt;strong&gt;sottoinsieme di &lt;em&gt;WPF&lt;/em&gt; (&lt;/strong&gt;&lt;em&gt;Windows Presentation Foundation&lt;/em&gt;)&lt;/li&gt;
&lt;li&gt;Caratteristiche e vantaggi ereditati dal Framework .NET&lt;/li&gt;
&lt;li&gt;Supporto alla &lt;strong&gt;localizzazione&lt;/strong&gt; e alla &lt;strong&gt;globalizzazione&lt;/strong&gt; delle applicazioni&lt;/li&gt;
&lt;li&gt;Notevole supporto alla &lt;strong&gt;serializzazione&lt;/strong&gt; dei dati in forma compressa anche su memoria non volatile&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Estensibilit&amp;agrave;&lt;/strong&gt; a livello software e hardware&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sicurezza&lt;/strong&gt; grazie all&amp;#39;utilizzo di assembly firmati e meccanismi di crittografia&lt;/li&gt;
&lt;li&gt;Ambiente di sviluppo &lt;strong&gt;Microsoft Visual Studio&lt;/strong&gt; con debugging ed &lt;strong&gt;emulazione del device&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;La versione 2.5 aggiunge il supporto nativo allo &lt;strong&gt;stack TCP/IP&lt;/strong&gt; e ai &lt;strong&gt;Web Services&lt;/strong&gt; (rilasciati in forma separata).&lt;/p&gt;
&lt;p&gt;Le novit&amp;agrave; della versione 3.0, rilasciata nel mese di Ottobre 2008, sono:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Supporto alla famiglia di processori Blackfin di Analog Devices e il set di istruzioni ARM Thumb e Thumb2&lt;/li&gt;
&lt;li&gt;Riduzione del &lt;a&gt;&lt;strong&gt;footprint &lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;minimo a 64KB di RAM&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Miglioramenti nell&amp;#39;interoperabilit&amp;agrave; con codice nativo permettendo l&amp;#39;&lt;strong&gt;accesso diretto all&amp;#39;hardware&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Un &lt;a href="http://store.microsoft.com/microsoft/-NET-Micro-Framework/product/667DC827?WT.mc_id=netmicroframework"&gt;Porting-Kit&lt;/a&gt; pi&amp;ugrave; accessibile e facile da utilizzare&lt;/li&gt;
&lt;li&gt;Nuovo supporto alla connettivit&amp;agrave; che comprende &lt;strong&gt;Wi-Fi&lt;/strong&gt;, &lt;strong&gt;USB&lt;/strong&gt;, &lt;strong&gt;Web Services for Devices&lt;/strong&gt;, &lt;strong&gt;SSL&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Supporto per un &lt;strong&gt;file system&lt;/strong&gt; compatibile con &lt;strong&gt;FAT32&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Supporto delle funzionalit&amp;agrave; &lt;strong&gt;Touch&lt;/strong&gt; e &lt;strong&gt;Gesture&lt;/strong&gt; per sviluppare applicazioni pi&amp;ugrave; interattive&lt;/li&gt;
&lt;li&gt;Integrazione con &lt;strong&gt;Visual Studio 2008&lt;/strong&gt; e &lt;strong&gt;Visual C# 2008 Express Edition&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;4.&amp;nbsp;&amp;nbsp;&amp;nbsp; Architettura del framework e Common Language Runtime&lt;/h3&gt;
&lt;p&gt;E&amp;#39; sbagliato e limitativo classificare il .NET Micro Framework come un sistema operativo per lo sviluppo di sistemi embedded. Rispetto alla versione completa del .NET Framework tuttavia il .NET Micro Framework deve in qualche modo sovraintendere alla gestione delle risorse hardware, al controllo dell&amp;#39;esecuzione del codice e alle funzionalit&amp;agrave; di input/output che rappresentano tipiche caratteristiche fornite intrinsecamente da un sistema operativo. La capacit&amp;agrave; di essere eseguito direttamente sull&amp;#39;hardware, senza la presenza di un vero e completo sistema operativo, permette di dire che il .NET Micro Framework &amp;egrave; un &lt;strong&gt;bootable runtime&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Analizziamo ora in maggior dettaglio l&amp;#39;architettura del .NET Micro Framework:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;img width="571" src="/cfs-file.ashx/__key/CommunityServer.Wikis.Components.Files/articles/architettura-micro_2D00_framework.jpg" height="368" style="vertical-align:middle;" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Alla base di tutto c&amp;#39;&amp;egrave; la &lt;strong&gt;&lt;em&gt;HAL&lt;/em&gt;&lt;/strong&gt; (&lt;em&gt;Hardware Abstraction Layer&lt;/em&gt;) che ha il compito di gestire le funzionalit&amp;agrave; di basso livello direttamente connesse all&amp;#39;hardware e alle periferiche. In particolare la HAL contiene codice assembler per gestire la fase di &lt;a href="http://it.wikipedia.org/wiki/Boot"&gt;boot del sistema&lt;/a&gt;, le operazioni di I/O, le &lt;a href="http://it.wikipedia.org/wiki/Interrupt_request"&gt;richieste di interruzioni&lt;/a&gt; (&lt;em&gt;IRQ&lt;/em&gt;), i timer nativi e i driver delle periferiche implementati dallo specifico &lt;strong&gt;&lt;em&gt;OEM&lt;/em&gt;&lt;/strong&gt; (&lt;em&gt;Original Equipment Manufacturer&lt;/em&gt;).&lt;/p&gt;
&lt;p&gt;Immediatamente sopra la HAL &amp;egrave; presente un&amp;#39;importante componente chiamato &lt;strong&gt;&lt;em&gt;PAL&lt;/em&gt;&lt;/strong&gt; (&lt;em&gt;Platform Abstaction Layer&lt;/em&gt;) che permette di realizzare la completa astrazione dalla piattaforma hardware sottostante fornendo quindi una interfaccia di alto livello per l&amp;#39;implementazione del &lt;strong&gt;&lt;em&gt;CLR&lt;/em&gt;&lt;/strong&gt; (&lt;em&gt;Common Language Runtime&lt;/em&gt;).&lt;/p&gt;
&lt;p&gt;Sulla base delle precedenti affermazioni &amp;egrave; facilmente intuibile che il porting del .NET Micro Framework su nuove piattaforme si limiti alla sola riscrittura dei due componenti HAL e &lt;a&gt;PAL&lt;/a&gt;. Nel caso in cui si volesse costruire una versione del .NET Micro Framework che venga eseguita sopra un particolare sistema operativo &amp;egrave; possibile implementare la sola PAL utilizzando direttamente i servizi offerti dal sottostante sistema operativo. Questo &amp;egrave; esattamente il modo in cui &amp;egrave; stato realizzato l&amp;#39;emulatore presente nel SDK.&lt;/p&gt;
&lt;p&gt;Il CLR del .NET Micro Framework rispetta la &lt;strong&gt;&lt;em&gt;CLS&lt;/em&gt;&lt;/strong&gt; (&lt;em&gt;Common Language Specification&lt;/em&gt;) e permette l&amp;#39;esecuzione di assembly contenenti l&amp;#39;applicazione sotto forma di codice &lt;strong&gt;&lt;em&gt;IL&lt;/em&gt;&lt;/strong&gt; (&lt;em&gt;Intermediate Language&lt;/em&gt;). L&amp;#39;utilizzo del codice IL permette teoricamente lo sviluppo con differenti linguaggi di programmazione, tuttavia al momento della scrittura di questo articolo l&amp;#39;unico linguaggio direttamente supportato &amp;egrave; il C#.&lt;/p&gt;
&lt;p&gt;In particolare il CLR &amp;egrave; costituito dalle seguenti parti:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Execution Engine&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="PADDING-LEFT:60px;"&gt;La versione completa del .NET Framework implementa un modello di esecuzione che al momento della chiamata di una funzione prevede la compilazione al volo del codice IL in codice nativo mediante l&amp;#39;utilizzo del &lt;strong&gt;&lt;em&gt;JIT&lt;/em&gt;&lt;/strong&gt; (&lt;em&gt;Just in Time Compiler&lt;/em&gt;). Dal punto di vista dell&amp;#39;occupazione di memoria un approccio di questo tipo richiede uno spazio doppio in quanto &amp;egrave; necessario memorizzare sia la versione IL che la versione nativa del codice applicativo. Siccome la riduzione del footprint dell&amp;#39;applicazione &amp;egrave; un aspetto troppo importante per questo tipo di sistemi embedded, i progettisti del .NET Micro Framework hanno deciso di &lt;strong&gt;interpretare direttamente il codice IL&lt;/strong&gt; a scapito di una minore velocit&amp;agrave; di esecuzione. Tuttavia &amp;egrave; importante sottolineare che il codice IL essendo in forma binaria permette di evitare complesse operazioni di parsing dei sorgenti e questo ha permesso la realizzazione di un interprete molto efficiente. Il CLR inoltre realizza l&amp;#39;astrazione dei thread implementando un &lt;a href="http://en.wikipedia.org/wiki/Cooperative_multitasking#Cooperative_multitasking.2Ftime-sharing"&gt;multitasking di tipo cooperativo&lt;/a&gt; con la possibilit&amp;agrave; di assegnare una priorit&amp;agrave; a ciascun thread e assegnare un tempo massimo di esecuzione ad una porzione di codice.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Type &lt;a&gt;System&lt;/a&gt;&lt;/strong&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="PADDING-LEFT:60px;"&gt;Il Type System definisce l&amp;#39;infrastruttura dei tipi all&amp;#39;interno del framework che si possono suddividere in due grandi categorie: &lt;a href="http://msdn.microsoft.com/en-us/library/s1ax56ch(VS.80).aspx"&gt;value-types&lt;/a&gt; e &lt;a href="http://msdn.microsoft.com/en-us/library/490f96s2(VS.80).aspx"&gt;reference-type&lt;/a&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Garbage Collector&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="PADDING-LEFT:60px;"&gt;Per il .NET Micro Framework &amp;egrave; stata realizzata una versione semplificata e molto leggera del Garbage Collector basata su un algoritmo di &lt;a href="http://www.brpreiss.com/books/opus5/html/page424.html"&gt;Mark and Sweep&lt;/a&gt; non incrementale. Il suo vantaggio principale &amp;egrave; la minimizzazione dello spazio occupato per la sua implementazione. Inoltre tramite l&amp;#39;utilizzo dei &lt;strong&gt;Weak Reference&lt;/strong&gt; &amp;egrave; possibile permettere al Garbage Collector di reclamare e liberare memoria quando si &amp;egrave; molto vicini all&amp;#39;esaurimento della stessa (condizioni di &lt;strong&gt;Memory Pressure&lt;/strong&gt;).&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Interop&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="PADDING-LEFT:60px;"&gt;Il meccanismo di Interop permette di scrivere funzioni direttamente in codice nativo. Il motivo per cui pu&amp;ograve; essere necessaria un&amp;#39;operazione di questo tipo &amp;egrave; quanto si hanno parti dell&amp;#39;applicazione che sono molto critiche in termini di performance. E&amp;#39; importante sottolineare che utilizzando questo meccanismo la portabilit&amp;agrave; della propria applicazione diventa molto pi&amp;ugrave; difficile da gestire quindi, se possibile, &amp;egrave; bene evitare di utilizzare questa caratteristica offerta dal CLR.&lt;/p&gt;
&lt;p&gt;Sopra il CLR &amp;egrave; stato implementato un ricco insieme di funzionalit&amp;agrave; che fanno parte di quella che viene comunemente chiamata &lt;strong&gt;BCL&lt;/strong&gt; (&lt;em&gt;Base Class &lt;a&gt;Library&lt;/a&gt;&lt;/em&gt;&lt;em&gt;&amp;nbsp;&lt;/em&gt;).&lt;/p&gt;
&lt;h3&gt;5.&amp;nbsp;&amp;nbsp;&amp;nbsp; Uno sguardo alla Base Class Library&lt;/h3&gt;
&lt;p&gt;La BCL del .NET Micro Framework cerca di mantenere il pi&amp;ugrave; possibile la compatibilit&amp;agrave; con la versione completa del framework .NET. Per questo motivo, le funzionalit&amp;agrave; direttamente ereditate sono accessibili utilizzando gli stessi namespace e le stesse classi disponibili all&amp;#39;interno della versione completa. Per la realizzazione di funzionalit&amp;agrave; specifiche al .NET Micro Framework sono stati introdotti i nuovi namespace &lt;strong&gt;&lt;em&gt;Microsoft.SPOT&lt;/em&gt;&lt;/strong&gt;, &lt;strong&gt;Dpws&lt;/strong&gt; e &lt;strong&gt;Ws&lt;/strong&gt;. Il nome &lt;strong&gt;&lt;em&gt;SPOT&lt;/em&gt;&lt;/strong&gt; (&lt;em&gt;Smart Personal Object Technology&lt;/em&gt;) &amp;egrave; quello di un progetto, risalente all&amp;#39;anno 2001, dal quale &amp;egrave; nata la prima implementazione del .NET Micro Framework, a cui era stato dato il nome di &lt;strong&gt;TinyCLR&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;I namespace ereditati dalla versione completa del .NET Framework sono i seguenti:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;System&lt;/li&gt;
&lt;li&gt;System.Collections&lt;/li&gt;
&lt;li&gt;System.ComponentModel&lt;/li&gt;
&lt;li&gt;System.Diagnostics&lt;/li&gt;
&lt;li&gt;System.Ext&lt;/li&gt;
&lt;li&gt;System.Globalization&lt;/li&gt;
&lt;li&gt;System.IO&lt;/li&gt;
&lt;li&gt;System.IO.Ports&lt;/li&gt;
&lt;li&gt;System.Net&lt;/li&gt;
&lt;li&gt;System.Net.Sockets&lt;/li&gt;
&lt;li&gt;System.Reflection&lt;/li&gt;
&lt;li&gt;System.Resources&lt;/li&gt;
&lt;li&gt;System.Runtime.CompilerServices&lt;/li&gt;
&lt;li&gt;System.Runtime.InteropServices&lt;/li&gt;
&lt;li&gt;System.Runtime.Remoting&lt;/li&gt;
&lt;li&gt;System.Text&lt;/li&gt;
&lt;li&gt;System.Threading&lt;/li&gt;
&lt;li&gt;System.Xml&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Rispetto al framework completo, si segnalano le seguenti caratteristiche:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Sono disponibili tutti i tipi primitivi del framework .NET ad eccezione del tipo decimal&lt;/li&gt;
&lt;li&gt;Le stringhe sono memorizzate internamente nel formato UTF8 per minimizzare lo spazio occupato&lt;/li&gt;
&lt;li&gt;E&amp;#39; presente la classe &lt;strong&gt;System.Text.Encoding&lt;/strong&gt; per convertire stringhe in array di byte e viceversa&lt;/li&gt;
&lt;li&gt;La classe &lt;strong&gt;System.Text.StringBuilder&lt;/strong&gt; &lt;strong&gt;non &amp;egrave; disponibile&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Non sono presenti le funzionalit&amp;agrave; di parsing per i numeri e funzioni matematiche sofisticate&lt;/li&gt;
&lt;li&gt;E&amp;#39; possibile utilizzare solamente gli &lt;a href="http://msdn.microsoft.com/en-us/library/2s05feca.aspx"&gt;jagged array&lt;/a&gt; e non gli &lt;a href="http://msdn.microsoft.com/en-us/library/2yd9wwz4.aspx"&gt;array rettangolari&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;I generics non sono disponibili all&amp;#39;interno del .NET Micro Framework&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ArrayList&lt;/strong&gt; &amp;egrave; l&amp;#39;unica collection disponibile nel framework&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I namespace specifici del .NET Micro Framework sono:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Microsoft.SPOT&lt;/li&gt;
&lt;li&gt;Microsoft.SPOT.Cryptography&lt;/li&gt;
&lt;li&gt;Microsoft.SPOT.Hardware&lt;/li&gt;
&lt;li&gt;Microsoft.SPOT.Ink&lt;/li&gt;
&lt;li&gt;Microsoft.SPOT.Input&lt;/li&gt;
&lt;li&gt;Microsoft.SPOT.IO&lt;/li&gt;
&lt;li&gt;Microsoft.SPOT.Messaging&lt;/li&gt;
&lt;li&gt;Microsoft.SPOT.Net&lt;/li&gt;
&lt;li&gt;Microsoft.SPOT.Net.NetworkInformation&lt;/li&gt;
&lt;li&gt;Microsoft.SPOT.Net.Security&lt;/li&gt;
&lt;li&gt;Microsoft.SPOT.Presentation&lt;/li&gt;
&lt;li&gt;Microsoft.SPOT.Presentation.Controls&lt;/li&gt;
&lt;li&gt;Microsoft.SPOT.Presentation.Media&lt;/li&gt;
&lt;li&gt;Microsoft.SPOT.Presentation.Shapes&lt;/li&gt;
&lt;li&gt;Microsoft.SPOT.Touch&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Le classi &lt;strong&gt;Microsoft.SPOT.Dubug&lt;/strong&gt; e &lt;strong&gt;Microsoft.SPOT.Trace&lt;/strong&gt; sono particolarmente importanti per effettuare operazioni di debugging e tracing del codice. La classe &lt;strong&gt;Microsoft.SPOT.Hardware.Utility&lt;/strong&gt; fornisce un insieme di funzionalit&amp;agrave; utili per lo sviluppo delle proprie applicazioni come impostare la data di sistema e la Time Zone o combinare insieme due array. La classe &lt;strong&gt;Microsoft.SPOT.ExtendedTimer&lt;/strong&gt; fornisce altre funzionalit&amp;agrave; di timing come la possibilit&amp;agrave; di avviare un timer a una specifica data.&lt;/p&gt;
&lt;p&gt;Per quanto riguarda l&amp;#39;interazione con l&amp;#39;hardware, sono importanti le classi contenute nel namespace &lt;strong&gt;Microsoft.SPOT.Hardware&lt;/strong&gt;. In particolare, le classi &lt;strong&gt;OutputPort&lt;/strong&gt;, &lt;strong&gt;InputPort&lt;/strong&gt;, &lt;strong&gt;InterruptPort&lt;/strong&gt; e &lt;strong&gt;TristatePort&lt;/strong&gt; permettono di gestire in modo estremamente semplice i pin di I/O digitale offrendo un consistente modello a eventi. E&amp;#39; &amp;nbsp;interessante la possibilit&amp;agrave; di inserire&amp;nbsp;un filtro antiglitch in modo da evitare il rilevamento di transizioni spurie sui piedini in ingresso. Con le classi &lt;strong&gt;SerialPort&lt;/strong&gt;, &lt;strong&gt;I2Cdevice&lt;/strong&gt; ed &lt;strong&gt;SPI&lt;/strong&gt; &amp;egrave; possibile facilmente gestire l&amp;#39;interazione con un componente hardware che comunica rispettivamente tramite porta seriale, bus I2C o bus SPI al fine di costruire una opportuna classe (&lt;strong&gt;managed driver&lt;/strong&gt;) che astrae l&amp;#39;interfacciamento al componente stesso e ne semplifica l&amp;#39;utilizzo.&lt;/p&gt;
&lt;p&gt;All&amp;#39;interno del namespace &lt;strong&gt;Microsoft.SPOT.Hardware&lt;/strong&gt; &amp;egrave; inoltre presente la classe &lt;strong&gt;Battery&lt;/strong&gt; per interrogare lo stato della batteria, la classe &lt;strong&gt;Cpu&lt;/strong&gt; per ottenere informazioni relative alla velocit&amp;agrave; di elaborazione e la classe &lt;strong&gt;SystemInfo.SystemID&lt;/strong&gt; per conoscere i codici identificativi del dispositivo hardware su cui l&amp;#39;applicazione viene fatta girare.&lt;/p&gt;
&lt;p&gt;Il namespace &lt;strong&gt;Microsoft.SPOT.Net&lt;/strong&gt; e &lt;strong&gt;System.Net&lt;/strong&gt; con l&amp;#39;implementazione della classe &lt;strong&gt;Socket&lt;/strong&gt; aprono il mondo del networking al .NET Micro Framework. Con la classe &lt;strong&gt;Microsoft.SPOT.Net.NetworkInformation.NetworkInterface&lt;/strong&gt; &amp;egrave; possibile ottenere informazioni sulle interfacce di rete disponibili, programmarle con un indirizzo di rete statico o attivare l&amp;#39;acquisizione dinamica dell&amp;#39;indirizzo tramite il protocollo DHCP. Con la classe &lt;strong&gt;System.Net.Dns&lt;/strong&gt;, se &amp;egrave; stata stabilita una connessione, &amp;egrave; possibile facilmente risolvere un nome di dominio in un indirizzo IP.&lt;/p&gt;
&lt;p&gt;Ricordiamo anche il &lt;strong&gt;DPWS&lt;/strong&gt; (&lt;strong&gt;Device Profile for Web Services&lt;/strong&gt;), che consiste in un sottoinsieme delle specifiche dei Web Services con l&amp;#39;aggiunta di un meccanismo di ricerca dei dispositivi. Grazie a questa infrastruttura &amp;egrave; possibile collegare in rete tanti dispositivi (o nodi), ciascuno dei quali offrir&amp;agrave; diversi servizi agli altri. Il campo in cui questa tecnologia potrebbe essere applicata con interesse sono le &lt;a href="http://it.wikipedia.org/wiki/Wireless_sensor_network"&gt;reti di sensori wirelesss&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Le funzionalit&amp;agrave; del DPWS sono contenute all&amp;#39;interno dei vari namespace &lt;strong&gt;Dpws&lt;/strong&gt; e &lt;strong&gt;Ws&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Dpws.Client&lt;/li&gt;
&lt;li&gt;Dpws.Client.Discovery&lt;/li&gt;
&lt;li&gt;Dpws.Client.Eventing&lt;/li&gt;
&lt;li&gt;Dpws.Client.Transport&lt;/li&gt;
&lt;li&gt;Dpws.Device&lt;/li&gt;
&lt;li&gt;Dpws.Device.Services&lt;/li&gt;
&lt;li&gt;Ws.ServiceModel&lt;/li&gt;
&lt;li&gt;Ws.Services&lt;/li&gt;
&lt;li&gt;Ws.Services.Faults&lt;/li&gt;
&lt;li&gt;Ws.Services.Mtom&lt;/li&gt;
&lt;li&gt;Ws.Services.Serialization&lt;/li&gt;
&lt;li&gt;Ws.Services.Soap&lt;/li&gt;
&lt;li&gt;Ws.Services.Transport&lt;/li&gt;
&lt;li&gt;Ws.Services.Transport.HTTP&lt;/li&gt;
&lt;li&gt;Ws.Services.Transport.UDP&lt;/li&gt;
&lt;li&gt;Ws.Services.Utilities&lt;/li&gt;
&lt;li&gt;Ws.Services.WsaAddressing&lt;/li&gt;
&lt;li&gt;Ws.Services.Xml&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Per gestire le questioni legate alla sicurezza il .NET Micro Framework fornisce l&amp;#39;implementazione del protocollo di cifratura simmetrica &lt;strong&gt;&lt;em&gt;XTEA&lt;/em&gt;&lt;/strong&gt; (&lt;em&gt;Extended Tiny Encryption Algorithm&lt;/em&gt;) e l&amp;#39;implementazione del famoso protocollo a chiave pubblica e privata &lt;strong&gt;&lt;em&gt;RSA&lt;/em&gt;&lt;/strong&gt; tramite le classi &lt;strong&gt;Microsoft.SPOT.Cryptography.Key_TinyEncryptionAlgorithm&lt;/strong&gt; e &lt;strong&gt;Microsoft.SPOT.Key_RSA&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Tramite la classe &lt;strong&gt;Microsoft.SPOT.ExecutionContraint&lt;/strong&gt; &amp;egrave; possibile monitorare se una certa operazione viene eseguita all&amp;#39;interno di una prefissata quantit&amp;agrave; di tempo al termine della quale viene sollevata una eccezione.&lt;/p&gt;
&lt;p&gt;Estremamente importante &amp;egrave; la capacit&amp;agrave; offerta dal .NET Micro Framework per la serializzazione binaria degli oggetti, utile per trasferire informazioni con il mondo esterno o persisterle su dispositivi di memoria non volatile. Tramite la classe &lt;strong&gt;Microsoft.SPOT.Reflection&lt;/strong&gt; &amp;egrave; possibile effettuare le operazioni di serializzazione e deserializzazione. Utilizzando opportuni attributi inoltre &amp;egrave; possibile alterare il comportamento dell&amp;#39;algoritmo di serializzazione in modo da ridurre al massimo lo spazio occupato dallo stream binario generato. Un valido supporto alla memorizzazione di dati in modo permanente sulla memoria flash e il loro recupero dopo il riavvio del dispositivo &amp;egrave; offerto da quelli che sono chiamati &lt;strong&gt;ExtendedWeakReference&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Per quanto riguarda l&amp;#39;interazione con il display e quindi la realizzazione dell&amp;#39;interfaccia grafica della propria applicazione &amp;egrave; possibile utilizzare la classe &lt;strong&gt;Microsoft.SPOT.Bitmap&lt;/strong&gt; per disegnare figure geometriche, immagini e testo in differenti colori. Per realizzare qualcosa di pi&amp;ugrave; sofisticato &amp;egrave; possibile utilizzare le classi presenti all&amp;#39;interno del namespace &lt;strong&gt;Microsoft.SPOT.Presentation&lt;/strong&gt; che rappresentano un piccolissimo sottoinsieme delle funzionalit&amp;agrave; offerte da WPF. Non &amp;egrave; disponibile il linguaggio &lt;a href="http://it.wikipedia.org/wiki/XAML"&gt;&lt;em&gt;XAML&lt;/em&gt;&lt;/a&gt; (&lt;em&gt;eXtensible Application Markup Language&lt;/em&gt;) e gli unici pannelli utilizzabili sono &lt;strong&gt;Canvas&lt;/strong&gt; e &lt;strong&gt;StackPanel&lt;/strong&gt;. I controlli a disposizione sono &lt;strong&gt;Border&lt;/strong&gt;, &lt;strong&gt;ListBox&lt;/strong&gt;, &lt;strong&gt;ListBoxItem&lt;/strong&gt;, &lt;strong&gt;ScrollViewer&lt;/strong&gt;, &lt;strong&gt;Window&lt;/strong&gt;, &lt;strong&gt;Image&lt;/strong&gt;, &lt;strong&gt;Text&lt;/strong&gt; e &lt;strong&gt;TextFlow&lt;/strong&gt;. Infine sono presenti le classiche figure geometriche rappresentate dalle classi &lt;strong&gt;Ellipse&lt;/strong&gt;, &lt;strong&gt;Line&lt;/strong&gt;, &lt;strong&gt;Polygon&lt;/strong&gt; e &lt;strong&gt;Rectangle&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;A partire dalla versione 3.0 del framework inoltre &amp;egrave; presente il namespace &lt;strong&gt;Microsft.SPOT.Touch&lt;/strong&gt; che fornisce i tipi necessari alla gestione di uno schermo sensibile al tocco.&lt;/p&gt;
&lt;p&gt;E&amp;#39; molto importante sottolineare la &lt;strong&gt;possibilit&amp;agrave; di gestire in modo strongly-typed le risorse&lt;/strong&gt; (grazie a Visual Studio che genera la classe &lt;strong&gt;Resources&lt;/strong&gt;) e la possibilit&amp;agrave; di gestire la globalizzazione e la localizzazione della propria applicazione in modo da realizzare prodotti per il mercato mondiale. A questo scopo si devono realizzare opportuni assembly satelliti e utilizzare la classe &lt;strong&gt;System.Globalization.CultureInfo&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a&gt;Per concludere &amp;egrave; fondamentale ricordare che la maggior parte delle classi fornite con il .NET Micro Framework possono essere estese per ottenere funzionalit&amp;agrave; che altrimenti non sarebbero disponibili.&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;6.&amp;nbsp;&amp;nbsp;&amp;nbsp; Come iniziare a sviluppare con il .NET Micro Framework&lt;/h3&gt;
&lt;p&gt;Per sviluppare applicazioni con il .NET Micro Framework versione 2 o 2.5:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Installare Microsoft Visual Studio 2005 con SP1&lt;/li&gt;
&lt;li&gt;Installare l&amp;#39; &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=32f5df20-6c95-4fe8-a76c-0ed56a839ad2&amp;amp;displaylang=en"&gt;SDK del .NET Micro Framework 2.0 SP1&lt;/a&gt; o l&amp;#39; &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=EB0EF2A6-03E2-402C-89A4-A636BD0080C5&amp;amp;displaylang=en"&gt;SDK del .NET Micro Framework 2.5&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Creare un nuovo progetto e sviluppare l&amp;#39;applicazione sull&amp;#39;emulatore di base&lt;/li&gt;
&lt;li&gt;Eventualmente realizzare un emulatore personalizzato&lt;/li&gt;
&lt;li&gt;Acquistare un &lt;a href="http://www.microsoft.com/netmf/hardware/default.mspx"&gt;kit di sviluppo&lt;/a&gt; per effettuare il test finale sul dispositivo reale&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Per sviluppare applicazioni con il .NET Micro Framework versione 3.0:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Installare Microsoft Visual Studio 2008 con SP1 o &lt;a href="http://www.microsoft.com/express/vcsharp/"&gt;Visual C# 2008 Express Edition&lt;/a&gt; con SP1&lt;/li&gt;
&lt;li&gt;Installare l&amp;#39; &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=9356ED6F-F1F0-43EF-B21A-4644DD089B4A&amp;amp;displaylang=en"&gt;SDK del .NET Micro Framework 3.0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Creare un nuovo progetto e sviluppare l&amp;#39;applicazione sull&amp;#39;emulatore di base&lt;/li&gt;
&lt;li&gt;Eventualmente realizzare un emulatore personalizzato&lt;/li&gt;
&lt;li&gt;Acquistare un &lt;a href="http://www.microsoft.com/netmf/hardware/default.mspx"&gt;kit di sviluppo&lt;/a&gt; per effettuare il test finale sul dispositivo reale&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;E&amp;#39; importante evidenziare che &lt;strong&gt;l&amp;#39;intero SDK del .NET Micro Framework &amp;egrave; rilasciato gratuitamente da Microsoft&lt;/strong&gt; quindi utilizzando la versione Express di Visual C# 2008 &amp;egrave; possibile realizzare qualsiasi applicazione senza alcun costo. L&amp;#39;unica spesa inevitabile rimane l&amp;#39;acquisto di una scheda di valutazione (&lt;strong&gt;evaluation board&lt;/strong&gt;) tramite la quale &amp;egrave; possibile eseguire e testare la propria applicazione direttamente sull&amp;#39;hardware.&lt;/p&gt;
&lt;p&gt;Esistono diversi kit di sviluppo ciascuno dei quali fornisce una evaluation board che supporta in modo pi&amp;ugrave; o meno completo una o pi&amp;ugrave; versioni del .NET Micro Framework. Per maggiori informazioni consultare nel &lt;a href="http://www.microsoft.com/netmf/default.mspx"&gt;sito ufficiale del .NET Micro Framework&lt;/a&gt; la pagina &amp;quot;&lt;a href="http://www.microsoft.com/netmf/hardware/default.mspx"&gt;Get Hardware&lt;/a&gt;&amp;quot; che viene costantemente aggiornata in base alle nuove piattaforme su cui viene fatto il porting.&lt;/p&gt;
&lt;h3&gt;7.&amp;nbsp;&amp;nbsp;&amp;nbsp; Risorse utili per ottenere maggiori informazioni&lt;/h3&gt;
&lt;p&gt;Ecco alcune risorse per ottenere informazioni in generale sullo sviluppo di sistemi embedded con tecnologia Microsoft:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/it-it/library/cc185079.aspx"&gt;Articolo &amp;quot;10 anni di Windows Embedded&amp;quot;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://msdn2.microsoft.com/embedded"&gt;Windows Embedded Developer Center&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Per ottenere maggiori informazioni sul .NET Micro Framework e il suo utilizzo consultare le seguenti pagine:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://msevents.microsoft.com/cui/WebCastEventDetails.aspx?culture=en-US&amp;amp;EventID=1032314669&amp;amp;CountryCode=US"&gt;Webcast MSDN: An Introduction to the .NET Micro Framework&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Articolo di &lt;a href="https://mvp.support.microsoft.com/profile=1A0D4B3B-DD09-4EAF-8535-13298702C524"&gt;Raffaele Rialdi&lt;/a&gt; : &lt;a href="http://msdn.microsoft.com/it-it/library/cc185077.aspx"&gt;&amp;quot;Introduzione al Micro Framework.NET&amp;quot;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Articolo di &lt;a href="https://mvp.support.microsoft.com/profile=1A0D4B3B-DD09-4EAF-8535-13298702C524"&gt;Raffaele Rialdi&lt;/a&gt; : &lt;a href="http://msdn.microsoft.com/it-it/library/cc185076.aspx"&gt;&amp;quot;Realizzare una applicazione con Micro Framework.NET&amp;quot;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Articolo di &lt;a href="http://blogs.msdn.com/darioait/"&gt;Dario Airoldi&lt;/a&gt;: &lt;a href="http://blogs.msdn.com/darioait/archive/2007/04/28/introduzione-a-micro-framework.aspx"&gt;&amp;quot;Introduzione a Micro Framework - La vision di Micro Framework&amp;quot;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.microsoft.com/netmf/default.mspx"&gt;Sito ufficiale .NET Micro Framework&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/embedded/netmf"&gt;.NET Micro Framework Developer Center&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="http://blogs.msdn.com/netmfteam/"&gt;.NET Micro Framework Team Blog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.microsoft.com/communities/newsgroups/list/en-us/default.aspx?dg=microsoft.public.dotnet.framework.microframework"&gt;.NET Micro Framework Newsgroup&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I libri sul .NET Micro Framework attualmente disponibili all&amp;#39;acquisto sono:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.amazon.com/Embedded-Programming-Microsoft-Micro-Framework/dp/0735623651/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1229889838&amp;amp;sr=1-1"&gt;Embedded Programming with the Microsoft .NET Micro Framework&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.amazon.com/Expert-NET-Micro-Framework-K%C3%BChner/dp/159059973X/ref=sr_1_2?ie=UTF8&amp;amp;s=books&amp;amp;qid=1229889838&amp;amp;sr=1-2"&gt;Expert .NET Microframework&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description></item><item><title>Introduzione al .NET Micro Framework</title><link>http://dotnettoscana.org/wikis/articles/introduzione-al-net-micro-framework/revision/2.aspx</link><pubDate>Tue, 30 Dec 2008 17:33:47 GMT</pubDate><guid isPermaLink="false">ada252f7-7fca-4bac-88b6-ec47648018b0:5</guid><dc:creator>Andrea Angella</dc:creator><description>&lt;p&gt;&lt;em&gt;&lt;br /&gt;Livello: Base - Autore: &lt;/em&gt;&lt;a href="/members/angellaa/default.aspx"&gt;&lt;em&gt;Andrea Angella&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Il presente articolo &amp;egrave; suddiviso nelle seguenti sezioni:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Introduzione allo sviluppo su piattaforme embedded&lt;/li&gt;
&lt;li&gt;Che cos&amp;#39;&amp;egrave; e perch&amp;eacute; &amp;egrave; stato creato il .NET Micro Framework&lt;/li&gt;
&lt;li&gt;Versioni disponibili e caratteristiche principali&lt;/li&gt;
&lt;li&gt;Architettura del framework e Common Language Runtime&lt;/li&gt;
&lt;li&gt;Uno sguardo alla Base Class Library&lt;/li&gt;
&lt;li&gt;Come iniziare a sviluppare con il .NET Micro Framework&lt;/li&gt;
&lt;li&gt;Risorse utili per ottenere maggiori informazioni&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;1.&amp;nbsp;&amp;nbsp;&amp;nbsp; Introduzione allo sviluppo su piattaforme embedded&lt;/h3&gt;
&lt;p&gt;I &lt;strong&gt;sistemi embedded&lt;/strong&gt; sono &lt;strong&gt;sistemi informatici dedicati&lt;/strong&gt; che vengono progettati, al contrario dei sistemi general purpuse, per svolgere compiti ben precisi e determinati. L&amp;#39;hardware in questo tipo di sistemi &amp;egrave; spesso progettato ad hoc e l&amp;#39;interazione con il mondo esterno rende indispensabile la capacit&amp;agrave; di raccogliere, campionare e trasmettere segnali utilizzando dispositivi quali sensori, attuatori e convertitori A/D e D/A. L&amp;#39;interazione con l&amp;#39;utente avviene con mezzi spesso semplificati quali pulsanti e display di dimensione ridotta. L&amp;#39;affidabilit&amp;agrave;, il costo e il consumo di energia diventano metriche importantissime da valutare in fase di progettazione e spesso questi sistemi sono soggetti a particolari vincoli real-time che se non rispettati posso anche portare a conseguenze molto gravi.&lt;/p&gt;
&lt;p&gt;Esempi di sistemi embedded sono sportelli bancomat,&amp;nbsp; apparecchi POS, telefoni cellulari e smartphone, dispositivi di rete come router o firewall, stampanti, distributori di bevande, elettrodomestici&amp;nbsp;, centraline di controllo nelle automobili, robot industriali ecc. In pratica, &lt;strong&gt;qualunque dispositivo hardware dotato di software con lo scopo di risolvere uno specifico problema pu&amp;ograve; essere classificato come un sistema embedded&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Nell&amp;#39;ambito dei sistemi embedded sono disponibili un&amp;#39;ampia variet&amp;agrave; di microprocessori dedicati a 8, 16 e 32 bit. Visto il crescente utilizzo di questo tipo di sistemi sia in ambiente industriale sia in ambiente consumer, Microsoft negli ultimi 10 anni ha rilasciato diversi strumenti e in particolare sistemi operativi per l&amp;#39;utilizzo delle risorse hardware dei sistemi embedded, che nel tempo si sono rapidamente evoluti fino ai recenti &amp;quot;&lt;strong&gt;Windows XP Embedded&lt;/strong&gt;&amp;quot; e &amp;quot;&lt;strong&gt;Windows Embedded CE&lt;/strong&gt;&amp;quot;.&lt;/p&gt;
&lt;p&gt;Windows XP Embedded &amp;egrave; costruito a partire dal sistema desktop Windows XP ed &amp;egrave; caratterizzato da un&amp;#39;alta modularit&amp;agrave; che permette allo sviluppatore di selezionare solo i moduli e i servizi desiderati, con il vantaggio di ottenere un sistema operativo &amp;quot;ritagliato&amp;quot; in base alle proprie esigenze con basso profilo di memoria e maggiore velocit&amp;agrave; di boot.&lt;/p&gt;
&lt;p&gt;Windows Embedded CE &amp;egrave; una piattaforma pi&amp;ugrave; leggera di Windows XP Embedded e, in particolare, fornisce il supporto alla realizzazione di applicazioni real-time e la possibilit&amp;agrave; (in certe configurazioni) di sviluppare applicazioni managed tramite il Microsoft .NET Compact Framework.&lt;/p&gt;
&lt;p&gt;Negli ultimi anni, in numero sempre crescente, sono stati realizzati piccoli dispositivi embedded, spesso connessi in qualche modo fra loro, che svolgono &amp;quot;semplici&amp;quot; ma utili funzionalit&amp;agrave;. Questi dispositivi utilizzano piattaforme hardware molto limitate in termini di memoria disponibile e capacit&amp;agrave; di elaborazione tanto che spesso non &amp;egrave; necessario l&amp;#39;utilizzo di un sistema operativo. In questo scenario, fino a qualche anno fa, non era possibile sfruttare le tecnologie Microsoft, perch&amp;eacute; i sistemi operativi embedded che essa fornisce hanno requisiti hardware e di memoria eccessivi.&lt;/p&gt;
&lt;p&gt;Per questo motivo entra in gioco una nuova e innovativa proposta di Microsoft:&lt;strong&gt; il .NET Micro Framework.&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;2.&amp;nbsp;&amp;nbsp;&amp;nbsp; Che cos&amp;#39;&amp;egrave; e perch&amp;eacute; &amp;egrave; stato creato il .NET Micro Framework&lt;/h3&gt;
&lt;p&gt;La maggior parte degli sviluppatori di&amp;nbsp; sistemi embedded utilizza codice nativo scritto in linguaggio C e talvolta anche direttamente in linguaggio assembly. La necessit&amp;agrave; di interfacciarsi direttamente con l&amp;#39;hardware richiede una profonda conoscenza della piattaforma sopra la quale si sviluppa e quest&amp;#39;aspetto rende notevolmente complessa anche la realizzazione di semplici applicazioni. A complicare la situazione vi &amp;egrave; la disuniformit&amp;agrave; di tool e ambienti di sviluppo per sistemi embedded che ancora oggi non sono sufficientemente completi. Tutto questo rende difficile la realizzazione, il debugging, il testing e soprattutto la manutenzione dei propri progetti.&lt;/p&gt;
&lt;p&gt;La frase utilizzata da Microsoft per far comprendere in poche parole le motivazioni che hanno portato allo sviluppo del &amp;nbsp;Micro Framework &amp;egrave; la seguente: &amp;quot;&lt;strong&gt;&lt;em&gt;Il .NET Micro Framework si propone per lo sviluppo embedded come ha fatto Visual Basic 6 per lo sviluppo delle vecchie applicazioni desktop&lt;/em&gt;&lt;/strong&gt;&amp;quot;.&lt;/p&gt;
&lt;p&gt;Il .NET Micro Framework &amp;egrave; un ambiente operativo per processori embedded a 32 bit, ormai diventati molto economici e a basso consumo, che aumenta il livello di astrazione al quale lo sviluppatore software di sistemi embedded deve lavorare evitando di &amp;quot;sporcarsi le mani&amp;quot; con fastidiosi dettagli relativi all&amp;#39;hardware sottostante. In questo modo lo sviluppatore potr&amp;agrave; preoccuparsi maggiormente dei problemi di alto livello che vuole risolvere: &lt;strong&gt;l&amp;#39;interazione con elementi hardware si limiter&amp;agrave; all&amp;#39;utilizzo di opportune classi in modo completamente object-oriented,&lt;/strong&gt; favorendo quindi la realizzazione di software indipendente dalla piattaforma.&lt;/p&gt;
&lt;p&gt;Il .NET Micro Framework vuole portare nel mondo embedded i principali vantaggi offerti dal mondo managed, permettendo l&amp;#39;utilizzo di una&amp;nbsp; ricca libreria di funzionalit&amp;agrave; indipendenti dall&amp;#39;hardware ed accessibili tramite la scrittura di codice C#, supportata da un completo e potente ambiente di sviluppo come Microsoft Visual Studio, che offre anche avanzate funzionalit&amp;agrave; di debugging ed emulazione del dispositivo reale.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;Con il .NET Micro Framework qualsiasi sviluppatore familiare al mondo .NET pu&amp;ograve; diventare, in modo estremamente semplice e veloce, anche uno sviluppatore embedded!&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;3.&amp;nbsp;&amp;nbsp;&amp;nbsp; Versioni disponibili e caratteristiche principali&lt;/h3&gt;
&lt;p&gt;Il .NET Micro Framework &amp;egrave; stato rilasciato pubblicamente, e messo a disposizione di tutti gli sviluppatori, a partire dalla versione 2.0, resa disponibile nei primi mesi del 2007.&lt;/p&gt;
&lt;p&gt;Le principali caratteristiche del .NET Micro Framework sono:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Disponibilit&amp;agrave; per i processori a 32 bit a basso costo quali &lt;strong&gt;ARM7&lt;/strong&gt; e &lt;strong&gt;ARM9&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Occupazione di spazio (&lt;strong&gt;footprint&lt;/strong&gt;) molto ridotta, dell&amp;#39;ordine di qualche centinaio di Kilobyte&lt;/li&gt;
&lt;li&gt;Runtime che gestisce il boot autonomamente (&lt;strong&gt;non richiede MMU&lt;/strong&gt;)&lt;/li&gt;
&lt;li&gt;Efficiente controllo sul consumo di energia&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Portabilit&amp;agrave;&lt;/strong&gt; su nuove architetture grazie all&amp;#39;utilizzo di un &lt;a href="http://store.microsoft.com/microsoft/-NET-Micro-Framework/product/667DC827?WT.mc_id=netmicroframework"&gt;Porting Kit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Interfacciamento con dispositivi hardware tramite porta seriale RS232, bus I2C o bus SPI &lt;/li&gt;
&lt;li&gt;Ricca libreria indipendente dall&amp;#39;hardware (Base Class Library)&lt;/li&gt;
&lt;li&gt;Runtime grafico basato su un &lt;strong&gt;sottoinsieme di &lt;em&gt;WPF&lt;/em&gt; (&lt;/strong&gt;&lt;em&gt;Windows Presentation Foundation&lt;/em&gt;)&lt;/li&gt;
&lt;li&gt;Caratteristiche e vantaggi ereditati dal Framework .NET&lt;/li&gt;
&lt;li&gt;Supporto alla &lt;strong&gt;localizzazione&lt;/strong&gt; e alla &lt;strong&gt;globalizzazione&lt;/strong&gt; delle applicazioni&lt;/li&gt;
&lt;li&gt;Notevole supporto alla &lt;strong&gt;serializzazione&lt;/strong&gt; dei dati in forma compressa anche su memoria non volatile&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Estensibilit&amp;agrave;&lt;/strong&gt; a livello software e hardware&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sicurezza&lt;/strong&gt; grazie all&amp;#39;utilizzo di assembly firmati e meccanismi di crittografia&lt;/li&gt;
&lt;li&gt;Ambiente di sviluppo &lt;strong&gt;Microsoft Visual Studio&lt;/strong&gt; con debugging ed &lt;strong&gt;emulazione del device&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;La versione 2.5 aggiunge il supporto nativo allo &lt;strong&gt;stack TCP/IP&lt;/strong&gt; e ai &lt;strong&gt;Web Services&lt;/strong&gt; (rilasciati in forma separata).&lt;/p&gt;
&lt;p&gt;Le novit&amp;agrave; della versione 3.0, rilasciata nel mese di Ottobre 2008, sono:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Supporto alla famiglia di processori Blackfin di Analog Devices e il set di istruzioni ARM Thumb e Thumb2&lt;/li&gt;
&lt;li&gt;Riduzione del &lt;a&gt;&lt;strong&gt;footprint &lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;minimo a 64KB di RAM&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Miglioramenti nell&amp;#39;interoperabilit&amp;agrave; con codice nativo permettendo l&amp;#39;&lt;strong&gt;accesso diretto all&amp;#39;hardware&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Un &lt;a href="http://store.microsoft.com/microsoft/-NET-Micro-Framework/product/667DC827?WT.mc_id=netmicroframework"&gt;Porting-Kit&lt;/a&gt; pi&amp;ugrave; accessibile e facile da utilizzare&lt;/li&gt;
&lt;li&gt;Nuovo supporto alla connettivit&amp;agrave; che comprende &lt;strong&gt;Wi-Fi&lt;/strong&gt;, &lt;strong&gt;USB&lt;/strong&gt;, &lt;strong&gt;Web Services for Devices&lt;/strong&gt;, &lt;strong&gt;SSL&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Supporto per un &lt;strong&gt;file system&lt;/strong&gt; compatibile con &lt;strong&gt;FAT32&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Supporto delle funzionalit&amp;agrave; &lt;strong&gt;Touch&lt;/strong&gt; e &lt;strong&gt;Gesture&lt;/strong&gt; per sviluppare applicazioni pi&amp;ugrave; interattive&lt;/li&gt;
&lt;li&gt;Integrazione con &lt;strong&gt;Visual Studio 2008&lt;/strong&gt; e &lt;strong&gt;Visual C# 2008 Express Edition&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;4.&amp;nbsp;&amp;nbsp;&amp;nbsp; Architettura del framework e Common Language Runtime&lt;/h3&gt;
&lt;p&gt;E&amp;#39; sbagliato e limitativo classificare il .NET Micro Framework come un sistema operativo per lo sviluppo di sistemi embedded. Rispetto alla versione completa del .NET Framework tuttavia il .NET Micro Framework deve in qualche modo sovraintendere alla gestione delle risorse hardware, al controllo dell&amp;#39;esecuzione del codice e alle funzionalit&amp;agrave; di input/output che rappresentano tipiche caratteristiche fornite intrinsecamente da un sistema operativo. La capacit&amp;agrave; di essere eseguito direttamente sull&amp;#39;hardware, senza la presenza di un vero e completo sistema operativo, permette di dire che il .NET Micro Framework &amp;egrave; un &lt;strong&gt;bootable runtime&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Analizziamo ora in maggior dettaglio l&amp;#39;architettura del .NET Micro Framework:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;img width="571" src="/cfs-file.ashx/__key/CommunityServer.Wikis.Components.Files/articles/architettura-micro_2D00_framework.jpg" height="368" style="vertical-align:middle;" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Alla base di tutto c&amp;#39;&amp;egrave; la &lt;strong&gt;&lt;em&gt;HAL&lt;/em&gt;&lt;/strong&gt; (&lt;em&gt;Hardware Abstraction Layer&lt;/em&gt;) che ha il compito di gestire le funzionalit&amp;agrave; di basso livello direttamente connesse all&amp;#39;hardware e alle periferiche. In particolare la HAL contiene codice assembler per gestire la fase di &lt;a href="http://it.wikipedia.org/wiki/Boot"&gt;boot del sistema&lt;/a&gt;, le operazioni di I/O, le &lt;a href="http://it.wikipedia.org/wiki/Interrupt_request"&gt;richieste di interruzioni&lt;/a&gt; (&lt;em&gt;IRQ&lt;/em&gt;), i timer nativi e i driver delle periferiche implementati dallo specifico &lt;strong&gt;&lt;em&gt;OEM&lt;/em&gt;&lt;/strong&gt; (&lt;em&gt;Original Equipment Manufacturer&lt;/em&gt;).&lt;/p&gt;
&lt;p&gt;Immediatamente sopra la HAL &amp;egrave; presente un&amp;#39;importante componente chiamato &lt;strong&gt;&lt;em&gt;PAL&lt;/em&gt;&lt;/strong&gt; (&lt;em&gt;Platform Abstaction Layer&lt;/em&gt;) che permette di realizzare la completa astrazione dalla piattaforma hardware sottostante fornendo quindi una interfaccia di alto livello per l&amp;#39;implementazione del &lt;strong&gt;&lt;em&gt;CLR&lt;/em&gt;&lt;/strong&gt; (&lt;em&gt;Common Language Runtime&lt;/em&gt;).&lt;/p&gt;
&lt;p&gt;Sulla base delle precedenti affermazioni &amp;egrave; facilmente intuibile che il porting del .NET Micro Framework su nuove piattaforme si limiti alla sola riscrittura dei due componenti HAL e &lt;a&gt;PAL&lt;/a&gt;. Nel caso in cui si volesse costruire una versione del .NET Micro Framework che venga eseguita sopra un particolare sistema operativo &amp;egrave; possibile implementare la sola PAL utilizzando direttamente i servizi offerti dal sottostante sistema operativo. Questo &amp;egrave; esattamente il modo in cui &amp;egrave; stato realizzato l&amp;#39;emulatore presente nel SDK.&lt;/p&gt;
&lt;p&gt;Il CLR del .NET Micro Framework rispetta la &lt;strong&gt;&lt;em&gt;CLS&lt;/em&gt;&lt;/strong&gt; (&lt;em&gt;Common Language Specification&lt;/em&gt;) e permette l&amp;#39;esecuzione di assembly contenenti l&amp;#39;applicazione sotto forma di codice &lt;strong&gt;&lt;em&gt;IL&lt;/em&gt;&lt;/strong&gt; (&lt;em&gt;Intermediate Language&lt;/em&gt;). L&amp;#39;utilizzo del codice IL permette teoricamente lo sviluppo con differenti linguaggi di programmazione, tuttavia al momento della scrittura di questo articolo l&amp;#39;unico linguaggio direttamente supportato &amp;egrave; il C#.&lt;/p&gt;
&lt;p&gt;In particolare il CLR &amp;egrave; costituito dalle seguenti parti:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Execution Engine&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="PADDING-LEFT:60px;"&gt;La versione completa del .NET Framework implementa un modello di esecuzione che al momento della chiamata di una funzione prevede la compilazione al volo del codice IL in codice nativo mediante l&amp;#39;utilizzo del &lt;strong&gt;&lt;em&gt;JIT&lt;/em&gt;&lt;/strong&gt; (&lt;em&gt;Just in Time Compiler&lt;/em&gt;). Dal punto di vista dell&amp;#39;occupazione di memoria un approccio di questo tipo richiede uno spazio doppio in quanto &amp;egrave; necessario memorizzare sia la versione IL che la versione nativa del codice applicativo. Siccome la riduzione del footprint dell&amp;#39;applicazione &amp;egrave; un aspetto troppo importante per questo tipo di sistemi embedded, i progettisti del .NET Micro Framework hanno deciso di &lt;strong&gt;interpretare direttamente il codice IL&lt;/strong&gt; a scapito di una minore velocit&amp;agrave; di esecuzione. Tuttavia &amp;egrave; importante sottolineare che il codice IL essendo in forma binaria permette di evitare complesse operazioni di parsing dei sorgenti e questo ha permesso la realizzazione di un interprete molto efficiente. Il CLR inoltre realizza l&amp;#39;astrazione dei thread implementando un &lt;a href="http://en.wikipedia.org/wiki/Cooperative_multitasking#Cooperative_multitasking.2Ftime-sharing"&gt;multitasking di tipo cooperativo&lt;/a&gt; con la possibilit&amp;agrave; di assegnare una priorit&amp;agrave; a ciascun thread e assegnare un tempo massimo di esecuzione ad una porzione di codice.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Type &lt;a&gt;System&lt;/a&gt;&lt;/strong&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="PADDING-LEFT:60px;"&gt;Il Type System definisce l&amp;#39;infrastruttura dei tipi all&amp;#39;interno del framework che si possono suddividere in due grandi categorie: &lt;a href="http://msdn.microsoft.com/en-us/library/s1ax56ch(VS.80).aspx"&gt;value-types&lt;/a&gt; e &lt;a href="http://msdn.microsoft.com/en-us/library/490f96s2(VS.80).aspx"&gt;reference-type&lt;/a&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Garbage Collector&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="PADDING-LEFT:60px;"&gt;Per il .NET Micro Framework &amp;egrave; stata realizzata una versione semplificata e molto leggera del Garbage Collector basata su un algoritmo di &lt;a href="http://www.brpreiss.com/books/opus5/html/page424.html"&gt;Mark and Sweep&lt;/a&gt; non incrementale. Il suo vantaggio principale &amp;egrave; la minimizzazione dello spazio occupato per la sua implementazione. Inoltre tramite l&amp;#39;utilizzo dei &lt;strong&gt;Weak Reference&lt;/strong&gt; &amp;egrave; possibile permettere al Garbage Collector di reclamare e liberare memoria quando si &amp;egrave; molto vicini all&amp;#39;esaurimento della stessa (condizioni di &lt;strong&gt;Memory Pressure&lt;/strong&gt;).&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Interop&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="PADDING-LEFT:60px;"&gt;Il meccanismo di Interop permette di scrivere funzioni direttamente in codice nativo. Il motivo per cui pu&amp;ograve; essere necessaria un&amp;#39;operazione di questo tipo &amp;egrave; quanto si hanno parti dell&amp;#39;applicazione che sono molto critiche in termini di performance. E&amp;#39; importante sottolineare che utilizzando questo meccanismo la portabilit&amp;agrave; della propria applicazione diventa molto pi&amp;ugrave; difficile da gestire quindi, se possibile, &amp;egrave; bene evitare di utilizzare questa caratteristica offerta dal CLR.&lt;/p&gt;
&lt;p&gt;Sopra il CLR &amp;egrave; stato implementato un ricco insieme di funzionalit&amp;agrave; che fanno parte di quella che viene comunemente chiamata &lt;strong&gt;BCL&lt;/strong&gt; (&lt;em&gt;Base Class &lt;a&gt;Library&lt;/a&gt;&lt;/em&gt;&lt;em&gt;&amp;nbsp;&lt;/em&gt;).&lt;/p&gt;
&lt;h3&gt;5.&amp;nbsp;&amp;nbsp;&amp;nbsp; Uno sguardo alla Base Class Library&lt;/h3&gt;
&lt;p&gt;La BCL del .NET Micro Framework cerca di mantenere il pi&amp;ugrave; possibile la compatibilit&amp;agrave; con la versione completa del framework .NET. Per questo motivo, le funzionalit&amp;agrave; direttamente ereditate sono accessibili utilizzando gli stessi namespace e le stesse classi disponibili all&amp;#39;interno della versione completa. Per la realizzazione di funzionalit&amp;agrave; specifiche al .NET Micro Framework sono stati introdotti i nuovi namespace &lt;strong&gt;&lt;em&gt;Microsoft.SPOT&lt;/em&gt;&lt;/strong&gt;, &lt;strong&gt;Dpws&lt;/strong&gt; e &lt;strong&gt;Ws&lt;/strong&gt;. Il nome &lt;strong&gt;&lt;em&gt;SPOT&lt;/em&gt;&lt;/strong&gt; (&lt;em&gt;Smart Personal Object Technology&lt;/em&gt;) &amp;egrave; quello di un progetto, risalente all&amp;#39;anno 2001, dal quale &amp;egrave; nata la prima implementazione del .NET Micro Framework, a cui era stato dato il nome di &lt;strong&gt;TinyCLR&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;I namespace ereditati dalla versione completa del .NET Framework sono i seguenti:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;System&lt;/li&gt;
&lt;li&gt;System.Collections&lt;/li&gt;
&lt;li&gt;System.ComponentModel&lt;/li&gt;
&lt;li&gt;System.Diagnostics&lt;/li&gt;
&lt;li&gt;System.Ext&lt;/li&gt;
&lt;li&gt;System.Globalization&lt;/li&gt;
&lt;li&gt;System.IO&lt;/li&gt;
&lt;li&gt;System.IO.Ports&lt;/li&gt;
&lt;li&gt;System.Net&lt;/li&gt;
&lt;li&gt;System.Net.Sockets&lt;/li&gt;
&lt;li&gt;System.Reflection&lt;/li&gt;
&lt;li&gt;System.Resources&lt;/li&gt;
&lt;li&gt;System.Runtime.CompilerServices&lt;/li&gt;
&lt;li&gt;System.Runtime.InteropServices&lt;/li&gt;
&lt;li&gt;System.Runtime.Remoting&lt;/li&gt;
&lt;li&gt;System.Text&lt;/li&gt;
&lt;li&gt;System.Threading&lt;/li&gt;
&lt;li&gt;System.Xml&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Rispetto al framework completo, si segnalano le seguenti caratteristiche:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Sono disponibili tutti i tipi primitivi del framework .NET ad eccezione del tipo decimal&lt;/li&gt;
&lt;li&gt;Le stringhe sono memorizzate internamente nel formato UTF8 per minimizzare lo spazio occupato&lt;/li&gt;
&lt;li&gt;E&amp;#39; presente la classe &lt;strong&gt;System.Text.Encoding&lt;/strong&gt; per convertire stringhe in array di byte e viceversa&lt;/li&gt;
&lt;li&gt;La classe &lt;strong&gt;System.Text.StringBuilder&lt;/strong&gt; &lt;strong&gt;non &amp;egrave; disponibile&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Non sono presenti le funzionalit&amp;agrave; di parsing per i numeri e funzioni matematiche sofisticate&lt;/li&gt;
&lt;li&gt;E&amp;#39; possibile utilizzare solamente gli &lt;a href="http://msdn.microsoft.com/en-us/library/2s05feca.aspx"&gt;jagged array&lt;/a&gt; e non gli &lt;a href="http://msdn.microsoft.com/en-us/library/2yd9wwz4.aspx"&gt;array rettangolari&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;I generics non sono disponibili all&amp;#39;interno del .NET Micro Framework&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ArrayList&lt;/strong&gt; &amp;egrave; l&amp;#39;unica collection disponibile nel framework&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I namespace specifici del .NET Micro Framework sono:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Microsoft.SPOT&lt;/li&gt;
&lt;li&gt;Microsoft.SPOT.Cryptography&lt;/li&gt;
&lt;li&gt;Microsoft.SPOT.Hardware&lt;/li&gt;
&lt;li&gt;Microsoft.SPOT.Ink&lt;/li&gt;
&lt;li&gt;Microsoft.SPOT.Input&lt;/li&gt;
&lt;li&gt;Microsoft.SPOT.IO&lt;/li&gt;
&lt;li&gt;Microsoft.SPOT.Messaging&lt;/li&gt;
&lt;li&gt;Microsoft.SPOT.Net&lt;/li&gt;
&lt;li&gt;Microsoft.SPOT.Net.NetworkInformation&lt;/li&gt;
&lt;li&gt;Microsoft.SPOT.Net.Security&lt;/li&gt;
&lt;li&gt;Microsoft.SPOT.Presentation&lt;/li&gt;
&lt;li&gt;Microsoft.SPOT.Presentation.Controls&lt;/li&gt;
&lt;li&gt;Microsoft.SPOT.Presentation.Media&lt;/li&gt;
&lt;li&gt;Microsoft.SPOT.Presentation.Shapes&lt;/li&gt;
&lt;li&gt;Microsoft.SPOT.Touch&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Le classi &lt;strong&gt;Microsoft.SPOT.Dubug&lt;/strong&gt; e &lt;strong&gt;Microsoft.SPOT.Trace&lt;/strong&gt; sono particolarmente importanti per effettuare operazioni di debugging e tracing del codice. La classe &lt;strong&gt;Microsoft.SPOT.Hardware.Utility&lt;/strong&gt; fornisce un insieme di funzionalit&amp;agrave; utili per lo sviluppo delle proprie applicazioni come impostare la data di sistema e la Time Zone o combinare insieme due array. La classe &lt;strong&gt;Microsoft.SPOT.ExtendedTimer&lt;/strong&gt; fornisce altre funzionalit&amp;agrave; di timing come la possibilit&amp;agrave; di avviare un timer a una specifica data.&lt;/p&gt;
&lt;p&gt;Per quanto riguarda l&amp;#39;interazione con l&amp;#39;hardware, sono importanti le classi contenute nel namespace &lt;strong&gt;Microsoft.SPOT.Hardware&lt;/strong&gt;. In particolare, le classi &lt;strong&gt;OutputPort&lt;/strong&gt;, &lt;strong&gt;InputPort&lt;/strong&gt;, &lt;strong&gt;InterruptPort&lt;/strong&gt; e &lt;strong&gt;TristatePort&lt;/strong&gt; permettono di gestire in modo estremamente semplice i pin di I/O digitale offrendo un consistente modello a eventi. E&amp;#39; &amp;nbsp;interessante la possibilit&amp;agrave; di inserire&amp;nbsp;un filtro antiglitch in modo da evitare il rilevamento di transizioni spurie sui piedini in ingresso. Con le classi &lt;strong&gt;SerialPort&lt;/strong&gt;, &lt;strong&gt;I2Cdevice&lt;/strong&gt; ed &lt;strong&gt;SPI&lt;/strong&gt; &amp;egrave; possibile facilmente gestire l&amp;#39;interazione con un componente hardware che comunica rispettivamente tramite porta seriale, bus I2C o bus SPI al fine di costruire una opportuna classe (&lt;strong&gt;managed driver&lt;/strong&gt;) che astrae l&amp;#39;interfacciamento al componente stesso e ne semplifica l&amp;#39;utilizzo.&lt;/p&gt;
&lt;p&gt;All&amp;#39;interno del namespace &lt;strong&gt;Microsoft.SPOT.Hardware&lt;/strong&gt; &amp;egrave; inoltre presente la classe &lt;strong&gt;Battery&lt;/strong&gt; per interrogare lo stato della batteria, la classe &lt;strong&gt;Cpu&lt;/strong&gt; per ottenere informazioni relative alla velocit&amp;agrave; di elaborazione e la classe &lt;strong&gt;SystemInfo.SystemID&lt;/strong&gt; per conoscere i codici identificativi del dispositivo hardware su cui l&amp;#39;applicazione viene fatta girare.&lt;/p&gt;
&lt;p&gt;Il namespace &lt;strong&gt;Microsoft.SPOT.Net&lt;/strong&gt; e &lt;strong&gt;System.Net&lt;/strong&gt; con l&amp;#39;implementazione della classe &lt;strong&gt;Socket&lt;/strong&gt; aprono il mondo del networking al .NET Micro Framework. Con la classe &lt;strong&gt;Microsoft.SPOT.Net.NetworkInformation.NetworkInterface&lt;/strong&gt; &amp;egrave; possibile ottenere informazioni sulle interfacce di rete disponibili, programmarle con un indirizzo di rete statico o attivare l&amp;#39;acquisizione dinamica dell&amp;#39;indirizzo tramite il protocollo DHCP. Con la classe &lt;strong&gt;System.Net.Dns&lt;/strong&gt;, se &amp;egrave; stata stabilita una connessione, &amp;egrave; possibile facilmente risolvere un nome di dominio in un indirizzo IP.&lt;/p&gt;
&lt;p&gt;Ricordiamo anche il &lt;strong&gt;DPWS&lt;/strong&gt; (&lt;strong&gt;Device Profile for Web Services&lt;/strong&gt;), che consiste in un sottoinsieme delle specifiche dei Web Services con l&amp;#39;aggiunta di un meccanismo di ricerca dei dispositivi. Grazie a questa infrastruttura &amp;egrave; possibile collegare in rete tanti dispositivi (o nodi), ciascuno dei quali offrir&amp;agrave; diversi servizi agli altri. Il campo in cui questa tecnologia potrebbe essere applicata con interesse sono le &lt;a href="http://it.wikipedia.org/wiki/Wireless_sensor_network"&gt;reti di sensori wirelesss&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Le funzionalit&amp;agrave; del DPWS sono contenute all&amp;#39;interno dei vari namespace &lt;strong&gt;Dpws&lt;/strong&gt; e &lt;strong&gt;Ws&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Dpws.Client&lt;/li&gt;
&lt;li&gt;Dpws.Client.Discovery&lt;/li&gt;
&lt;li&gt;Dpws.Client.Eventing&lt;/li&gt;
&lt;li&gt;Dpws.Client.Transport&lt;/li&gt;
&lt;li&gt;Dpws.Device&lt;/li&gt;
&lt;li&gt;Dpws.Device.Services&lt;/li&gt;
&lt;li&gt;Ws.ServiceModel&lt;/li&gt;
&lt;li&gt;Ws.Services&lt;/li&gt;
&lt;li&gt;Ws.Services.Faults&lt;/li&gt;
&lt;li&gt;Ws.Services.Mtom&lt;/li&gt;
&lt;li&gt;Ws.Services.Serialization&lt;/li&gt;
&lt;li&gt;Ws.Services.Soap&lt;/li&gt;
&lt;li&gt;Ws.Services.Transport&lt;/li&gt;
&lt;li&gt;Ws.Services.Transport.HTTP&lt;/li&gt;
&lt;li&gt;Ws.Services.Transport.UDP&lt;/li&gt;
&lt;li&gt;Ws.Services.Utilities&lt;/li&gt;
&lt;li&gt;Ws.Services.WsaAddressing&lt;/li&gt;
&lt;li&gt;Ws.Services.Xml&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Per gestire le questioni legate alla sicurezza il .NET Micro Framework fornisce l&amp;#39;implementazione del protocollo di cifratura simmetrica &lt;strong&gt;&lt;em&gt;XTEA&lt;/em&gt;&lt;/strong&gt; (&lt;em&gt;Extended Tiny Encryption Algorithm&lt;/em&gt;) e l&amp;#39;implementazione del famoso protocollo a chiave pubblica e privata &lt;strong&gt;&lt;em&gt;RSA&lt;/em&gt;&lt;/strong&gt; tramite le classi &lt;strong&gt;Microsoft.SPOT.Cryptography.Key_TinyEncryptionAlgorithm&lt;/strong&gt; e &lt;strong&gt;Microsoft.SPOT.Key_RSA&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Tramite la classe &lt;strong&gt;Microsoft.SPOT.ExecutionContraint&lt;/strong&gt; &amp;egrave; possibile monitorare se una certa operazione viene eseguita all&amp;#39;interno di una prefissata quantit&amp;agrave; di tempo al termine della quale viene sollevata una eccezione.&lt;/p&gt;
&lt;p&gt;Estremamente importante &amp;egrave; la capacit&amp;agrave; offerta dal .NET Micro Framework per la serializzazione binaria degli oggetti, utile per trasferire informazioni con il mondo esterno o persisterle su dispositivi di memoria non volatile. Tramite la classe &lt;strong&gt;Microsoft.SPOT.Reflection&lt;/strong&gt; &amp;egrave; possibile effettuare le operazioni di serializzazione e deserializzazione. Utilizzando opportuni attributi inoltre &amp;egrave; possibile alterare il comportamento dell&amp;#39;algoritmo di serializzazione in modo da ridurre al massimo lo spazio occupato dallo stream binario generato. Un valido supporto alla memorizzazione di dati in modo permanente sulla memoria flash e il loro recupero dopo il riavvio del dispositivo &amp;egrave; offerto da quelli che sono chiamati &lt;strong&gt;ExtendedWeakReference&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Per quanto riguarda l&amp;#39;interazione con il display e quindi la realizzazione dell&amp;#39;interfaccia grafica della propria applicazione &amp;egrave; possibile utilizzare la classe &lt;strong&gt;Microsoft.SPOT.Bitmap&lt;/strong&gt; per disegnare figure geometriche, immagini e testo in differenti colori. Per realizzare qualcosa di pi&amp;ugrave; sofisticato &amp;egrave; possibile utilizzare le classi presenti all&amp;#39;interno del namespace &lt;strong&gt;Microsoft.SPOT.Presentation&lt;/strong&gt; che rappresentano un piccolissimo sottoinsieme delle funzionalit&amp;agrave; offerte da WPF. Non &amp;egrave; disponibile il linguaggio &lt;a href="http://it.wikipedia.org/wiki/XAML"&gt;&lt;em&gt;XAML&lt;/em&gt;&lt;/a&gt; (&lt;em&gt;eXtensible Application Markup Language&lt;/em&gt;) e gli unici pannelli utilizzabili sono &lt;strong&gt;Canvas&lt;/strong&gt; e &lt;strong&gt;StackPanel&lt;/strong&gt;. I controlli a disposizione sono &lt;strong&gt;Border&lt;/strong&gt;, &lt;strong&gt;ListBox&lt;/strong&gt;, &lt;strong&gt;ListBoxItem&lt;/strong&gt;, &lt;strong&gt;ScrollViewer&lt;/strong&gt;, &lt;strong&gt;Window&lt;/strong&gt;, &lt;strong&gt;Image&lt;/strong&gt;, &lt;strong&gt;Text&lt;/strong&gt; e &lt;strong&gt;TextFlow&lt;/strong&gt;. Infine sono presenti le classiche figure geometriche rappresentate dalle classi &lt;strong&gt;Ellipse&lt;/strong&gt;, &lt;strong&gt;Line&lt;/strong&gt;, &lt;strong&gt;Polygon&lt;/strong&gt; e &lt;strong&gt;Rectangle&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;A partire dalla versione 3.0 del framework inoltre &amp;egrave; presente il namespace &lt;strong&gt;Microsft.SPOT.Touch&lt;/strong&gt; che fornisce i tipi necessari alla gestione di uno schermo sensibile al tocco.&lt;/p&gt;
&lt;p&gt;E&amp;#39; molto importante sottolineare la &lt;strong&gt;possibilit&amp;agrave; di gestire in modo strongly-typed le risorse&lt;/strong&gt; (grazie a Visual Studio che genera la classe &lt;strong&gt;Resources&lt;/strong&gt;) e la possibilit&amp;agrave; di gestire la globalizzazione e la localizzazione della propria applicazione in modo da realizzare prodotti per il mercato mondiale. A questo scopo si devono realizzare opportuni assembly satelliti e utilizzare la classe &lt;strong&gt;System.Globalization.CultureInfo&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a&gt;Per concludere &amp;egrave; fondamentale ricordare che la maggior parte delle classi fornite con il .NET Micro Framework possono essere estese per ottenere funzionalit&amp;agrave; che altrimenti non sarebbero disponibili.&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;6.&amp;nbsp;&amp;nbsp;&amp;nbsp; Come iniziare a sviluppare con il .NET Micro Framework&lt;/h3&gt;
&lt;p&gt;Per sviluppare applicazioni con il .NET Micro Framework versione 2 o 2.5:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Installare Microsoft Visual Studio 2005 con SP1&lt;/li&gt;
&lt;li&gt;Installare l&amp;#39; &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=32f5df20-6c95-4fe8-a76c-0ed56a839ad2&amp;amp;displaylang=en"&gt;SDK del .NET Micro Framework 2.0 SP1&lt;/a&gt; o l&amp;#39; &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=EB0EF2A6-03E2-402C-89A4-A636BD0080C5&amp;amp;displaylang=en"&gt;SDK del .NET Micro Framework 2.5&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Creare un nuovo progetto e sviluppare l&amp;#39;applicazione sull&amp;#39;emulatore di base&lt;/li&gt;
&lt;li&gt;Eventualmente realizzare un emulatore personalizzato&lt;/li&gt;
&lt;li&gt;Acquistare un &lt;a href="http://www.microsoft.com/netmf/hardware/default.mspx"&gt;kit di sviluppo&lt;/a&gt; per effettuare il test finale sul dispositivo reale&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Per sviluppare applicazioni con il .NET Micro Framework versione 3.0:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Installare Microsoft Visual Studio 2008 con SP1 o &lt;a href="http://www.microsoft.com/express/vcsharp/"&gt;Visual C# 2008 Express Edition&lt;/a&gt; con SP1&lt;/li&gt;
&lt;li&gt;Installare l&amp;#39; &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=9356ED6F-F1F0-43EF-B21A-4644DD089B4A&amp;amp;displaylang=en"&gt;SDK del .NET Micro Framework 3.0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Creare un nuovo progetto e sviluppare l&amp;#39;applicazione sull&amp;#39;emulatore di base&lt;/li&gt;
&lt;li&gt;Eventualmente realizzare un emulatore personalizzato&lt;/li&gt;
&lt;li&gt;Acquistare un &lt;a href="http://www.microsoft.com/netmf/hardware/default.mspx"&gt;kit di sviluppo&lt;/a&gt; per effettuare il test finale sul dispositivo reale&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;E&amp;#39; importante evidenziare che &lt;strong&gt;l&amp;#39;intero SDK del .NET Micro Framework &amp;egrave; rilasciato gratuitamente da Microsoft&lt;/strong&gt; quindi utilizzando la versione Express di Visual C# 2008 &amp;egrave; possibile realizzare qualsiasi applicazione senza alcun costo. L&amp;#39;unica spesa inevitabile rimane l&amp;#39;acquisto di una scheda di valutazione (&lt;strong&gt;evaluation board&lt;/strong&gt;) tramite la quale &amp;egrave; possibile eseguire e testare la propria applicazione direttamente sull&amp;#39;hardware.&lt;/p&gt;
&lt;p&gt;Esistono diversi kit di sviluppo ciascuno dei quali fornisce una evaluation board che supporta in modo pi&amp;ugrave; o meno completo una o pi&amp;ugrave; versioni del .NET Micro Framework. Per maggiori informazioni consultare nel &lt;a href="http://www.microsoft.com/netmf/default.mspx"&gt;sito ufficiale del .NET Micro Framework&lt;/a&gt; la pagina &amp;quot;&lt;a href="http://www.microsoft.com/netmf/hardware/default.mspx"&gt;Get Hardware&lt;/a&gt;&amp;quot; che viene costantemente aggiornata in base alle nuove piattaforme su cui viene fatto il porting.&lt;/p&gt;
&lt;h3&gt;7.&amp;nbsp;&amp;nbsp;&amp;nbsp; Risorse utili per ottenere maggiori informazioni&lt;/h3&gt;
&lt;p&gt;Ecco alcune risorse per ottenere informazioni in generale sullo sviluppo di sistemi embedded con tecnologia Microsoft:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/it-it/library/cc185079.aspx"&gt;Articolo &amp;quot;10 anni di Windows Embedded&amp;quot;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://msdn2.microsoft.com/embedded"&gt;Windows Embedded Developer Center&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Per ottenere maggiori informazioni sul .NET Micro Framework e il suo utilizzo consultare le seguenti pagine:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://msevents.microsoft.com/cui/WebCastEventDetails.aspx?culture=en-US&amp;amp;EventID=1032314669&amp;amp;CountryCode=US"&gt;Webcast MSDN: An Introduction to the .NET Micro Framework&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Articolo di &lt;a href="https://mvp.support.microsoft.com/profile=1A0D4B3B-DD09-4EAF-8535-13298702C524"&gt;Raffaele Rialdi&lt;/a&gt; : &lt;a href="http://msdn.microsoft.com/it-it/library/cc185077.aspx"&gt;&amp;quot;Introduzione al Micro Framework.NET&amp;quot;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Articolo di &lt;a href="https://mvp.support.microsoft.com/profile=1A0D4B3B-DD09-4EAF-8535-13298702C524"&gt;Raffaele Rialdi&lt;/a&gt; : &lt;a href="http://msdn.microsoft.com/it-it/library/cc185076.aspx"&gt;&amp;quot;Realizzare una applicazione con Micro Framework.NET&amp;quot;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Articolo di &lt;a href="http://blogs.msdn.com/darioait/"&gt;Dario Airoldi&lt;/a&gt;: &lt;a href="http://blogs.msdn.com/darioait/archive/2007/04/28/introduzione-a-micro-framework.aspx"&gt;&amp;quot;Introduzione a Micro Framework - La vision di Micro Framework&amp;quot;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.microsoft.com/netmf/default.mspx"&gt;Sito ufficiale .NET Micro Framework&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/embedded/netmf"&gt;.NET Micro Framework Developer Center&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="http://blogs.msdn.com/netmfteam/"&gt;.NET Micro Framework Team Blog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.microsoft.com/communities/newsgroups/list/en-us/default.aspx?dg=microsoft.public.dotnet.framework.microframework"&gt;.NET Micro Framework Newsgroup&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I libri sul .NET Micro Framework attualmente disponibili all&amp;#39;acquisto sono:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.amazon.com/Embedded-Programming-Microsoft-Micro-Framework/dp/0735623651/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1229889838&amp;amp;sr=1-1"&gt;Embedded Programming with the Microsoft .NET Micro Framework&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.amazon.com/Expert-NET-Micro-Framework-K%C3%BChner/dp/159059973X/ref=sr_1_2?ie=UTF8&amp;amp;s=books&amp;amp;qid=1229889838&amp;amp;sr=1-2"&gt;Expert .NET Microframework&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description></item><item><title>Introduzione al .NET Micro Framework</title><link>http://dotnettoscana.org/wikis/articles/introduzione-al-net-micro-framework/revision/1.aspx</link><pubDate>Tue, 30 Dec 2008 17:30:56 GMT</pubDate><guid isPermaLink="false">ada252f7-7fca-4bac-88b6-ec47648018b0:4</guid><dc:creator>Andrea Angella</dc:creator><description>&lt;p&gt;&lt;em&gt;&lt;br /&gt;Livello: Base - Autore: &lt;/em&gt;&lt;a href="/members/angellaa/default.aspx"&gt;&lt;em&gt;Andrea Angella&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Il presente articolo &amp;egrave; suddiviso nelle seguenti sezioni:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Introduzione allo sviluppo su piattaforme embedded&lt;/li&gt;
&lt;li&gt;Che cos&amp;#39;&amp;egrave; e perch&amp;eacute; &amp;egrave; stato creato il .NET Micro Framework&lt;/li&gt;
&lt;li&gt;Versioni disponibili e caratteristiche principali&lt;/li&gt;
&lt;li&gt;Architettura del framework e Common Language Runtime&lt;/li&gt;
&lt;li&gt;Uno sguardo alla Base Class Library&lt;/li&gt;
&lt;li&gt;Come iniziare a sviluppare con il .NET Micro Framework&lt;/li&gt;
&lt;li&gt;Risorse utili per ottenere maggiori informazioni&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;1.&amp;nbsp;&amp;nbsp;&amp;nbsp; Introduzione allo sviluppo su piattaforme embedded&lt;/h2&gt;
&lt;p&gt;I &lt;strong&gt;sistemi embedded&lt;/strong&gt; sono &lt;strong&gt;sistemi informatici dedicati&lt;/strong&gt; che vengono progettati, al contrario dei sistemi general purpuse, per svolgere compiti ben precisi e determinati. L&amp;#39;hardware in questo tipo di sistemi &amp;egrave; spesso progettato ad hoc e l&amp;#39;interazione con il mondo esterno rende indispensabile la capacit&amp;agrave; di raccogliere, campionare e trasmettere segnali utilizzando dispositivi quali sensori, attuatori e convertitori A/D e D/A. L&amp;#39;interazione con l&amp;#39;utente avviene con mezzi spesso semplificati quali pulsanti e display di dimensione ridotta. L&amp;#39;affidabilit&amp;agrave;, il costo e il consumo di energia diventano metriche importantissime da valutare in fase di progettazione e spesso questi sistemi sono soggetti a particolari vincoli real-time che se non rispettati posso anche portare a conseguenze molto gravi.&lt;/p&gt;
&lt;p&gt;Esempi di sistemi embedded sono sportelli bancomat,&amp;nbsp; apparecchi POS, telefoni cellulari e smartphone, dispositivi di rete come router o firewall, stampanti, distributori di bevande, elettrodomestici&lt;a&gt;&lt;/a&gt;&lt;a name="_msoanchor_2" href="/wikis/articles/js/tinymce/jscripts/tiny_mce/plugins/paste/blank.htm#_msocom_2" id="_anchor_2"&gt;[MM2]&lt;/a&gt;&amp;nbsp;, centraline di controllo nelle automobili, robot industriali ecc. In pratica, &lt;strong&gt;qualunque dispositivo hardware dotato di software con lo scopo di risolvere uno specifico problema pu&amp;ograve; essere classificato come un sistema embedded&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Nell&amp;#39;ambito dei sistemi embedded sono disponibili un&amp;#39;ampia variet&amp;agrave; di microprocessori dedicati a 8, 16 e 32 bit. Visto il crescente utilizzo di questo tipo di sistemi sia in ambiente industriale sia in ambiente consumer, Microsoft negli ultimi 10 anni ha rilasciato diversi strumenti e in particolare sistemi operativi per l&amp;#39;utilizzo delle risorse hardware dei sistemi embedded, che nel tempo si sono rapidamente evoluti fino ai recenti &amp;quot;&lt;strong&gt;Windows XP Embedded&lt;/strong&gt;&amp;quot; e &amp;quot;&lt;strong&gt;Windows Embedded CE&lt;/strong&gt;&amp;quot;.&lt;/p&gt;
&lt;p&gt;Windows XP Embedded &amp;egrave; costruito a partire dal sistema desktop Windows XP ed &amp;egrave; caratterizzato da un&amp;#39;alta modularit&amp;agrave; che permette allo sviluppatore di selezionare solo i moduli e i servizi desiderati, con il vantaggio di ottenere un sistema operativo &amp;quot;ritagliato&amp;quot; in base alle proprie esigenze con basso profilo di memoria e maggiore velocit&amp;agrave; di boot.&lt;/p&gt;
&lt;p&gt;Windows Embedded CE &amp;egrave; una piattaforma pi&amp;ugrave; leggera di Windows XP Embedded e, in particolare, fornisce il supporto alla realizzazione di applicazioni real-time e la possibilit&amp;agrave; (in certe configurazioni) di sviluppare applicazioni managed tramite il Microsoft .NET Compact Framework.&lt;/p&gt;
&lt;p&gt;Negli ultimi anni, in numero sempre crescente, sono stati realizzati piccoli dispositivi embedded, spesso connessi in qualche modo fra loro, che svolgono &amp;quot;semplici&amp;quot; ma utili funzionalit&amp;agrave;. Questi dispositivi utilizzano piattaforme hardware molto limitate in termini di memoria disponibile e capacit&amp;agrave; di elaborazione tanto che spesso non &amp;egrave; necessario l&amp;#39;utilizzo di un sistema operativo. In questo scenario, fino a qualche anno fa, non era possibile sfruttare le tecnologie Microsoft, perch&amp;eacute; i sistemi operativi embedded che essa fornisce hanno requisiti hardware e di memoria eccessivi.&lt;/p&gt;
&lt;p&gt;Per questo motivo entra in gioco una nuova e innovativa proposta di Microsoft:&lt;strong&gt; il .NET Micro Framework.&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;2.&amp;nbsp;&amp;nbsp;&amp;nbsp; Che cos&amp;#39;&amp;egrave; e perch&amp;eacute; &amp;egrave; stato creato il .NET Micro Framework&lt;/h2&gt;
&lt;p&gt;La maggior parte degli sviluppatori di&amp;nbsp; sistemi embedded utilizza codice nativo scritto in linguaggio C e talvolta anche direttamente in linguaggio assembly. La necessit&amp;agrave; di interfacciarsi direttamente con l&amp;#39;hardware richiede una profonda conoscenza della piattaforma sopra la quale si sviluppa e quest&amp;#39;aspetto rende notevolmente complessa anche la realizzazione di semplici applicazioni. A complicare la situazione vi &amp;egrave; la disuniformit&amp;agrave; di tool e ambienti di sviluppo per sistemi embedded che ancora oggi non sono sufficientemente completi. Tutto questo rende difficile la realizzazione, il debugging, il testing e soprattutto la manutenzione dei propri progetti.&lt;/p&gt;
&lt;p&gt;La frase utilizzata da Microsoft per far comprendere in poche parole le motivazioni che hanno portato allo sviluppo del &amp;nbsp;Micro Framework &amp;egrave; la seguente: &amp;quot;&lt;strong&gt;&lt;em&gt;Il .NET Micro Framework si propone per lo sviluppo embedded come ha fatto Visual Basic 6 per lo sviluppo delle vecchie applicazioni desktop&lt;/em&gt;&lt;/strong&gt;&amp;quot;.&lt;/p&gt;
&lt;p&gt;Il .NET Micro Framework &amp;egrave; un ambiente operativo per processori embedded a 32 bit, ormai diventati molto economici e a basso consumo, che aumenta il livello di astrazione al quale lo sviluppatore software di sistemi embedded deve lavorare evitando di &amp;quot;sporcarsi le mani&amp;quot; con fastidiosi dettagli relativi all&amp;#39;hardware sottostante. In questo modo lo sviluppatore potr&amp;agrave; preoccuparsi maggiormente dei problemi di alto livello che vuole risolvere: &lt;strong&gt;l&amp;#39;interazione con elementi hardware si limiter&amp;agrave; all&amp;#39;utilizzo di opportune classi in modo completamente object-oriented,&lt;/strong&gt; favorendo quindi la realizzazione di software indipendente dalla piattaforma.&lt;/p&gt;
&lt;p&gt;Il .NET Micro Framework vuole portare nel mondo embedded i principali vantaggi offerti dal mondo managed, permettendo l&amp;#39;utilizzo di una&amp;nbsp; ricca libreria di funzionalit&amp;agrave; indipendenti dall&amp;#39;hardware ed accessibili tramite la scrittura di codice C#, supportata da un completo e potente ambiente di sviluppo come Microsoft Visual Studio, che offre anche avanzate funzionalit&amp;agrave; di debugging ed emulazione del dispositivo reale.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;Con il .NET Micro Framework qualsiasi sviluppatore familiare al mondo .NET pu&amp;ograve; diventare, in modo estremamente semplice e veloce, anche uno sviluppatore embedded!&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;3.&amp;nbsp;&amp;nbsp;&amp;nbsp; Versioni disponibili e caratteristiche principali&lt;/h2&gt;
&lt;p&gt;Il .NET Micro Framework &amp;egrave; stato rilasciato pubblicamente, e messo a disposizione di tutti gli sviluppatori, a partire dalla versione 2.0, resa disponibile nei primi mesi del 2007.&lt;/p&gt;
&lt;p&gt;Le principali caratteristiche del .NET Micro Framework sono:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Disponibilit&amp;agrave; per i processori a 32 bit a basso costo quali &lt;strong&gt;ARM7&lt;/strong&gt; e &lt;strong&gt;ARM9&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Occupazione di spazio (&lt;strong&gt;footprint&lt;/strong&gt;) molto ridotta, dell&amp;#39;ordine di qualche centinaio di Kilobyte&lt;/li&gt;
&lt;li&gt;Runtime che gestisce il boot autonomamente (&lt;strong&gt;non richiede MMU&lt;/strong&gt;)&lt;/li&gt;
&lt;li&gt;Efficiente controllo sul consumo di energia&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Portabilit&amp;agrave;&lt;/strong&gt; su nuove architetture grazie all&amp;#39;utilizzo di un &lt;a href="http://store.microsoft.com/microsoft/-NET-Micro-Framework/product/667DC827?WT.mc_id=netmicroframework"&gt;Porting Kit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Interfacciamento con dispositivi hardware tramite porta seriale RS232, bus I2C o bus SPI &lt;/li&gt;
&lt;li&gt;Ricca libreria indipendente dall&amp;#39;hardware (Base Class Library)&lt;/li&gt;
&lt;li&gt;Runtime grafico basato su un &lt;strong&gt;sottoinsieme di &lt;em&gt;WPF&lt;/em&gt; (&lt;/strong&gt;&lt;em&gt;Windows Presentation Foundation&lt;/em&gt;)&lt;/li&gt;
&lt;li&gt;Caratteristiche e vantaggi ereditati dal Framework .NET&lt;/li&gt;
&lt;li&gt;Supporto alla &lt;strong&gt;localizzazione&lt;/strong&gt; e alla &lt;strong&gt;globalizzazione&lt;/strong&gt; delle applicazioni&lt;/li&gt;
&lt;li&gt;Notevole supporto alla &lt;strong&gt;serializzazione&lt;/strong&gt; dei dati in forma compressa anche su memoria non volatile&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Estensibilit&amp;agrave;&lt;/strong&gt; a livello software e hardware&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sicurezza&lt;/strong&gt; grazie all&amp;#39;utilizzo di assembly firmati e meccanismi di crittografia&lt;/li&gt;
&lt;li&gt;Ambiente di sviluppo &lt;strong&gt;Microsoft Visual Studio&lt;/strong&gt; con debugging ed &lt;strong&gt;emulazione del device&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;La versione 2.5 aggiunge il supporto nativo allo &lt;strong&gt;stack TCP/IP&lt;/strong&gt; e ai &lt;strong&gt;Web Services&lt;/strong&gt; (rilasciati in forma separata).&lt;/p&gt;
&lt;p&gt;Le novit&amp;agrave; della versione 3.0, rilasciata nel mese di Ottobre 2008, sono:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Supporto alla famiglia di processori Blackfin di Analog Devices e il set di istruzioni ARM Thumb e Thumb2&lt;/li&gt;
&lt;li&gt;Riduzione del &lt;a&gt;&lt;strong&gt;footprint &lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;minimo a 64KB di RAM&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Miglioramenti nell&amp;#39;interoperabilit&amp;agrave; con codice nativo permettendo l&amp;#39;&lt;strong&gt;accesso diretto all&amp;#39;hardware&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Un &lt;a href="http://store.microsoft.com/microsoft/-NET-Micro-Framework/product/667DC827?WT.mc_id=netmicroframework"&gt;Porting-Kit&lt;/a&gt; pi&amp;ugrave; accessibile e facile da utilizzare&lt;/li&gt;
&lt;li&gt;Nuovo supporto alla connettivit&amp;agrave; che comprende &lt;strong&gt;Wi-Fi&lt;/strong&gt;, &lt;strong&gt;USB&lt;/strong&gt;, &lt;strong&gt;Web Services for Devices&lt;/strong&gt;, &lt;strong&gt;SSL&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Supporto per un &lt;strong&gt;file system&lt;/strong&gt; compatibile con &lt;strong&gt;FAT32&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Supporto delle funzionalit&amp;agrave; &lt;strong&gt;Touch&lt;/strong&gt; e &lt;strong&gt;Gesture&lt;/strong&gt; per sviluppare applicazioni pi&amp;ugrave; interattive&lt;/li&gt;
&lt;li&gt;Integrazione con &lt;strong&gt;Visual Studio 2008&lt;/strong&gt; e &lt;strong&gt;Visual C# 2008 Express Edition&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;4.&amp;nbsp;&amp;nbsp;&amp;nbsp; Architettura del framework e Common Language Runtime&lt;/h2&gt;
&lt;p&gt;E&amp;#39; sbagliato e limitativo classificare il .NET Micro Framework come un sistema operativo per lo sviluppo di sistemi embedded. Rispetto alla versione completa del .NET Framework tuttavia il .NET Micro Framework deve in qualche modo sovraintendere alla gestione delle risorse hardware, al controllo dell&amp;#39;esecuzione del codice e alle funzionalit&amp;agrave; di input/output che rappresentano tipiche caratteristiche fornite intrinsecamente da un sistema operativo. La capacit&amp;agrave; di essere eseguito direttamente sull&amp;#39;hardware, senza la presenza di un vero e completo sistema operativo, permette di dire che il .NET Micro Framework &amp;egrave; un &lt;strong&gt;bootable runtime&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Analizziamo ora in maggior dettaglio l&amp;#39;architettura del .NET Micro Framework:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;img width="571" src="/cfs-file.ashx/__key/CommunityServer.Wikis.Components.Files/articles/architettura-micro_2D00_framework.jpg" height="368" style="vertical-align:middle;" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Alla base di tutto c&amp;#39;&amp;egrave; la &lt;strong&gt;&lt;em&gt;HAL&lt;/em&gt;&lt;/strong&gt; (&lt;em&gt;Hardware Abstraction Layer&lt;/em&gt;) che ha il compito di gestire le funzionalit&amp;agrave; di basso livello direttamente connesse all&amp;#39;hardware e alle periferiche. In particolare la HAL contiene codice assembler per gestire la fase di &lt;a href="http://it.wikipedia.org/wiki/Boot"&gt;boot del sistema&lt;/a&gt;, le operazioni di I/O, le &lt;a href="http://it.wikipedia.org/wiki/Interrupt_request"&gt;richieste di interruzioni&lt;/a&gt; (&lt;em&gt;IRQ&lt;/em&gt;), i timer nativi e i driver delle periferiche implementati dallo specifico &lt;strong&gt;&lt;em&gt;OEM&lt;/em&gt;&lt;/strong&gt; (&lt;em&gt;Original Equipment Manufacturer&lt;/em&gt;).&lt;/p&gt;
&lt;p&gt;Immediatamente sopra la HAL &amp;egrave; presente un&amp;#39;importante componente chiamato &lt;strong&gt;&lt;em&gt;PAL&lt;/em&gt;&lt;/strong&gt; (&lt;em&gt;Platform Abstaction Layer&lt;/em&gt;) che permette di realizzare la completa astrazione dalla piattaforma hardware sottostante fornendo quindi una interfaccia di alto livello per l&amp;#39;implementazione del &lt;strong&gt;&lt;em&gt;CLR&lt;/em&gt;&lt;/strong&gt; (&lt;em&gt;Common Language Runtime&lt;/em&gt;).&lt;/p&gt;
&lt;p&gt;Sulla base delle precedenti affermazioni &amp;egrave; facilmente intuibile che il porting del .NET Micro Framework su nuove piattaforme si limiti alla sola riscrittura dei due componenti HAL e &lt;a&gt;PAL&lt;/a&gt;. Nel caso in cui si volesse costruire una versione del .NET Micro Framework che venga eseguita sopra un particolare sistema operativo &amp;egrave; possibile implementare la sola PAL utilizzando direttamente i servizi offerti dal sottostante sistema operativo. Questo &amp;egrave; esattamente il modo in cui &amp;egrave; stato realizzato l&amp;#39;emulatore presente nel SDK.&lt;/p&gt;
&lt;p&gt;Il CLR del .NET Micro Framework rispetta la &lt;strong&gt;&lt;em&gt;CLS&lt;/em&gt;&lt;/strong&gt; (&lt;em&gt;Common Language Specification&lt;/em&gt;) e permette l&amp;#39;esecuzione di assembly contenenti l&amp;#39;applicazione sotto forma di codice &lt;strong&gt;&lt;em&gt;IL&lt;/em&gt;&lt;/strong&gt; (&lt;em&gt;Intermediate Language&lt;/em&gt;). L&amp;#39;utilizzo del codice IL permette teoricamente lo sviluppo con differenti linguaggi di programmazione, tuttavia al momento della scrittura di questo articolo l&amp;#39;unico linguaggio direttamente supportato &amp;egrave; il C#.&lt;/p&gt;
&lt;p&gt;In particolare il CLR &amp;egrave; costituito dalle seguenti parti:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Execution Engine&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="PADDING-LEFT:60px;"&gt;La versione completa del .NET Framework implementa un modello di esecuzione che al momento della chiamata di una funzione prevede la compilazione al volo del codice IL in codice nativo mediante l&amp;#39;utilizzo del &lt;strong&gt;&lt;em&gt;JIT&lt;/em&gt;&lt;/strong&gt; (&lt;em&gt;Just in Time Compiler&lt;/em&gt;). Dal punto di vista dell&amp;#39;occupazione di memoria un approccio di questo tipo richiede uno spazio doppio in quanto &amp;egrave; necessario memorizzare sia la versione IL che la versione nativa del codice applicativo. Siccome la riduzione del footprint dell&amp;#39;applicazione &amp;egrave; un aspetto troppo importante per questo tipo di sistemi embedded, i progettisti del .NET Micro Framework hanno deciso di &lt;strong&gt;interpretare direttamente il codice IL&lt;/strong&gt; a scapito di una minore velocit&amp;agrave; di esecuzione. Tuttavia &amp;egrave; importante sottolineare che il codice IL essendo in forma binaria permette di evitare complesse operazioni di parsing dei sorgenti e questo ha permesso la realizzazione di un interprete molto efficiente. Il CLR inoltre realizza l&amp;#39;astrazione dei thread implementando un &lt;a href="http://en.wikipedia.org/wiki/Cooperative_multitasking#Cooperative_multitasking.2Ftime-sharing"&gt;multitasking di tipo cooperativo&lt;/a&gt; con la possibilit&amp;agrave; di assegnare una priorit&amp;agrave; a ciascun thread e assegnare un tempo massimo di esecuzione ad una porzione di codice.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Type &lt;a&gt;System&lt;/a&gt;&lt;/strong&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="PADDING-LEFT:60px;"&gt;Il Type System definisce l&amp;#39;infrastruttura dei tipi all&amp;#39;interno del framework che si possono suddividere in due grandi categorie: &lt;a href="http://msdn.microsoft.com/en-us/library/s1ax56ch(VS.80).aspx"&gt;value-types&lt;/a&gt; e &lt;a href="http://msdn.microsoft.com/en-us/library/490f96s2(VS.80).aspx"&gt;reference-type&lt;/a&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Garbage Collector&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="PADDING-LEFT:60px;"&gt;Per il .NET Micro Framework &amp;egrave; stata realizzata una versione semplificata e molto leggera del Garbage Collector basata su un algoritmo di &lt;a href="http://www.brpreiss.com/books/opus5/html/page424.html"&gt;Mark and Sweep&lt;/a&gt; non incrementale. Il suo vantaggio principale &amp;egrave; la minimizzazione dello spazio occupato per la sua implementazione. Inoltre tramite l&amp;#39;utilizzo dei &lt;strong&gt;Weak Reference&lt;/strong&gt; &amp;egrave; possibile permettere al Garbage Collector di reclamare e liberare memoria quando si &amp;egrave; molto vicini all&amp;#39;esaurimento della stessa (condizioni di &lt;strong&gt;Memory Pressure&lt;/strong&gt;).&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Interop&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="PADDING-LEFT:60px;"&gt;Il meccanismo di Interop permette di scrivere funzioni direttamente in codice nativo. Il motivo per cui pu&amp;ograve; essere necessaria un&amp;#39;operazione di questo tipo &amp;egrave; quanto si hanno parti dell&amp;#39;applicazione che sono molto critiche in termini di performance. E&amp;#39; importante sottolineare che utilizzando questo meccanismo la portabilit&amp;agrave; della propria applicazione diventa molto pi&amp;ugrave; difficile da gestire quindi, se possibile, &amp;egrave; bene evitare di utilizzare questa caratteristica offerta dal CLR.&lt;/p&gt;
&lt;p&gt;Sopra il CLR &amp;egrave; stato implementato un ricco insieme di funzionalit&amp;agrave; che fanno parte di quella che viene comunemente chiamata &lt;strong&gt;BCL&lt;/strong&gt; (&lt;em&gt;Base Class &lt;a&gt;Library&lt;/a&gt;&lt;/em&gt;&lt;em&gt;&amp;nbsp;&lt;/em&gt;).&lt;/p&gt;
&lt;h2&gt;5.&amp;nbsp;&amp;nbsp;&amp;nbsp; Uno sguardo alla Base Class Library&lt;/h2&gt;
&lt;p&gt;La BCL del .NET Micro Framework cerca di mantenere il pi&amp;ugrave; possibile la compatibilit&amp;agrave; con la versione completa del framework .NET. Per questo motivo, le funzionalit&amp;agrave; direttamente ereditate sono accessibili utilizzando gli stessi namespace e le stesse classi disponibili all&amp;#39;interno della versione completa. Per la realizzazione di funzionalit&amp;agrave; specifiche al .NET Micro Framework sono stati introdotti i nuovi namespace &lt;strong&gt;&lt;em&gt;Microsoft.SPOT&lt;/em&gt;&lt;/strong&gt;, &lt;strong&gt;Dpws&lt;/strong&gt; e &lt;strong&gt;Ws&lt;/strong&gt;. Il nome &lt;strong&gt;&lt;em&gt;SPOT&lt;/em&gt;&lt;/strong&gt; (&lt;em&gt;Smart Personal Object Technology&lt;/em&gt;) &amp;egrave; quello di un progetto, risalente all&amp;#39;anno 2001, dal quale &amp;egrave; nata la prima implementazione del .NET Micro Framework, a cui era stato dato il nome di &lt;strong&gt;TinyCLR&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;I namespace ereditati dalla versione completa del .NET Framework sono i seguenti:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;System&lt;/li&gt;
&lt;li&gt;System.Collections&lt;/li&gt;
&lt;li&gt;System.ComponentModel&lt;/li&gt;
&lt;li&gt;System.Diagnostics&lt;/li&gt;
&lt;li&gt;System.Ext&lt;/li&gt;
&lt;li&gt;System.Globalization&lt;/li&gt;
&lt;li&gt;System.IO&lt;/li&gt;
&lt;li&gt;System.IO.Ports&lt;/li&gt;
&lt;li&gt;System.Net&lt;/li&gt;
&lt;li&gt;System.Net.Sockets&lt;/li&gt;
&lt;li&gt;System.Reflection&lt;/li&gt;
&lt;li&gt;System.Resources&lt;/li&gt;
&lt;li&gt;System.Runtime.CompilerServices&lt;/li&gt;
&lt;li&gt;System.Runtime.InteropServices&lt;/li&gt;
&lt;li&gt;System.Runtime.Remoting&lt;/li&gt;
&lt;li&gt;System.Text&lt;/li&gt;
&lt;li&gt;System.Threading&lt;/li&gt;
&lt;li&gt;System.Xml&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Rispetto al framework completo, si segnalano le seguenti caratteristiche:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Sono disponibili tutti i tipi primitivi del framework .NET ad eccezione del tipo decimal&lt;/li&gt;
&lt;li&gt;Le stringhe sono memorizzate internamente nel formato UTF8 per minimizzare lo spazio occupato&lt;/li&gt;
&lt;li&gt;E&amp;#39; presente la classe &lt;strong&gt;System.Text.Encoding&lt;/strong&gt; per convertire stringhe in array di byte e viceversa&lt;/li&gt;
&lt;li&gt;La classe &lt;strong&gt;System.Text.StringBuilder&lt;/strong&gt; &lt;strong&gt;non &amp;egrave; disponibile&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Non sono presenti le funzionalit&amp;agrave; di parsing per i numeri e funzioni matematiche sofisticate&lt;/li&gt;
&lt;li&gt;E&amp;#39; possibile utilizzare solamente gli &lt;a href="http://msdn.microsoft.com/en-us/library/2s05feca.aspx"&gt;jagged array&lt;/a&gt; e non gli &lt;a href="http://msdn.microsoft.com/en-us/library/2yd9wwz4.aspx"&gt;array rettangolari&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;I generics non sono disponibili all&amp;#39;interno del .NET Micro Framework&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ArrayList&lt;/strong&gt; &amp;egrave; l&amp;#39;unica collection disponibile nel framework&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I namespace specifici del .NET Micro Framework sono:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Microsoft.SPOT&lt;/li&gt;
&lt;li&gt;Microsoft.SPOT.Cryptography&lt;/li&gt;
&lt;li&gt;Microsoft.SPOT.Hardware&lt;/li&gt;
&lt;li&gt;Microsoft.SPOT.Ink&lt;/li&gt;
&lt;li&gt;Microsoft.SPOT.Input&lt;/li&gt;
&lt;li&gt;Microsoft.SPOT.IO&lt;/li&gt;
&lt;li&gt;Microsoft.SPOT.Messaging&lt;/li&gt;
&lt;li&gt;Microsoft.SPOT.Net&lt;/li&gt;
&lt;li&gt;Microsoft.SPOT.Net.NetworkInformation&lt;/li&gt;
&lt;li&gt;Microsoft.SPOT.Net.Security&lt;/li&gt;
&lt;li&gt;Microsoft.SPOT.Presentation&lt;/li&gt;
&lt;li&gt;Microsoft.SPOT.Presentation.Controls&lt;/li&gt;
&lt;li&gt;Microsoft.SPOT.Presentation.Media&lt;/li&gt;
&lt;li&gt;Microsoft.SPOT.Presentation.Shapes&lt;/li&gt;
&lt;li&gt;Microsoft.SPOT.Touch&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Le classi &lt;strong&gt;Microsoft.SPOT.Dubug&lt;/strong&gt; e &lt;strong&gt;Microsoft.SPOT.Trace&lt;/strong&gt; sono particolarmente importanti per effettuare operazioni di debugging e tracing del codice. La classe &lt;strong&gt;Microsoft.SPOT.Hardware.Utility&lt;/strong&gt; fornisce un insieme di funzionalit&amp;agrave; utili per lo sviluppo delle proprie applicazioni come impostare la data di sistema e la Time Zone o combinare insieme due array. La classe &lt;strong&gt;Microsoft.SPOT.ExtendedTimer&lt;/strong&gt; fornisce altre funzionalit&amp;agrave; di timing come la possibilit&amp;agrave; di avviare un timer a una specifica data.&lt;/p&gt;
&lt;p&gt;Per quanto riguarda l&amp;#39;interazione con l&amp;#39;hardware, sono importanti le classi contenute nel namespace &lt;strong&gt;Microsoft.SPOT.Hardware&lt;/strong&gt;. In particolare, le classi &lt;strong&gt;OutputPort&lt;/strong&gt;, &lt;strong&gt;InputPort&lt;/strong&gt;, &lt;strong&gt;InterruptPort&lt;/strong&gt; e &lt;strong&gt;TristatePort&lt;/strong&gt; permettono di gestire in modo estremamente semplice i pin di I/O digitale offrendo un consistente modello a eventi. E&amp;#39; &amp;nbsp;interessante la possibilit&amp;agrave; di inserire &lt;a&gt;&lt;/a&gt;&lt;a name="_msoanchor_7" href="/wikis/articles/js/tinymce/jscripts/tiny_mce/plugins/paste/blank.htm#_msocom_7" id="_anchor_7"&gt;[MM7]&lt;/a&gt;&amp;nbsp;un filtro antiglitch in modo da evitare il rilevamento di transizioni spurie sui piedini in ingresso. Con le classi &lt;strong&gt;SerialPort&lt;/strong&gt;, &lt;strong&gt;I2Cdevice&lt;/strong&gt; ed &lt;strong&gt;SPI&lt;/strong&gt; &amp;egrave; possibile facilmente gestire l&amp;#39;interazione con un componente hardware che comunica rispettivamente tramite porta seriale, bus I2C o bus SPI al fine di costruire una opportuna classe (&lt;strong&gt;managed driver&lt;/strong&gt;) che astrae l&amp;#39;interfacciamento al componente stesso e ne semplifica l&amp;#39;utilizzo.&lt;/p&gt;
&lt;p&gt;All&amp;#39;interno del namespace &lt;strong&gt;Microsoft.SPOT.Hardware&lt;/strong&gt; &amp;egrave; inoltre presente la classe &lt;strong&gt;Battery&lt;/strong&gt; per interrogare lo stato della batteria, la classe &lt;strong&gt;Cpu&lt;/strong&gt; per ottenere informazioni relative alla velocit&amp;agrave; di elaborazione e la classe &lt;strong&gt;SystemInfo.SystemID&lt;/strong&gt; per conoscere i codici identificativi del dispositivo hardware su cui l&amp;#39;applicazione viene fatta girare.&lt;/p&gt;
&lt;p&gt;Il namespace &lt;strong&gt;Microsoft.SPOT.Net&lt;/strong&gt; e &lt;strong&gt;System.Net&lt;/strong&gt; con l&amp;#39;implementazione della classe &lt;strong&gt;Socket&lt;/strong&gt; aprono il mondo del networking al .NET Micro Framework. Con la classe &lt;strong&gt;Microsoft.SPOT.Net.NetworkInformation.NetworkInterface&lt;/strong&gt; &amp;egrave; possibile ottenere informazioni sulle interfacce di rete disponibili, programmarle con un indirizzo di rete statico o attivare l&amp;#39;acquisizione dinamica dell&amp;#39;indirizzo tramite il protocollo DHCP. Con la classe &lt;strong&gt;System.Net.Dns&lt;/strong&gt;, se &amp;egrave; stata stabilita una connessione, &amp;egrave; possibile facilmente risolvere un nome di dominio in un indirizzo IP.&lt;/p&gt;
&lt;p&gt;Ricordiamo anche il &lt;strong&gt;DPWS&lt;/strong&gt; (&lt;strong&gt;Device Profile for Web Services&lt;/strong&gt;), che consiste in un sottoinsieme delle specifiche dei Web Services con l&amp;#39;aggiunta di un meccanismo di ricerca dei dispositivi. Grazie a questa infrastruttura &amp;egrave; possibile collegare in rete tanti dispositivi (o nodi), ciascuno dei quali offrir&amp;agrave; diversi servizi agli altri. Il campo in cui questa tecnologia potrebbe essere applicata con interesse sono le &lt;a href="http://it.wikipedia.org/wiki/Wireless_sensor_network"&gt;reti di sensori wirelesss&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Le funzionalit&amp;agrave; del DPWS sono contenute all&amp;#39;interno dei vari namespace &lt;strong&gt;Dpws&lt;/strong&gt; e &lt;strong&gt;Ws&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Dpws.Client&lt;/li&gt;
&lt;li&gt;Dpws.Client.Discovery&lt;/li&gt;
&lt;li&gt;Dpws.Client.Eventing&lt;/li&gt;
&lt;li&gt;Dpws.Client.Transport&lt;/li&gt;
&lt;li&gt;Dpws.Device&lt;/li&gt;
&lt;li&gt;Dpws.Device.Services&lt;/li&gt;
&lt;li&gt;Ws.ServiceModel&lt;/li&gt;
&lt;li&gt;Ws.Services&lt;/li&gt;
&lt;li&gt;Ws.Services.Faults&lt;/li&gt;
&lt;li&gt;Ws.Services.Mtom&lt;/li&gt;
&lt;li&gt;Ws.Services.Serialization&lt;/li&gt;
&lt;li&gt;Ws.Services.Soap&lt;/li&gt;
&lt;li&gt;Ws.Services.Transport&lt;/li&gt;
&lt;li&gt;Ws.Services.Transport.HTTP&lt;/li&gt;
&lt;li&gt;Ws.Services.Transport.UDP&lt;/li&gt;
&lt;li&gt;Ws.Services.Utilities&lt;/li&gt;
&lt;li&gt;Ws.Services.WsaAddressing&lt;/li&gt;
&lt;li&gt;Ws.Services.Xml&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Per gestire le questioni legate alla sicurezza il .NET Micro Framework fornisce l&amp;#39;implementazione del protocollo di cifratura simmetrica &lt;strong&gt;&lt;em&gt;XTEA&lt;/em&gt;&lt;/strong&gt; (&lt;em&gt;Extended Tiny Encryption Algorithm&lt;/em&gt;) e l&amp;#39;implementazione del famoso protocollo a chiave pubblica e privata &lt;strong&gt;&lt;em&gt;RSA&lt;/em&gt;&lt;/strong&gt; tramite le classi &lt;strong&gt;Microsoft.SPOT.Cryptography.Key_TinyEncryptionAlgorithm&lt;/strong&gt; e &lt;strong&gt;Microsoft.SPOT.Key_RSA&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Tramite la classe &lt;strong&gt;Microsoft.SPOT.ExecutionContraint&lt;/strong&gt; &amp;egrave; possibile monitorare se una certa operazione viene eseguita all&amp;#39;interno di una prefissata quantit&amp;agrave; di tempo al termine della quale viene sollevata una eccezione.&lt;/p&gt;
&lt;p&gt;Estremamente importante &amp;egrave; la capacit&amp;agrave; offerta dal .NET Micro Framework per la serializzazione binaria degli oggetti, utile per trasferire informazioni con il mondo esterno o persisterle su dispositivi di memoria non volatile. Tramite la classe &lt;strong&gt;Microsoft.SPOT.Reflection&lt;/strong&gt; &amp;egrave; possibile effettuare le operazioni di serializzazione e deserializzazione. Utilizzando opportuni attributi inoltre &amp;egrave; possibile alterare il comportamento dell&amp;#39;algoritmo di serializzazione in modo da ridurre al massimo lo spazio occupato dallo stream binario generato. Un valido supporto alla memorizzazione di dati in modo permanente sulla memoria flash e il loro recupero dopo il riavvio del dispositivo &amp;egrave; offerto da quelli che sono chiamati &lt;strong&gt;ExtendedWeakReference&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Per quanto riguarda l&amp;#39;interazione con il display e quindi la realizzazione dell&amp;#39;interfaccia grafica della propria applicazione &amp;egrave; possibile utilizzare la classe &lt;strong&gt;Microsoft.SPOT.Bitmap&lt;/strong&gt; per disegnare figure geometriche, immagini e testo in differenti colori. Per realizzare qualcosa di pi&amp;ugrave; sofisticato &amp;egrave; possibile utilizzare le classi presenti all&amp;#39;interno del namespace &lt;strong&gt;Microsoft.SPOT.Presentation&lt;/strong&gt; che rappresentano un piccolissimo sottoinsieme delle funzionalit&amp;agrave; offerte da WPF. Non &amp;egrave; disponibile il linguaggio &lt;a href="http://it.wikipedia.org/wiki/XAML"&gt;&lt;em&gt;XAML&lt;/em&gt;&lt;/a&gt; (&lt;em&gt;eXtensible Application Markup Language&lt;/em&gt;) e gli unici pannelli utilizzabili sono &lt;strong&gt;Canvas&lt;/strong&gt; e &lt;strong&gt;StackPanel&lt;/strong&gt;. I controlli a disposizione sono &lt;strong&gt;Border&lt;/strong&gt;, &lt;strong&gt;ListBox&lt;/strong&gt;, &lt;strong&gt;ListBoxItem&lt;/strong&gt;, &lt;strong&gt;ScrollViewer&lt;/strong&gt;, &lt;strong&gt;Window&lt;/strong&gt;, &lt;strong&gt;Image&lt;/strong&gt;, &lt;strong&gt;Text&lt;/strong&gt; e &lt;strong&gt;TextFlow&lt;/strong&gt;. Infine sono presenti le classiche figure geometriche rappresentate dalle classi &lt;strong&gt;Ellipse&lt;/strong&gt;, &lt;strong&gt;Line&lt;/strong&gt;, &lt;strong&gt;Polygon&lt;/strong&gt; e &lt;strong&gt;Rectangle&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;A partire dalla versione 3.0 del framework inoltre &amp;egrave; presente il namespace &lt;strong&gt;Microsft.SPOT.Touch&lt;/strong&gt; che fornisce i tipi necessari alla gestione di uno schermo sensibile al tocco.&lt;/p&gt;
&lt;p&gt;E&amp;#39; molto importante sottolineare la &lt;strong&gt;possibilit&amp;agrave; di gestire in modo strongly-typed le risorse&lt;/strong&gt; (grazie a Visual Studio che genera la classe &lt;strong&gt;Resources&lt;/strong&gt;) e la possibilit&amp;agrave; di gestire la globalizzazione e la localizzazione della propria applicazione in modo da realizzare prodotti per il mercato mondiale. A questo scopo si devono realizzare opportuni assembly satelliti e utilizzare la classe &lt;strong&gt;System.Globalization.CultureInfo&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a&gt;Per concludere &amp;egrave; fondamentale ricordare che la maggior parte delle classi fornite con il .NET Micro Framework possono essere estese per ottenere funzionalit&amp;agrave; che altrimenti non sarebbero disponibili.&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;6.&amp;nbsp;&amp;nbsp;&amp;nbsp; Come iniziare a sviluppare con il .NET Micro Framework&lt;/h2&gt;
&lt;p&gt;Per sviluppare applicazioni con il .NET Micro Framework versione 2 o 2.5:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Installare Microsoft Visual Studio 2005 con SP1&lt;/li&gt;
&lt;li&gt;Installare l&amp;#39; &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=32f5df20-6c95-4fe8-a76c-0ed56a839ad2&amp;amp;displaylang=en"&gt;SDK del .NET Micro Framework 2.0 SP1&lt;/a&gt; o l&amp;#39; &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=EB0EF2A6-03E2-402C-89A4-A636BD0080C5&amp;amp;displaylang=en"&gt;SDK del .NET Micro Framework 2.5&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Creare un nuovo progetto e sviluppare l&amp;#39;applicazione sull&amp;#39;emulatore di base&lt;/li&gt;
&lt;li&gt;Eventualmente realizzare un emulatore personalizzato&lt;/li&gt;
&lt;li&gt;Acquistare un &lt;a href="http://www.microsoft.com/netmf/hardware/default.mspx"&gt;kit di sviluppo&lt;/a&gt; per effettuare il test finale sul dispositivo reale&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Per sviluppare applicazioni con il .NET Micro Framework versione 3.0:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Installare Microsoft Visual Studio 2008 con SP1 o &lt;a href="http://www.microsoft.com/express/vcsharp/"&gt;Visual C# 2008 Express Edition&lt;/a&gt; con SP1&lt;/li&gt;
&lt;li&gt;Installare l&amp;#39; &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=9356ED6F-F1F0-43EF-B21A-4644DD089B4A&amp;amp;displaylang=en"&gt;SDK del .NET Micro Framework 3.0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Creare un nuovo progetto e sviluppare l&amp;#39;applicazione sull&amp;#39;emulatore di base&lt;/li&gt;
&lt;li&gt;Eventualmente realizzare un emulatore personalizzato&lt;/li&gt;
&lt;li&gt;Acquistare un &lt;a href="http://www.microsoft.com/netmf/hardware/default.mspx"&gt;kit di sviluppo&lt;/a&gt; per effettuare il test finale sul dispositivo reale&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;E&amp;#39; importante evidenziare che &lt;strong&gt;l&amp;#39;intero SDK del .NET Micro Framework &amp;egrave; rilasciato gratuitamente da Microsoft&lt;/strong&gt; quindi utilizzando la versione Express di Visual C# 2008 &amp;egrave; possibile realizzare qualsiasi applicazione senza alcun costo. L&amp;#39;unica spesa inevitabile rimane l&amp;#39;acquisto di una scheda di valutazione (&lt;strong&gt;evaluation board&lt;/strong&gt;) tramite la quale &amp;egrave; possibile eseguire e testare la propria applicazione direttamente sull&amp;#39;hardware.&lt;/p&gt;
&lt;p&gt;Esistono diversi kit di sviluppo ciascuno dei quali fornisce una evaluation board che supporta in modo pi&amp;ugrave; o meno completo una o pi&amp;ugrave; versioni del .NET Micro Framework. Per maggiori informazioni consultare nel &lt;a href="http://www.microsoft.com/netmf/default.mspx"&gt;sito ufficiale del .NET Micro Framework&lt;/a&gt; la pagina &amp;quot;&lt;a href="http://www.microsoft.com/netmf/hardware/default.mspx"&gt;Get Hardware&lt;/a&gt;&amp;quot; che viene costantemente aggiornata in base alle nuove piattaforme su cui viene fatto il porting.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;7.&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/strong&gt;&lt;strong&gt;Risorse utili per ottenere maggiori informazioni&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Ecco alcune risorse per ottenere informazioni in generale sullo sviluppo di sistemi embedded con tecnologia Microsoft:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/it-it/library/cc185079.aspx"&gt;Articolo &amp;quot;10 anni di Windows Embedded&amp;quot;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://msdn2.microsoft.com/embedded"&gt;Windows Embedded Developer Center&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Per ottenere maggiori informazioni sul .NET Micro Framework e il suo utilizzo consultare le seguenti pagine:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://msevents.microsoft.com/cui/WebCastEventDetails.aspx?culture=en-US&amp;amp;EventID=1032314669&amp;amp;CountryCode=US"&gt;Webcast MSDN: An Introduction to the .NET Micro Framework&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Articolo di &lt;a href="https://mvp.support.microsoft.com/profile=1A0D4B3B-DD09-4EAF-8535-13298702C524"&gt;Raffaele Rialdi&lt;/a&gt; : &lt;a href="http://msdn.microsoft.com/it-it/library/cc185077.aspx"&gt;&amp;quot;Introduzione al Micro Framework.NET&amp;quot;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Articolo di &lt;a href="https://mvp.support.microsoft.com/profile=1A0D4B3B-DD09-4EAF-8535-13298702C524"&gt;Raffaele Rialdi&lt;/a&gt; : &lt;a href="http://msdn.microsoft.com/it-it/library/cc185076.aspx"&gt;&amp;quot;Realizzare una applicazione con Micro Framework.NET&amp;quot;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Articolo di &lt;a href="http://blogs.msdn.com/darioait/"&gt;Dario Airoldi&lt;/a&gt;: &lt;a href="http://blogs.msdn.com/darioait/archive/2007/04/28/introduzione-a-micro-framework.aspx"&gt;&amp;quot;Introduzione a Micro Framework - La vision di Micro Framework&amp;quot;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.microsoft.com/netmf/default.mspx"&gt;Sito ufficiale .NET Micro Framework&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/embedded/netmf"&gt;.NET Micro Framework Developer Center&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="http://blogs.msdn.com/netmfteam/"&gt;.NET Micro Framework Team Blog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.microsoft.com/communities/newsgroups/list/en-us/default.aspx?dg=microsoft.public.dotnet.framework.microframework"&gt;.NET Micro Framework Newsgroup&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I libri sul .NET Micro Framework attualmente disponibili all&amp;#39;acquisto sono:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.amazon.com/Embedded-Programming-Microsoft-Micro-Framework/dp/0735623651/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1229889838&amp;amp;sr=1-1"&gt;Embedded Programming with the Microsoft .NET Micro Framework&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.amazon.com/Expert-NET-Micro-Framework-K%C3%BChner/dp/159059973X/ref=sr_1_2?ie=UTF8&amp;amp;s=books&amp;amp;qid=1229889838&amp;amp;sr=1-2"&gt;Expert .NET Microframework&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description></item><item><title>Configurare un perfetto ambiente di sviluppo per Visual Studio 2008</title><link>http://dotnettoscana.org/wikis/articles/configurare-un-perfetto-ambiente-di-sviluppo-per-visual-studio-2008/revision/0.aspx</link><pubDate>Fri, 28 Nov 2008 09:02:03 GMT</pubDate><guid isPermaLink="false">ada252f7-7fca-4bac-88b6-ec47648018b0:4</guid><dc:creator>Marco Minerva</dc:creator><description>&lt;p&gt;&lt;em&gt;Livello: Base &amp;ndash; Autore: [[articles:mailto:marco.minerva@dotnettoscana.org|Marco Minerva]]&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;/em&gt;Preparare una postazione di lavoro con tutti gli strumenti necessari per sviluppare applicazioni .NET (quindi con Visual Studio, SQL Server, Silverlight, AJAX, ecc.), pu&amp;ograve; non essere un&amp;rsquo;operazione banale. Spesso, infatti, &amp;egrave; necessario rispettare un ben preciso ordine di installazione dei componenti, altrimenti si rischia di avere un ambiente non perfettamente funzionante.&lt;/p&gt;
&lt;p&gt;In questo articolo illustreremo i passaggi da seguire per configurare il proprio sistema in modo che con esso sia possibile realizzare applicazioni .NET utilizzando Visual Studio 2008 e tutte le tecnologie collegate. In particolare, seguiremo due strade, una dedicata a chi lavora con strumenti commerciali e l&amp;rsquo;altra che si rivolge&amp;nbsp; a chi, invece, vuole utilizzare esclusivamente tool gratuiti.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Preparazione della postazione di lavoro con applicazioni commerciali&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;In questo caso gli strumenti da installare sono Visual Studio 2008, SQL Server 2008, AJAX Control Toolkit, Silverlight ed Expression Blend. Sono supportati i sistemi operativi Windows XP con Service Pack 2 o successivo, Windows Vista, Windows Server 2003 e Windows Server 2008. Il corretto ordine di setup dei componenti &amp;egrave; il seguente:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;em&gt;Visual Studio 2008&lt;/em&gt; (versioni Standard, Professional o Team Suite). Insieme al programma vero e proprio viene installato anche il .NET Framework 3.5, cos&amp;igrave; come le versioni precedenti del Framework, se non sono gi&amp;agrave; presenti sul PC. La procedura di setup propone di installare anche SQL Server 2005 Express, poich&amp;eacute; la versione 2008 non era ancora disponibile al momento del rilascio di Visual Studio.&amp;nbsp; Se si vuole utilizzare SQL Server, si consiglia di disabilitare questo componente ed installare manualmente l&amp;rsquo;ultima versione (eventualmente nella release Express, come indicato nella sezione &amp;quot;Preparazione della postazione di lavoro con applicazioni gratuite&amp;quot; pi&amp;ugrave; avanti in questo articolo).&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Service Pack 1 per Visual Studio 2008&lt;/em&gt;. Sul sito Microsoft &amp;egrave; possibile scaricare il Web installer (per le versioni &lt;a target="_blank" href="http://www.microsoft.com/downloads/details.aspx?familyid=FBEE1648-7106-44A7-9649-6D9F6D58056E&amp;amp;displaylang=en"&gt;inglese&lt;/a&gt;&amp;nbsp;e &lt;a target="_blank" href="http://www.microsoft.com/downloads/details.aspx?displaylang=it&amp;amp;FamilyID=fbee1648-7106-44a7-9649-6d9f6d58056e"&gt;italiana&lt;/a&gt;) oppure il file ISO completo (anche in questo caso in &lt;a target="_blank" href="http://www.microsoft.com/downloads/details.aspx?FamilyID=27673c47-b3b5-4c67-bd99-84e525b5ce61&amp;amp;displaylang=en"&gt;inglese&lt;/a&gt;&amp;nbsp;e &lt;a target="_blank" href="http://www.microsoft.com/downloads/details.aspx?displaylang=it&amp;amp;FamilyID=27673c47-b3b5-4c67-bd99-84e525b5ce61"&gt;italiano&lt;/a&gt;). Il primo &amp;egrave; un piccolo programma che effettua il download dell&amp;#39;aggiornamento vero e proprio solo durante l&amp;rsquo;installazione. Se possibile, si consiglia di scaricare l&amp;rsquo;immagine ISO completa, anche nell&amp;#39;ottica di dover applicare il Service Pack su pi&amp;ugrave; sistemi. Questo aggiornamento, inoltre, deve essere nella stessa lingua di Visual Studio. Esso installa nel sistema anche il Service Pack 1 per .NET 3.5 e il Service Pack 2 per .NET 2.0 e .NET 3.0. &lt;strong&gt;NOTA&lt;/strong&gt;: Per installare il Service Pack 1 di Visual Studio 2008, &amp;egrave; necessario rimuovere tutti i precedenti update eventualmente gi&amp;agrave; presenti&amp;nbsp; nel sistema. Microsoft mette a disposizione un apposito &lt;a target="_blank" href="http://www.microsoft.com/downloads/details.aspx?FamilyId=A494B0E0-EB07-4FF1-A21C-A4663E456D9D&amp;amp;displaylang=en"&gt;programma &lt;/a&gt;per automatizzare l&amp;#39;intera procedura.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;SQL Server 2008&lt;/em&gt;. Sui sistemi Windows XP e Vista &amp;egrave; possibile installare le versioni Standard, Workgroup, Web e Developer, mentre l&amp;rsquo;Enterprise Edition &amp;egrave; riservata per i sistemi operativi server.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Silverlight Tools per Visual Studio 2008 SP1&lt;/em&gt; (versione &lt;a target="_blank" href="http://www.microsoft.com/downloads/details.aspx?FamilyId=c22d6a7b-546f-4407-8ef6-d60c8ee221ed&amp;amp;displaylang=en"&gt;inglese&lt;/a&gt; e &lt;a target="_blank" href="http://www.microsoft.com/downloads/details.aspx?displaylang=it&amp;amp;FamilyID=c22d6a7b-546f-4407-8ef6-d60c8ee221ed"&gt;italiana&lt;/a&gt;). Questo pacchetto contiene il runtime, l&amp;#39;SDK e i template che consentono di creare applicazioni Silverlight in Visual Studio 2008. I Silverlight Tools devono essere nella stessa lingua di Visual Studio.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;AJAX Control Toolkit&lt;/em&gt;. Visual Studio 2008 supporta nativamente lo sviluppo di siti web&amp;nbsp; che fanno uso di AJAX, ma fornisce solo una serie di strumenti di base per l&amp;#39;utilizzo di questo paradigma. Per esigenze pi&amp;ugrave; avanzate, &amp;egrave; possibile ricorrere all&amp;#39;&lt;a target="_blank" href="http://www.codeplex.com/AjaxControlToolkit"&gt;AJAX Control Toolkit&lt;/a&gt;, una raccolta di controlli web basati su AJAX gi&amp;agrave; pronti all&amp;#39;uso (ad esempio, TextBox con completamento automatico, controlli che simulano il TabStrip delle Windows Forms, calendari, finestre modali).&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Expression Blend 2&lt;/em&gt;.&amp;nbsp; Con tale strumento &amp;egrave; possibile creare interfacce utente e animazioni nel formato XAML utilizzato da WPF e da Silverlight versione 1.0.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Service Pack 1 per Expression Blend 2&lt;/em&gt;. Questo aggiornamento (versione &lt;a target="_blank" href="http://www.microsoft.com/downloads/details.aspx?FamilyId=EB9B5C48-BA2B-4C39-A1C3-135C60BBBE66&amp;amp;displaylang=en"&gt;inglese&lt;/a&gt; e &lt;a target="_blank" href="http://www.microsoft.com/downloads/details.aspx?displaylang=it&amp;amp;FamilyID=eb9b5c48-ba2b-4c39-a1c3-135c60bbbe66"&gt;italiana&lt;/a&gt;) aggiunge ad Expression Blend la possibilit&amp;agrave; di realizzare contenuti compatibili con Silverlight 2.0. Deve essere nella stessa lingua di Expression Blend 2.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Preparazione della postazione di lavoro con applicazioni gratuite&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Microsoft fornisce una versione &amp;quot;light&amp;quot; di gran parte dei suoi strumenti per sviluppatori, cos&amp;igrave; da consentire a chiunque di sperimentare le potenzialit&amp;agrave; offerte da questi applicativi, senza spendere niente.&amp;nbsp; I tool&amp;nbsp; in questione sono Visual Studio 2008 Express, SQL Server 2008 Express, AJAX Control Toolkit e Silverlight (purtroppo al momento Microsoft non offre un&amp;rsquo;alternativa gratuita ad Expression Blend.). Anche in questo caso sono supportati i sistemi operativi Windows XP con Service Pack 2 o successivo, Windows Vista, Windows Server 2003 e Windows Server 2008. Il corretto ordine di setup dei componenti &amp;egrave; il seguente:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;em&gt;Visual Studio 2008 Express Edition con Service Pack 1&lt;/em&gt;. La pagina per il &lt;a target="_blank" href="http://www.microsoft.com/express/download/"&gt;download&lt;/a&gt; permette di scaricare i singoli componenti (Visual Basic Express, Visual C# Express, Visual Web Developer Express, Visual C++ Express) oppure un pacchetto che li comprende tutti. Questa versione non include la guida in linea, che &amp;egrave; comunque disponibile come download separato nella stessa pagina. Insieme al programma vero e proprio viene installato anche il .NET Framework 3.5, cos&amp;igrave; come le versioni precedenti del Framework, se non sono gi&amp;agrave; presenti sul PC.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;SQL Server 2008 Express Edition&lt;/em&gt;. Di tale programma esistono tre versioni, tutte gratuite, che differiscono per il numero di funzionalit&amp;agrave; offerte. Sul sito del prodotto, oltre ai link per il &lt;a target="_blank" href="http://www.microsoft.com/express/sql/download/"&gt;download&lt;/a&gt;, &amp;egrave; possibile trovare una descrizione delle loro caratteristiche, quindi si rimanda ad esso per maggiori dettagli.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Silverlight Tools per Visual Studio 2008 SP1&lt;/em&gt; (versione &lt;a target="_blank" href="http://www.microsoft.com/downloads/details.aspx?FamilyId=c22d6a7b-546f-4407-8ef6-d60c8ee221ed&amp;amp;displaylang=en"&gt;inglese&lt;/a&gt; e &lt;a target="_blank" href="http://www.microsoft.com/downloads/details.aspx?displaylang=it&amp;amp;FamilyID=c22d6a7b-546f-4407-8ef6-d60c8ee221ed"&gt;italiana&lt;/a&gt;). Questo pacchetto contiene il runtime, l&amp;#39;SDK e i template che consentono di creare applicazioni Silverlight in Visual Studio. I Silverlight Tools devono essere nella stessa lingua di Visual Web Developer Express.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;AJAX Control Toolkit&lt;/em&gt;. Visual Studio 2008 supporta nativamente lo sviluppo di siti web&amp;nbsp; che fanno uso di AJAX, ma fornisce solo una serie di strumenti di base per l&amp;#39;utilizzo di questo paradigma. Per esigenze pi&amp;ugrave; avanzate, &amp;egrave; possibile ricorrere all&amp;#39;&lt;a target="_blank" href="http://www.codeplex.com/AjaxControlToolkit"&gt;AJAX Control Toolkit&lt;/a&gt;, una raccolta di controlli web basati su AJAX gi&amp;agrave; pronti all&amp;rsquo;uso (ad esempio, TextBox con completamento automatico, controlli che simulano il TabStrip delle Windows Forms, calendari, finestre modali).&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Concludiamo ricordando che, anche se non viene richiesto in maniera esplicita, &amp;egrave; buona norma riavviare il sistema dopo l&amp;#39;installazione di ogni componente.&lt;/p&gt;</description></item><item><title>Configurare un perfetto ambiente di sviluppo per Visual Studio 2008</title><link>http://dotnettoscana.org/wikis/articles/configurare-un-perfetto-ambiente-di-sviluppo-per-visual-studio-2008/revision/1.aspx</link><pubDate>Thu, 06 Nov 2008 15:13:11 GMT</pubDate><guid isPermaLink="false">ada252f7-7fca-4bac-88b6-ec47648018b0:3</guid><dc:creator>Marco Minerva</dc:creator><description>&lt;p&gt;&lt;em&gt;Livello: Base &amp;ndash; Autore: [[articles:mailto:marco.minerva@dotnettoscana.org|Marco Minerva]]&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;/em&gt;Preparare una postazione di lavoro con tutti gli strumenti necessari per sviluppare applicazioni .NET (quindi con Visual Studio, SQL Server, Silverlight, AJAX, ecc.), pu&amp;ograve; non essere un&amp;rsquo;operazione banale. Spesso, infatti, &amp;egrave; necessario rispettare un ben preciso ordine di installazione dei componenti, altrimenti si rischia di avere un ambiente non perfettamente funzionante.&lt;/p&gt;
&lt;p&gt;In questo articolo illustreremo i passaggi da seguire per configurare il proprio sistema in modo che con esso sia possibile realizzare applicazioni .NET utilizzando Visual Studio 2008 e tutte le tecnologie collegate. In particolare, seguiremo due strade, una dedicata a chi lavora con strumenti commerciali e l&amp;rsquo;altra che si rivolge&amp;nbsp; a chi, invece, vuole utilizzare esclusivamente tool gratuiti.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Preparazione della postazione di lavoro con applicazioni commerciali&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;In questo caso gli strumenti da installare sono Visual Studio 2008, SQL Server 2008, AJAX Control Toolkit, Silverlight ed Expression Blend. Sono supportati i sistemi operativi Windows XP con Service Pack 2 o successivo, Windows Vista, Windows Server 2003 e Windows Server 2008. Il corretto ordine di setup dei componenti &amp;egrave; il seguente:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;em&gt;Visual Studio 2008&lt;/em&gt; (versioni Standard, Professional o Team Suite). Insieme al programma vero e proprio viene installato anche il .NET Framework 3.5, cos&amp;igrave; come le versioni precedenti del Framework, se non sono gi&amp;agrave; presenti sul PC. La procedura di setup propone di installare anche SQL Server 2005 Express, poich&amp;eacute; la versione 2008 non era ancora disponibile al momento del rilascio di Visual Studio.&amp;nbsp; Se si vuole utilizzare SQL Server, si consiglia di disabilitare questo componente ed installare manualmente l&amp;rsquo;ultima versione (eventualmente nella release Express, come indicato nella sezione &amp;quot;Preparazione della postazione di lavoro con applicazioni gratuite&amp;quot; pi&amp;ugrave; avanti in questo articolo).&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Service Pack 1 per Visual Studio 2008&lt;/em&gt;. Sul sito Microsoft &amp;egrave; possibile scaricare il Web installer (per le versioni &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=FBEE1648-7106-44A7-9649-6D9F6D58056E&amp;amp;displaylang=en"&gt;inglese&lt;/a&gt;&amp;nbsp;e &lt;a href="http://www.microsoft.com/downloads/details.aspx?displaylang=it&amp;amp;FamilyID=fbee1648-7106-44a7-9649-6d9f6d58056e"&gt;italiana&lt;/a&gt;) oppure il file ISO completo (anche in questo caso in &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=27673c47-b3b5-4c67-bd99-84e525b5ce61&amp;amp;displaylang=en"&gt;inglese&lt;/a&gt;&amp;nbsp;e &lt;a href="http://www.microsoft.com/downloads/details.aspx?displaylang=it&amp;amp;FamilyID=27673c47-b3b5-4c67-bd99-84e525b5ce61"&gt;italiano&lt;/a&gt;). Il primo &amp;egrave; un piccolo programma che effettua il download dell&amp;#39;aggiornamento vero e proprio solo durante l&amp;rsquo;installazione. Se possibile, si consiglia di scaricare l&amp;rsquo;immagine ISO completa, anche nell&amp;#39;ottica di dover applicare il Service Pack su pi&amp;ugrave; sistemi. Questo aggiornamento, inoltre, deve essere nella stessa lingua di Visual Studio. Esso installa nel sistema anche il Service Pack 1 per .NET 3.5 e il Service Pack 2 per .NET 2.0 e .NET 3.0. &lt;strong&gt;NOTA&lt;/strong&gt;: Per installare il Service Pack 1 di Visual Studio 2008, &amp;egrave; necessario rimuovere tutti i precedenti update eventualmente gi&amp;agrave; presenti&amp;nbsp; nel sistema. Microsoft mette a disposizione un apposito &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=A494B0E0-EB07-4FF1-A21C-A4663E456D9D&amp;amp;displaylang=en"&gt;programma &lt;/a&gt;per automatizzare l&amp;#39;intera procedura.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;SQL Server 2008&lt;/em&gt;. Sui sistemi Windows XP e Vista &amp;egrave; possibile installare le versioni Standard, Workgroup, Web e Developer, mentre l&amp;rsquo;Enterprise Edition &amp;egrave; riservata per i sistemi operativi server.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Silverlight Tools per Visual Studio 2008 SP1&lt;/em&gt; (versione &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=c22d6a7b-546f-4407-8ef6-d60c8ee221ed&amp;amp;displaylang=en"&gt;inglese&lt;/a&gt; e &lt;a href="http://www.microsoft.com/downloads/details.aspx?displaylang=it&amp;amp;FamilyID=c22d6a7b-546f-4407-8ef6-d60c8ee221ed"&gt;italiana&lt;/a&gt;). Questo pacchetto contiene il runtime, l&amp;#39;SDK e i template che consentono di creare applicazioni Silverlight in Visual Studio 2008. I Silverlight Tools devono essere nella stessa lingua di Visual Studio. Attualmente, il pacchetto&amp;nbsp; in italiano sopra indicato non &amp;egrave; nella versione definitiva, che dovrebbe essere rilasciata tra breve. Appena possibile, questo documento sar&amp;agrave; aggiornato con il nuovo link.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;AJAX Control Toolkit&lt;/em&gt;. Visual Studio 2008 supporta nativamente lo sviluppo di siti web&amp;nbsp; che fanno uso di AJAX, ma fornisce solo una serie di strumenti di base per l&amp;#39;utilizzo di questo paradigma. Per esigenze pi&amp;ugrave; avanzate, &amp;egrave; possibile ricorrere all&amp;#39;&lt;a href="http://www.codeplex.com/AjaxControlToolkit"&gt;AJAX Control Toolkit&lt;/a&gt;, una raccolta di controlli web basati su AJAX gi&amp;agrave; pronti all&amp;#39;uso (ad esempio, TextBox con completamento automatico, controlli che simulano il TabStrip delle Windows Forms, calendari, finestre modali).&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Expression Blend 2&lt;/em&gt;.&amp;nbsp; Con tale strumento &amp;egrave; possibile creare interfacce utente e animazioni nel formato XAML utilizzato da WPF e da Silverlight versione 1.0.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Service Pack 1 per Expression Blend 2&lt;/em&gt;. Questo aggiornamento (versione &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=EB9B5C48-BA2B-4C39-A1C3-135C60BBBE66&amp;amp;displaylang=en"&gt;inglese&lt;/a&gt; e &lt;a href="http://www.microsoft.com/downloads/details.aspx?displaylang=it&amp;amp;FamilyID=eb9b5c48-ba2b-4c39-a1c3-135c60bbbe66"&gt;italiana&lt;/a&gt;) aggiunge ad Expression Blend la possibilit&amp;agrave; di realizzare contenuti compatibili con Silverlight 2.0. Deve essere nella stessa lingua di Expression Blend 2.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Preparazione della postazione di lavoro con applicazioni gratuite&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Microsoft fornisce una versione &amp;quot;light&amp;quot; di gran parte dei suoi strumenti per sviluppatori, cos&amp;igrave; da consentire a chiunque di sperimentare le potenzialit&amp;agrave; offerte da questi applicativi, senza spendere niente.&amp;nbsp; I tool&amp;nbsp; in questione sono Visual Studio 2008 Express, SQL Server 2008 Express, AJAX Control Toolkit e Silverlight (purtroppo al momento Microsoft non offre un&amp;rsquo;alternativa gratuita ad Expression Blend.). Anche in questo caso sono supportati i sistemi operativi Windows XP con Service Pack 2 o successivo, Windows Vista, Windows Server 2003 e Windows Server 2008. Il corretto ordine di setup dei componenti &amp;egrave; il seguente:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;em&gt;Visual Studio 2008 Express Edition con Service Pack 1&lt;/em&gt;. La pagina per il &lt;a href="http://www.microsoft.com/express/download/"&gt;download&lt;/a&gt; permette di scaricare i singoli componenti (Visual Basic Express, Visual C# Express, Visual Web Developer Express, Visual C++ Express) oppure un pacchetto che li comprende tutti. Questa versione non include la guida in linea, che &amp;egrave; comunque disponibile come download separato nella stessa pagina. Insieme al programma vero e proprio viene installato anche il .NET Framework 3.5, cos&amp;igrave; come le versioni precedenti del Framework, se non sono gi&amp;agrave; presenti sul PC.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;SQL Server 2008 Express Edition&lt;/em&gt;. Di tale programma esistono tre versioni, tutte gratuite, che differiscono per il numero di funzionalit&amp;agrave; offerte. Sul sito del prodotto, oltre ai link per il &lt;a href="http://www.microsoft.com/express/sql/download/"&gt;download&lt;/a&gt;, &amp;egrave; possibile trovare una descrizione delle loro caratteristiche, quindi si rimanda ad esso per maggiori dettagli.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Silverlight Tools per Visual Studio 2008 SP1&lt;/em&gt; (versione &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=c22d6a7b-546f-4407-8ef6-d60c8ee221ed&amp;amp;displaylang=en"&gt;inglese&lt;/a&gt; e &lt;a href="http://www.microsoft.com/downloads/details.aspx?displaylang=it&amp;amp;FamilyID=c22d6a7b-546f-4407-8ef6-d60c8ee221ed"&gt;italiana&lt;/a&gt;). Questo pacchetto contiene il runtime, l&amp;#39;SDK e i template che consentono di creare applicazioni Silverlight in Visual Studio. I Silverlight Tools devono essere nella stessa lingua di Visual Web Developer Express. Attualmente, il pacchetto&amp;nbsp; in italiano sopra indicato non &amp;egrave; nella versione definitiva, che dovrebbe essere rilasciata tra breve. Appena possibile, questo documento sar&amp;agrave; aggiornato con il nuovo link.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;AJAX Control Toolkit&lt;/em&gt;. Visual Studio 2008 supporta nativamente lo sviluppo di siti web&amp;nbsp; che fanno uso di AJAX, ma fornisce solo una serie di strumenti di base per l&amp;#39;utilizzo di questo paradigma. Per esigenze pi&amp;ugrave; avanzate, &amp;egrave; possibile ricorrere all&amp;#39;&lt;a href="http://www.codeplex.com/AjaxControlToolkit"&gt;AJAX Control Toolkit&lt;/a&gt;, una raccolta di controlli web basati su AJAX gi&amp;agrave; pronti all&amp;rsquo;uso (ad esempio, TextBox con completamento automatico, controlli che simulano il TabStrip delle Windows Forms, calendari, finestre modali).&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Concludiamo ricordando che, anche se non viene richiesto in maniera esplicita, &amp;egrave; buona norma riavviare il sistema dopo l&amp;#39;installazione di ogni componente.&lt;/p&gt;</description></item><item><title>Benvenuti</title><link>http://dotnettoscana.org/wikis/articles/benvenuti/revision/0.aspx</link><pubDate>Thu, 06 Nov 2008 00:52:56 GMT</pubDate><guid isPermaLink="false">ada252f7-7fca-4bac-88b6-ec47648018b0:3</guid><dc:creator>Marco Minerva</dc:creator><description>&lt;p&gt;Benvenuti nella sezione &lt;b&gt;Articoli&lt;/b&gt; della Community &lt;b&gt;DotNetToscana&lt;/b&gt;, un Wiki in cui potrete trovare articoli tecnici e di approfondimento sulle pi&amp;ugrave; svariate problematiche che ruotano intorno al mondo .NET. Ma perch&amp;eacute; un Wiki? Il motivo &amp;egrave; semplice, rendere pi&amp;ugrave; &lt;b&gt;dinamico &lt;/b&gt;il contenuto degli articoli, quindi dell&amp;#39;intera Community!&lt;/p&gt;
&lt;p&gt;Il bisogno di questo dinamismo &amp;egrave; dovuto principalmente a due aspetti:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;la possibilit&amp;agrave; di &lt;b&gt;migliorare &lt;/b&gt;i &lt;b&gt;contenuti &lt;/b&gt;in base al &lt;b&gt;feedback &lt;/b&gt;degli utenti che partecipano alla Community;&lt;/li&gt;
&lt;li&gt;la possiblit&amp;agrave; di &lt;b&gt;aggiornare&lt;/b&gt; costantemente il materiale fornito per renderlo sempre attuale rispetto ai cambiamenti a cui assisistiamo tutti i giorni (rilasci di preview, beta, CTP, nuove risorse, ecc.).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Insomma, grazie al Wiki possiamo rendere &lt;b&gt;sempre validi&lt;/b&gt; i contenuti della nostra Community.&lt;/p&gt;
&lt;p&gt;Vuoi contribuire anche tu? Niente di pi&amp;ugrave; facile! Se sei un &lt;strong&gt;utente registrato&lt;/strong&gt; su DotNetToscana, scrivi il tuo articolo in formato Word (DOC o RTF)&amp;nbsp;e spediscilo a &lt;a href="mailto:staff@dotnettoscana.org"&gt;staff@dotnettoscana.org&lt;/a&gt;.&amp;nbsp;I&amp;nbsp;redattori si occuperanno di validare e pubblicare il tuo contributo nel pi&amp;ugrave; breve tempo possibile.&lt;/p&gt;</description></item><item><title>Benvenuti</title><link>http://dotnettoscana.org/wikis/articles/benvenuti/revision/1.aspx</link><pubDate>Wed, 05 Nov 2008 23:46:16 GMT</pubDate><guid isPermaLink="false">ada252f7-7fca-4bac-88b6-ec47648018b0:2</guid><dc:creator>Matteo Baglini</dc:creator><description>&lt;p&gt;Benvenuti nella sezione &lt;b&gt;Articoli&lt;/b&gt; della Community &lt;b&gt;DotNetToscana&lt;/b&gt;, un Wiki in cui potrete trovare articoli tecnici e di approfondimento sulle pi&amp;ugrave; svariate problematiche che ruotano intorno al mondo .NET. Ma perch&amp;eacute; un Wiki? Il motivo &amp;egrave; semplice, rendere pi&amp;ugrave; &lt;b&gt;dinamico &lt;/b&gt;il contenuto degli articoli, quindi dell&amp;#39;intera Community!&lt;/p&gt;
&lt;p&gt;Il bisogno di questo dinamismo &amp;egrave; dovuto principalmente a due aspetti:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;la possibilit&amp;agrave; di &lt;b&gt;migliorare &lt;/b&gt;i &lt;b&gt;contenuti &lt;/b&gt;in base al &lt;b&gt;feedback &lt;/b&gt;degli utenti che partecipano alla Community;&lt;/li&gt;
&lt;li&gt;la possiblit&amp;agrave; di &lt;b&gt;aggiornare&lt;/b&gt; costantemente il materiale fornito per renderlo sempre attuale rispetto ai cambiamenti a cui assisistiamo tutti i giorni (rilasci di preview, beta, CTP, nuove risorse, ecc.).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Insomma, grazie al Wiki possiamo rendere &lt;b&gt;sempre validi&lt;/b&gt; i contenuti della nostra Community.&lt;/p&gt;
&lt;p&gt;Vuoi contribuire? Niente di pi&amp;ugrave; facile! Qualsiasi &lt;b&gt;utente iscritto&lt;/b&gt; alla community pu&amp;ograve; contribuire! Scrivi il tuo articolo in formato Word (DOC o RTF)&amp;nbsp;e spediscilo a &lt;a href="mailto:staff@dotnettoscana.org"&gt;staff@dotnettoscana.org&lt;/a&gt;.&amp;nbsp;I&amp;nbsp;redattori si occuperanno di validare e pubblicare il tuo contributo alla Community.&lt;/p&gt;</description></item></channel></rss>