2009-08-25 13 views
7

Una società che consulto sta cercando, con urgenza, di passare ai dispositivi alimentati da .NET Micro Framework, in modo da poter portare i dispositivi sul mercato più velocemente. L'idea, almeno in teoria, è che la codifica in C# piuttosto che C o assembly sarà molto più veloce e meno incline agli errori. Come ho detto, questa è tutta teoria, dato che non ho mai programmato un dispositivo embedded.Esperienze di programmazione con .NET Micro Framework

Le mie domande sono le seguenti:

  1. È .NET Micro Framework all'altezza del compito?
  2. Quali sono alcune delle cose che .NET Micro Framework non può fare?
  3. Quali sono alcuni dei trucchi?
  4. Esiste un mercato di terze parti valido per i dispositivi plug-in? Non ho visto molto sul sito di Microsoft.
  5. Qualcuno può puntare a un dispositivo commerciale che è stato sviluppato con MF Framework.

Grazie.

+1

Perché sulla Terra consiglieresti di passare a una piattaforma con cui non hai esperienza? –

+1

@Binary Worrier. Perché la metodologia esistente impiega troppo tempo per arrivare a un mercato. E quindi, sto facendo la domanda qui prima di premere il grilletto. – AngryHacker

+2

Sono curioso di sapere perché stai consultando un'azienda che produce dispositivi embedded quando non hai mai programmato un dispositivo incorporato? Mi sento male per la pessima compagnia ... sembra che abbiano preso la brutta fine del bastone. – jrista

risposta

8

Senza conoscere la tua applicazione e la capacità corrente del dispositivo incorporato sarà difficile per me dare un parere definitivo se .NET MF è all'altezza del compito. Se il dispositivo incorporato è una CPU a 8 bit a bassa potenza con 2K di RAM e 32K di ROM, .NET MF non sarebbe adatto a tale progetto.

In un numero elevato di casi, il passaggio a .NET MF comporterebbe modifiche hardware a un chipset preferito da molti fornitori che in genere utilizzano core ARM7 o ARM9. Il motivo principale per questo è sfruttare il lavoro già svolto nel porting dell'HAL e cross-compilare il PAL & TinyCLR con il codice nativo per il processore in questione. Quindi, se l'applicazione si adatta al modello MF .NET, è necessario solo sviluppare codice gestito.

Un confronto di development boards potrebbe aiutare a selezionare una piattaforma per un nuovo design. Il vantaggio dello GHI products consiste nel fatto che è possibile acquistare i chipset nudi con il firmware che hanno sviluppato per integrarsi con la progettazione hardware.

Risposta alla domanda 1: .NET Framework è all'altezza dell'attività?

Spiacente, non posso rispondere a questa domanda senza ulteriori informazioni.

Risposta alla domanda 2: Quali sono alcune delle cose che .NET Micro Framework non può fare?

Il micro-quadro non è in tempo reale come molti dei prodotti concorrenti. Lo scheduler è abbastanza semplice e non ottimizzato per sistemi che richiedono tempi deterministici.
Il TinyCLR interpreta l'IL dal prossimo "thread" in attesa per un 20ms. I thread possono fornire la sezione temporale assegnata chiamando lo Thread.Sleep(0). SOLO tra ogni thread time slice il Runtime Interpreter controlla i flag dagli eventi hardware e di invio al codice gestito o risveglia i thread se sono bloccati in attesa dell'hardware. Per quanto ho capito, non c'è modo per un thread di essere sbloccato da routine di servizio di interrupt di codice nativo (ISR) o per un thread con priorità più alta che interrompe preventivamente un thread con priorità più bassa.

Risposta alla domanda 3: Quali sono alcuni dei trucchi?

Tutto sembra funzionare, avete capito il come il runtime interperter opere di loop (la schedulazione dei thread e reagire agli eventi hardware) e poi si dimentica di raccolta dei rifiuti !!
È consigliabile ridurre al minimo la quantità di thrashing della memoria (rivedere attentamente ogni volta che si esegue il new un oggetto). Invece di creare e distruggere oggetti di uso comune, considera la possibilità di tenere un pool di oggetti solitamente in GC e di riciclarli quando necessario.

Risposta alla domanda 4: Esiste un mercato di terze parti valido per i dispositivi plug-in?

Il coinvolgimento di terze parti è principalmente nelle schede di sviluppo e progetti di riferimento sul lato hardware delle cose. Da un punto di vista del software, questo code-share link potrebbe essere di interesse. Come una questione secondaria, non dimenticare che la maggior parte degli strumenti di sviluppo VS2008 lavorare anche su .NET MF (ad es ReSharper e VisualSVN)

Siamo spiacenti, non avere una risposta alla domanda 5 come io non seguo questo tipo di cose Lo landing page for .NET MF su Microsoft sembra avere immagini di dispositivi commerciali ma non ho mai seguito i collegamenti.

5

Il .Net Micro Framework è molto semplice da utilizzare rispetto a molte altre piattaforme incorporate con cui ho lavorato. Ma attualmente ha diversi svantaggi, come la mancanza di supporto in tempo reale. Inoltre alcuni kit SDK hanno problemi a causa della contesa hardware di tutti i dispositivi aggiuntivi che utilizzano gli stessi bus. Se hai bisogno di tonnellate di dispositivi che pendono dal controller, guarderei invece la piattaforma Windows CE. L'attuale selezione di hardware per Micro Framework è molto limitata.

Grande piattaforma e per piccoli progetti sarebbe fantastico. Ma quando si tenta di entrare in requisiti quasi in tempo reale si potrebbe iniziare a correre in dossi.

Come molto altro in questo settore dipende. Ma per il fatto che è possibile ottenere un kit di sviluppo per meno di $ 100 dollari potrebbe valere la pena di verificare.


ho usato il Tahoe-II da DeviceSolutions.Net con .Net Micro Framework 2.0/3.0 e C#. Il threading era molto semplice ma il framework è attualmente molto limitato. Ho dovuto creare il mio parser HTTP e creare rozzi webserves RESTful. Esiste un modello di servizio Web dispositivo ma volevo puro HTTP. Ho anche dovuto creare i miei livelli di protocollo SNTP e SMTP. Una nuova versione (4.0) dovrebbe essere rilasciata a breve e potrebbe riempire alcune di queste brevi cadute.

+0

Matthew, grazie per la risposta, in particolare per la mancanza di supporto in tempo reale. Su quale tipo di risoluzione in tempo reale posso contare? In altre parole, qual è il valore più piccolo, posso impostare l'intervallo del timer e farlo scattare in modo affidabile? – AngryHacker

+1

Non ricordo, ma penso che siano da 2 a 5 millisecondi. Puoi impostarlo più breve ma non dimenticare che utilizzerai un processore single core che dovrà cambiare thread per il tuo programma e CLR. È possibile ottenere tempi di risposta migliori creando un ciclo limitato e avendo Thread.Sleep (0) per consentire al sistema di mettere in pausa i thread per svolgere altre attività. Come con Windows, i timer sono in realtà solo delle linee guida per fornire un periodo di tempo minimo per il blocco. Puoi anche utilizzare i controller GPIO come interrupt invece di guardare gli eventi. –