Arduino / Elaborazione contro .NET Micro Framework? La miglior lingua? Il miglior hardware?


10

Sono un po 'in giro con Arduino da un po' di tempo e sto passando da principiante a intermedio. Vorrei alcune opinioni su .NET Micro Framework , in termini di prestazioni e disponibilità dell'hardware.

Sono un programmatore .NET, ma ho riscontrato che Elaborazione per Arduino è praticamente senza attrito ... È così vicino a C # che tutto ciò che voglio fare non richiede nemmeno un viaggio nella documentazione.

Comunque, qual è la migliore?


Vedi anche questa domanda (relativa a C ++): chiphacker.com/questions/3027/…
Kevin Vermeer,

Risposte:


17

Se vuoi passare da principiante a intermedio, la lingua che devi imparare è C. Anche se metti da parte l'intero dibattito sul blocco di Windows, devi essere molto bravo a programmare in C prima di poter fare un lavoro di qualità su un microcontrollore in un linguaggio di livello superiore come .NET Micro o C ++.

I sistemi incorporati sono composti da una piramide di conoscenza e devi davvero conoscere almeno alcuni di ogni passaggio per essere un buon progettista:
^ Codice utente
^^ Sistemi operativi
^^^ Il linguaggio C
^^^^ Linguaggio assembly
^^^ ^^ Architettura a microcontrollore
^^^^^^ Progettazione digitale
^^^^^^^ Semiconduttori
^^^^^^^^ Elettronica di base (legge di Ohm)

Il framework Arduino offre un comodo gancio per gli appassionati nella piramide da qualche parte tra il linguaggio C e un sistema operativo.

Specifico per la tua domanda su .NET Micro Framework, il About dice:

Il tipico dispositivo .NET Micro Framework ha un processore a 32 bit senza unità di gestione della memoria esterna (MMU) e potrebbe avere fino a 64 KB di memoria ad accesso casuale (RAM).

Inoltre, la brochure lo differenzia da Windows Mobile , Windows Embedded , CE 6.0 e .NET Compact Framework e lo confronta con Linux, Real-Time, Java e sistemi operativi personalizzati. Questo è un grande salto dal framework Arduino / Processing.

Il tuo Arduino ha un processore a 8 bit con 1k di RAM. Oltre alla perdita di potenza a 8 e 32 bit, funziona anche meno della metà della maggior parte dei processori elencati. Anche se non ti scoraggio dal passaggio a un processore a 32 bit, lo consiglierei come passaggio da intermedio a avanzato.

È davvero facile impiegare molto tempo e memoria con poche righe in C # o C ++, che sono insignificanti su un processore dual core in esecuzione a un paio di gigahertz con gigabyte di RAM, ma che può fare una grande differenza su un dispositivo incorporato . Fino a quando non sarai bravo nel linguaggio assembly e / o C, o in un guru in C # o C ++, non consiglierei di usarlo per la programmazione integrata.

Quindi, inizierei con il download di WinAVR e programmerei una semplice routine di lampeggiamento dei LED in C. Se C ti confonde totalmente, esegui un po 'di codice nativo ("Hello World") sul tuo PC, quindi passa a microcontrollore, ma non dovrebbe essere necessario. Quindi, passa alla comunicazione tramite UART, inizia a utilizzare gli interrupt e ripeti alcuni dei tuoi progetti Arduino in C. Quindi, trova (o crea!) Una nuova scheda di sviluppo con un diverso microcontrollore, forse un PIC o un ARM , e alcuni gadget come uno schermo LCD, Ethernet, scheda SD o qualsiasi cosa tu voglia, e prova ad imparare un nuovo sistema. Una volta arrivati ​​lì, saprai meglio dove vuoi andare.

Saremo qui per aiutarti lungo la strada!


6
Non sono d'accordo sul fatto che la conoscenza dell'assemblatore e del C siano essenziali. È fondamentale capire come funzionano i microcontrollori . L'apprendimento dell'assemblatore (c, meno) è certamente una strada per questa comprensione, ma non è l'unico.
Connor Wolf,

4
@ Nome falso: certo, ecco perché ho detto "almeno alcuni di ciascuno". Seguire un semplice programma da C a assembly a hex, e comprendere ogni passo, ti renderà un programmatore molto migliore. In seguito puoi lasciare che la magia faccia la sua cosa se vuoi, ma devi capire le capacità della macchina con cui stai lavorando.
Kevin Vermeer,

