Arduino / Procesamiento versus .NET Micro Framework? Mejor idioma? Mejor hardware?

10

He estado jugando con Arduino por un tiempo y estoy en el proceso de pasar de principiante a intermedio. Quisiera algunas opiniones sobre .NET Micro Framework , en términos de rendimiento y disponibilidad de hardware.

Soy un programador de .NET, pero descubrí que Processing for Arduino es prácticamente cero fricción ... Está tan cerca de C # que cualquier cosa que quiera hacer ni siquiera requiere un viaje a la documentación.

De todos modos, ¿cuál es mejor?

Chris B. Behrens
fuente
Consulte también esta pregunta (relacionada con C ++): chiphacker.com/questions/3027/…
Kevin Vermeer el

Respuestas:

17

Si desea pasar de principiante a intermedio, el lenguaje que necesita aprender es C. Incluso si deja de lado todo el debate sobre el bloqueo de Windows, debe ser muy bueno programando en C antes de poder realizar un trabajo de calidad en un microcontrolador en un lenguaje de nivel superior como .NET Micro o C ++.

Los sistemas integrados están compuestos por una pirámide de conocimiento, y realmente necesita saber al menos algunos de cada paso para ser un buen diseñador:
^ Código de usuario
^^ Sistemas operativos
^^^ El lenguaje C
^^^^ Lenguaje ensamblador
^^^ ^^ Arquitectura de microcontroladores
^^^^^^ Diseño digital ^^^^^^^
Semiconductores
^^^^^^^^ Electrónica básica (Ley de Ohm)

El marco Arduino proporciona un enlace conveniente para los aficionados a la pirámide en algún lugar entre el lenguaje C y un sistema operativo.

Específico a su pregunta sobre .NET Micro Framework, el Acerca de dice:

El dispositivo típico .NET Micro Framework tiene un procesador de 32 bits sin unidad de administración de memoria externa (MMU) y podría tener tan solo 64K de memoria de acceso aleatorio (RAM).

Además, el folleto lo diferencia de Windows Mobile , Windows Embedded , CE 6.0 y .NET Compact Framework, y lo compara con Linux, Real-Time, Java y sistemas operativos personalizados. Este es un gran salto desde el marco Arduino / Processing.

Su Arduino tiene un procesador de 8 bits con 1k de RAM. Además de la pérdida de potencia de 8 bits frente a 32 bits, también funciona a menos de la mitad de la velocidad de la mayoría de los procesadores enumerados. Si bien no te desanimaría de pasar a un procesador de 32 bits, lo recomendaría como un movimiento intermedio a avanzado.

Es realmente fácil usar mucho tiempo y memoria con unas pocas líneas en C # o C ++, que son insignificantes en un procesador de doble núcleo que funciona a un par de gigahercios con gigabytes de RAM, pero que puede hacer una gran diferencia en un dispositivo integrado . Hasta que sea bueno en lenguaje ensamblador y / o C, o sea un gurú en C # o C ++, no recomendaría usarlo para la programación integrada.

Entonces, comenzaría con la descarga de WinAVR y programaría una simple rutina de parpadeo de LED en C. Si C es totalmente confuso para usted, haga un poco de código nativo ("Hello World") en su PC y luego pase a microcontrolador, pero eso no debería ser necesario. Luego, avance a la comunicación a través del UART, comience a usar interrupciones y rehaga algunos de sus proyectos de Arduino en C. Luego, busque (¡o cree!) Una nueva placa de desarrollo con un microcontrolador diferente, tal vez un PIC o un ARM , y algunos extras como una pantalla LCD, Ethernet, tarjeta SD o lo que quieras, y trata de aprender un nuevo sistema. Una vez que llegues allí, sabrás mejor a dónde quieres ir.

¡Estaremos aquí para ayudarlo en el camino!

Kevin Vermeer
fuente
66
No estoy de acuerdo con que el conocimiento del ensamblador y C sea esencial. Es fundamental comprender cómo funcionan los microcontroladores . El ensamblador de aprendizaje (c, menos) es ciertamente una ruta para esta comprensión, pero no es la única.
Connor Wolf
44
@ Nombre falso: Claro, por eso dije "al menos algo de cada uno". Seguir un programa simple de C a ensamblar a hexadecimal, y comprender cada paso, lo convertirá en un mejor programador. Más tarde, puede dejar que la magia haga lo suyo si lo desea, pero necesita comprender las capacidades de la máquina con la que está trabajando.
Kevin Vermeer
Vaya, lo siento. Se perdió el "Algunos de".
Connor Wolf
7