Spiacenti. Perso il "Alcuni di".
Connor Wolf

7

Non ho esperienza con ".NET Micro Framework", ma sono altamente sospettoso di tutto ciò che comporta l'esecuzione di una macchina virtuale su piattaforme embedded a bassa potenza. Mi sembra solo uno spreco. Sono necessari più processori di potenza, più memoria, più consumo di energia, per ottenere lo stesso effetto dell'esecuzione di una piattaforma più dedicata che si compila fino al codice macchina nativo. Forse perché il mio telefono Android a 528 MHz che esegue una macchina virtuale (simile a JVM) spesso si sente più lento del mio precedente Palm Treo a 312 MHz da diversi anni che esegue applicazioni compilate per il codice macchina nativo.

Da una rapida occhiata, .NET MF richiede un processore ARM, che rappresenta un passo in avanti in termini di potenza e complessità rispetto ai chip ATMega a 8 bit utilizzati in Arduino.

Il mio suggerimento è che se Arduino fa quello che vuoi, seguilo. Altrimenti, puoi guardare ai più potenti chip ATMega o ATXmega e, soprattutto, che funzionano con ARM direttamente in C / C ++, senza il livello extra di traduzione .NET.


2
Sono pienamente d'accordo, ma non credo sia quello che sta succedendo. Penso che l'IL venga tradotto nel codice specifico della macchina quando viene distribuito. Ecco un link su cui si basa questa ipotesi: microsoft.com/downloads/… Finora sono abbastanza contento di Arduino ... Penso che l'unica cosa che probabilmente mi possa convincere è che ho trovato una selezione di scudi piuttosto impressionante su tinyclr.com .. Non ho visto una vasta selezione di scudi per Arduino.
Chris B. Behrens,

1
Il compromesso dello sforzo del programmatore è anche il motivo per cui i nostri PC desktop impiegano altrettanto tempo per avviare e avviare programmi come i computer che abbiamo usato 5 o 10 anni fa.
Kevin Vermeer,

@Chris - Il problema non è che non esegue il codice macchina, è che lo esegue attraverso un mucchio di astrazioni. Astrazione, oggetti, librerie generiche, modularità, ecc. Sono tutte buone in quanto semplificano la programmazione, ma richiedono tempo e spazio.
Kevin Vermeer,

Sì, ma penso che gli strati di astrazione esistano solo (o almeno per lo più solo) sulla macchina di sviluppo. Ma ovviamente, questo è solo il tipo di informazioni di cui ho bisogno.
Chris B. Behrens,

2
@Chris - Le astrazioni vengono propagate fino al codice macchina. Alla fine, la macchina esegue operazioni sugli indirizzi: carica, memorizza, aggiungi, diramazione condizionale, ecc. L'assemblaggio è una traduzione uno-a-uno del codice macchina e le mappe C relativamente vicine ad esso. Tuttavia, le lingue di livello superiore hanno molto lavoro da fare, perché non ci sono, per esempio, istruzioni try / catch nel set di istruzioni di qualsiasi processore. Il codice macchina richiesto per implementare un gestore eccezioni non è banale.
Kevin Vermeer,

4

Se vuoi passare all'intermedio dovresti provare una piattaforma al di fuori dell'ambiente di Arduino. Ce ne sono molti tra cui scegliere, puoi rimanere a 8 bit, anche con un MCU Atmel o passare a uno da un altro fornitore. Usa un IDE, scrivi il codice C in linguaggio, capisci come funziona un MCU, scrivi il tuo codice bootloader o usa un programmatore in-circuit e continua a muoverti.

Ma se vuoi davvero provare a scrivere in C # per i microcontrollori, prova questo: http://www.trygtech.com/products/sh7619_evb.php

Utilizza un MCU molto più grande, il footprint .NET tipico è di circa 512 KB di memoria flash e 256 KB di RAM.


2
Tale sistema utilizza il framework .NET Micro. È proprio il tipo di sistema su cui Chris cercava opinioni.
Kevin Vermeer,

4

Ho appena visto Netduino che potrebbe essere un compromesso interessante per te. Non ho idea delle specifiche o dei dettagli di sistema, ma sembra usare .NET Micro, quindi sembra un buon modo per provare almeno quel framework.


3

Il più grande singolo problema per me con Processing / Arduino è la mancanza di un debugger decente. Ho un drago AVR, ma questo non aiuta molto perché (a) il debugger di AVR Studio è lento e difettoso, oppure (b) il debug in Eclipse è semplicemente lento e, seppure meno, ancora difettoso. Non ho avuto la possibilità di provarlo su WinAVR, ma è il prossimo nella lista.

Ovviamente non c'è debugger nell'IDE di Arduino.

Una volta che esci da semplici applicazioni e inizi a creare app che devono fare cose coinvolte a livello di rete cablata e wireless, è abbastanza frustrante. Questo è principalmente il motivo per cui sto prendendo in seria considerazione .NET MF: ho giocato con l'SDK e presto arriverà dell'hardware.


Oops ... perdi la concentrazione! Sto usando il toochain WinAVR con eclissi ;-)

1
Confesserò ... non mi è mai venuto in mente che in entrambi i sistemi ci sarebbe un debugger, a parte il pin 13. Ciò richiede sicuramente una seconda occhiata a Netduino ...
Chris B. Behrens

Sì; puoi usare DebugWire su ATMegas più piccoli e JTAG su chip più grandi (1280 e oltre credo) per eseguire il debigging su chip delle app Arduino tramite i due ambienti sopra menzionati. Devi avere hardware per fare questo, però, e per me il Drago a circa $ 50USD è stato un buon acquisto

Ma, come ho già detto, entrambe le opzioni sembravano nella media le migliori esperienze. Non vedo l'ora di fare il confronto di debug con il netduino che sto arrivando.

1
Un aggiornamento su questo - ha ricevuto un netduino più un paio di giorni fa e ci ha giocato. Devo dire che l'esperienza fuori dagli schemi è sorprendente rispetto allo stato attuale di Arduino. Non è necessario nulla di speciale: solo Visual Studio (puoi usare la versione 'express' gratuita) e un cavo USB e sei pronto e funzionante con il debug a bordo in un batter d'occhio. Tutte le cose intellisense funzionano nell'IDE e devo dire che, anche se ho fatto un sacco di lavoro c / c ++ su altre piattaforme, l'uso di .NET rende criminale il codice incorporato buildnig facile ;-)

2

Potresti voler dare un'occhiata a Netduino . È progettato per essere compatibile con il layout e i pin di Arduino ed esegue .NET Micro Framework. Quindi puoi scrivere codice in C # e persino eseguire il debug in Visual Studio!

Finora l'ho trovato molto buono e facile da lavorare. Anche se non ho trovato molti tutorial, penso che puoi semplicemente portare molte cose di Arduino. Essendo un principiante, sono stato in grado di eseguire facilmente il porting di una configurazione e di un codice di fotoresistenza / fotocellula da un tutorial di Arduino.


1

Potresti prendere in considerazione lo sviluppo in stile C di Arduino su un STM32 (ARM M3), attraverso uno dei numerosi progetti open source. LeafLabs e xduino hanno entrambi hardware funzionante e toolchain basati su Arduino. Ho usato la scheda Leaflabs Maple quando ho bisogno di un microcontrollore a 32 bit, rispetto ai normali chip Atmega


1

Puoi guardare http://www.hpinfotech.ro/html/cvavr.htm che è un IDE piacevole e facile da usare per l'Atmel e scrivere alcuni CI che lo hanno usato professionalmente ed è molto buono, più simile al livello di convenienza che hai ottenere da IDE come Visual Studio. Ho Eclipse per essere un po 'goffo per lo sviluppo di Android non liscio come quello acquistato.

Ho Netduino che ho implementato un sistema di controllo Tricopter per divertimento, che è molto in tempo reale e funziona in modo affidabile, scritto in C # con Visual Studio 2010. Il debug sul dispositivo è generalmente eccellente, l'ho sincronizzato automaticamente tramite i dati tramite wifi e ho un minuscolo server HTTP sull'aereo.


0

Usiamo .NET Micro Framework nelle applicazioni di produzione (dispositivi di misurazione di precisione). Funziona bene

I microprocessori di oggi hanno raggiunto lo stato in cui è possibile utilizzare il paradigma 'create-see-profile-change-see ...'. La quantità di memoria è abbastanza grande ed economica ora, quindi molto probabilmente non si accumulerà con condizioni di memoria insufficiente.

E come sviluppatore C #, sai che un'adeguata profilazione per raggiungere una condizione desiderata è un modo migliore di vivere piuttosto che indovinare cos'altro e più complicato dovresti fare mentre crei il tuo codice per rendere il tuo codice (e forse no) un po 'più veloce.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.