No tengo experiencia con el ".NET Micro Framework", pero sospecho mucho de cualquier cosa que implique ejecutar una máquina virtual en plataformas integradas de baja potencia. Simplemente me parece un desperdicio. Necesita más procesadores de energía, más memoria, más consumo de energía, para lograr el mismo efecto que ejecutar una plataforma más dedicada que se compila en código máquina nativo. Posiblemente por qué mi teléfono Android de 528MHz con una máquina virtual (similar a JVM) a menudo se siente más lento que mi Palm Treo de 312MHz de varios años que ejecuta aplicaciones compiladas para el código de máquina nativo.

De un vistazo rápido, .NET MF requiere un procesador ARM, que está un paso por encima en potencia y complejidad de los chips ATMega de 8 bits utilizados en Arduino.

Mi sugerencia es que si Arduino hace lo que quieres, quédate con eso. De lo contrario, puede buscar los chips ATMega o ATXmega más potentes y, por encima, trabajar con ARM directamente en C / C ++, sin la capa de traducción .NET adicional encima.

davr
fuente
2
Estoy totalmente de acuerdo, pero no creo que eso sea lo que está sucediendo. Creo que la IL se traduce en código específico de la máquina cuando se implementa. Aquí hay un enlace que respalda esa suposición: microsoft.com/downloads/... Estoy muy feliz con Arduino hasta ahora ... Creo que lo único que posiblemente me convenza es que he encontrado una selección de escudo bastante impresionante en tinyclr.com ... No he visto una amplia selección de escudos para Arduino.
Chris B. Behrens
1
La compensación del esfuerzo de poder programar es también la razón por la cual nuestras PC de escritorio tardan tanto en arrancar y lanzar programas como las computadoras que utilizamos hace 5 o 10 años.
Kevin Vermeer
@Chris: el problema no es que no ejecute código de máquina, es que lo ejecuta a través de un montón de abstracciones. La abstracción, los objetos, las bibliotecas genéricas, la modularidad, etc. son buenos porque simplifican la programación, pero requieren tiempo y espacio.
Kevin Vermeer
Sí, pero creo que las capas de abstracción solo existen (o al menos principalmente) en la máquina de desarrollo. Pero, por supuesto, este es el tipo de información que necesito.
Chris B. Behrens
2
@Chris: las abstracciones se propagan hasta el código de la máquina. Al final, la máquina realiza operaciones en direcciones: cargar, almacenar, agregar, ramificación condicional, etc. El ensamblaje es una traducción uno a uno del código de la máquina, y C se asigna de manera comparativa. Sin embargo, los lenguajes de nivel superior tienen mucho trabajo por hacer, porque no hay, por ejemplo, instrucción try / catch en el conjunto de instrucciones de ningún procesador. El código de máquina requerido para implementar un controlador de excepciones no es trivial.
Kevin Vermeer
4

Si desea pasar a intermedio, debe probar una plataforma fuera del entorno de Arduino. Hay muchos de ellos para elegir, puede permanecer en 8 bits, incluso con un MCU Atmel o pasar a uno de otro proveedor. Utilice un IDE, escriba el lenguaje del código C, comprenda cómo funciona una MCU, escriba su propio código del gestor de arranque o use un programador en circuito y siga avanzando.

Pero si realmente quiere intentar escribir en C # para microcontroladores, intente esto: http://www.trygtech.com/products/sh7619_evb.php

Utiliza una MCU mucho más grande, la huella .NET típica es de aproximadamente 512K de memoria flash y 256k de RAM.

Andre Oliveira
fuente
2
Ese sistema usa el marco .NET Micro. Es precisamente el tipo de sistema sobre el que Chris estaba buscando opiniones.
Kevin Vermeer
4

Acabo de ver el Netduino, que puede ser un compromiso interesante para usted. No tengo idea de las especificaciones o detalles del sistema, pero parece que utiliza .NET Micro, por lo que parece una buena manera de al menos probar ese marco.

Otherdave
fuente
3

El mayor problema para mí con Processing / Arduino es la falta de un depurador decente. Tengo un dragón AVR, pero esto no ayuda mucho porque (a) el depurador de AVR Studio es lento y tiene errores, o (b) la depuración en Eclipse es simplemente lenta y, aunque no tanto, todavía tiene errores. No he tenido la oportunidad de probarlo en WinAVR, pero ese es el siguiente en la lista.

Por supuesto, no hay depurador en Arduino IDE.

Una vez que salga de las aplicaciones simples y comience a crear aplicaciones que tienen que hacer cosas involucradas a nivel de red cableada e inalámbrica, es bastante frustrante. Esta es principalmente la razón por la que estoy analizando seriamente el .NET MF: he estado jugando con el SDK y tengo un poco de hardware apareciendo pronto.


fuente
¡Vaya ... la falta de concentración! Estoy usando WinAVR toochain con eclipse ;-)
1
Confesaré ... nunca se me ocurrió que en ninguno de los sistemas habría un depurador, aparte del pin 13. Eso definitivamente requiere una segunda mirada a Netduino ...
Chris B. Behrens
Sí; puede usar DebugWire en los ATMegas más pequeños y JTAG en los chips más grandes (creo que 1280 y superiores) para realizar la depuración en chip de las aplicaciones Arduino a través de los dos entornos mencionados anteriormente. Tienes que tener el hardware para hacer esto, sin embargo, y para mí el Dragón en alrededor de $ 50USD era una buena compra
Pero, como mencioné, ambas opciones parecían ser promedio en las mejores experiencias. Tengo muchas ganas de hacer la comparación de depuración con el netduino que vengo.
1
Una actualización sobre esto: recibí un netduino plus hace un par de días y he estado jugando con él. Tengo que decir que la experiencia original es increíble en comparación con el estado actual de juego en Arduino. No se requiere nada sofisticado: solo visual studio (puede usar la versión gratuita 'express') y un cable usb y estará listo para funcionar con la depuración a bordo en un santiamén. Todas las cosas de intellisense funcionan en el IDE, y tengo que decir que, aunque he hecho un montón de trabajo de c / c ++ en otras plataformas, el uso de .NET hace que construir código incrustado sea criminalmente fácil ;-)
2

Es posible que desee ver el Netduino . Está diseñado para ser compatible con el diseño y los pines de arduino, y ejecuta .NET Micro Framework. ¡Entonces puede codificar en C # e incluso depurar dentro de Visual Studio!

Hasta ahora he encontrado que es muy bueno y fácil de trabajar. Si bien no he encontrado muchos tutoriales, creo que puedes portar muchas cosas de Arduino. Siendo yo un novato, pude portar fácilmente una configuración y código de fotorresistencia / fotocélula de un tutorial de Arduino.

John Bubriski
fuente
1

Podría considerar hacer el desarrollo de Arduino estilo C en un STM32 (ARM M3), a través de uno de varios proyectos de código abierto. LeafLabs y xduino tienen hardware de trabajo y cadenas de herramientas basadas en Arduino. He estado usando la placa Leaflabs Maple cuando necesito un microcontrolador de 32 bits, sobre chips Atmega normales


fuente
1

Podrías mirar http://www.hpinfotech.ro/html/cvavr.htm, que es un IDE fácil de usar para Atmel y escribir algunos CI que has usado profesionalmente y es muy bueno, más como el nivel de conveniencia que tienes obtener de IDE como Visual Studio. Tengo Eclipse para ser un poco torpe para el desarrollo de Android, no tan elegante como uno comprado.

Tengo Netduino, que he implementado un sistema de control Tricopter para divertirme, que es en tiempo real y funciona de manera confiable, escrito en C # con Visual Studio 2010. La depuración en el dispositivo es generalmente excelente, la sincronizo automáticamente a través de datos wifi y tengo un pequeño servidor HTTP en el avión.

Mella
fuente
0

Utilizamos .NET Micro Framework en aplicaciones de producción (dispositivos de medición de precisión). Funciona bien.

Los microprocesadores actuales han alcanzado el estado en el que puede usar el paradigma 'crear-ver-cambiar-ver-ver ...'. Las cantidades de memoria son bastante grandes y baratas ahora, por lo que probablemente no se acumulará con condiciones de falta de memoria.

Y como desarrollador de C #, sabe que un perfil adecuado para alcanzar la condición deseada es una mejor manera de vivir que adivinar qué más y más complicado debe hacer al crear su código para que su código (y tal vez no) sea un poco más rápido.

MajesticRa
fuente