Arduino / Processamento versus .NET Micro Framework? Melhor idioma? Melhor hardware?


10

Estou brincando com o Arduino há um tempo e estou passando de iniciante para intermediário. Gostaria de algumas opiniões sobre o .NET Micro Framework , em termos de desempenho e disponibilidade de hardware.

Eu sou um programador .NET, mas achei o Processing for Arduino praticamente sem atrito ... É tão próximo do C # que qualquer coisa que eu queira fazer nem sequer requer uma visita à documentação.

De qualquer forma, qual é o melhor?


Consulte também esta pergunta (relacionada ao C ++): chiphacker.com/questions/3027/…
Kevin Vermeer

Respostas:


17

Se você deseja passar do iniciante para o intermediário, o idioma que precisa aprender é C. Mesmo se você deixar de lado todo o debate sobre o bloqueio do Windows, precisará ser muito bom em programação em C antes de poder trabalhar com qualidade. microcontrolador em uma linguagem de nível superior, como .NET Micro ou C ++.

Os sistemas embarcados são compostos de uma pirâmide de conhecimento e você realmente precisa conhecer pelo menos parte de cada etapa para ser um bom designer:
^ Código do usuário
^^ Sistemas operacionais
^^^ A linguagem C
^^^^ Linguagem de montagem
^^^ ^^ Arquitetura do microcontrolador
^^^^^^ Design digital ^^^^^^^
Semicondutores
^^^^^^^^ Eletrônica básica (lei de Ohm)

A estrutura do Arduino fornece um gancho conveniente para os entusiastas da pirâmide em algum lugar entre a linguagem C e um sistema operacional.

Específico à sua pergunta do .NET Micro Framework, o About diz:

O dispositivo típico do .NET Micro Framework possui um processador de 32 bits sem MMU (unidade de gerenciamento de memória externa) e pode ter apenas 64 K de memória de acesso aleatório (RAM).

Além disso, o folheto o diferencia do Windows Mobile , Windows Embedded , CE 6.0 e .NET Compact Framework, e o compara aos sistemas operacionais Linux, Tempo Real, Java e personalizados. Este é um grande salto da estrutura do Arduino / Processing.

Seu Arduino possui um processador de 8 bits com 1k de RAM. Além da perda de energia de 8 bits vs. 32 bits, ele também roda menos da metade da velocidade da maioria dos processadores listados. Embora eu não o desencoraje de mudar para um processador de 32 bits, eu o recomendaria como um movimento intermediário para avançado.

É realmente fácil gastar muito tempo e memória com algumas linhas em C # ou C ++, que são insignificantes em um processador dual core rodando a alguns gigahertz com gigabytes de RAM, mas que podem fazer uma enorme diferença em um dispositivo incorporado . Até você ser bom em linguagem assembly e / ou C, ou um guru em C # ou C ++, eu não recomendaria usá-lo para programação incorporada.

Portanto, eu começaria com o download do WinAVR e programaria uma rotina simples de piscar de LED em C. Se C é totalmente confuso para você, crie um pouco de código nativo ("Hello World") no seu PC e depois vá para o diretório microcontrolador, mas isso não deve ser necessário. Em seguida, avance para a comunicação pelo UART, comece a usar interrupções e refaça alguns de seus projetos do Arduino em C. Em seguida, encontre (ou faça!) Uma nova placa de desenvolvimento com um microcontrolador diferente, talvez um PIC ou ARM e alguns guloseimas como uma tela LCD, Ethernet, cartão SD ou o que você quiser, e tente aprender um novo sistema. Quando chegar lá, você saberá melhor para onde deseja ir.

Estaremos aqui para ajudá-lo ao longo do caminho!


6
Não concordo que o conhecimento de assembler e C seja essencial. É fundamental entender como os microcontroladores funcionam . Aprender assembler (c, menos) é certamente um caminho para esse entendimento, mas não é o único.
Connor Wolf

4
@ Nome falso: Claro, é por isso que eu disse "pelo menos alguns de cada". Seguir um programa simples de C a montagem até hexadecimal e entender cada etapa o tornará um programador muito melhor. Mais tarde, você pode deixar a mágica fazer o que quiser, mas precisa entender os recursos da máquina com a qual está trabalhando.
21910 Kevin Vermeer

Opa, desculpe. Perdeu o "Alguns dos".
Connor Wolf

7

Não tenho experiência com o ".NET Micro Framework", mas desconfio de qualquer coisa que envolva a execução de uma máquina virtual em plataformas embarcadas de baixa potência. Parece um desperdício para mim. Você precisa de mais processadores de energia, mais memória, mais consumo de energia, para obter o mesmo efeito que executar uma plataforma mais dedicada, compilada no código de máquina nativo. Possivelmente por que meu telefone Android de 528MHz executando uma máquina virtual (semelhante à JVM) geralmente parece mais lento do que o Palm Treo de 312MHz de vários anos anterior, que executa aplicativos compilados para código de máquina nativo.

De uma olhada rápida, o .NET MF requer um processador ARM, que é um passo acima em potência e complexidade dos chips ATMega de 8 bits usados ​​no Arduino.

Minha sugestão é que, se o Arduino fizer o que você quer, continue com isso. Caso contrário, você pode procurar os chips ATMega ou ATXmega mais poderosos e, acima disso, trabalhar com ARM diretamente em C / C ++, sem a camada de conversão .NET adicional sobre ela.


2
Concordo plenamente, mas não acho que seja isso que esteja acontecendo. Acho que o IL é traduzido em código específico da máquina quando é implantado. Aqui está um link que sustenta essa suposição: microsoft.com/downloads/… Até agora estou muito feliz com o Arduino ... Acho que a única coisa que possivelmente me convenceu é que encontrei uma seleção de escudos impressionante no tinyclr.com .. .Não vi uma seleção tão extensa de escudos para o Arduino.
Chris B. Behrens

11
A troca de esforços entre o programador e o programador também é o motivo pelo qual nossos PCs desktop demoram tanto tempo para inicializar e iniciar programas quanto os computadores que usamos há 5 ou 10 anos.
27610 Kevin Vermeer

@ Chris - O problema não é que ele não executa o código da máquina, é que ele o executa através de um monte de abstrações. Abstração, objetos, bibliotecas genéricas, modularidade etc. são bons, pois simplificam a programação, mas levam tempo e espaço.
27610 Kevin Vermeer

Sim, mas acho que as camadas de abstração existem apenas (ou pelo menos principalmente apenas) na máquina de desenvolvimento. Mas é claro, esse é apenas o tipo de informação que eu preciso.
Chris B. Behrens

2
@ Chris - As abstrações são propagadas até o código da máquina. No final, a máquina executa operações nos endereços: Carregar, armazenar, adicionar, ramificação condicional, etc. Assembly é uma tradução individual do código da máquina e C é mapeado comparativamente próximo a ela. No entanto, linguagens de nível superior têm muito trabalho a fazer, porque não há, digamos, instruções try / catch no conjunto de instruções de qualquer processador. O código de máquina necessário para implementar um manipulador de exceções não é trivial.
21710 Kevin Vermeer

4

Se você deseja mudar para o intermediário, tente uma plataforma fora do ambiente do Arduino. Existem muitas opções para escolher, você pode permanecer em 8 bits, mesmo com um Atmel MCU ou mudar para outro de outro fornecedor. Use um IDE, escreva a linguagem de código C, entenda como funciona um MCU, escreva seu próprio código do gerenciador de inicialização ou use um programador em circuito e siga em frente.

Mas se você realmente quiser escrever em C # para microcontroladores, tente o seguinte: http://www.trygtech.com/products/sh7619_evb.php

Ele usa um MCU muito maior, o espaço físico típico do .NET é de cerca de 512K de memória flash e 256k de RAM.


2
Esse sistema usa a estrutura do Micro Micro. É precisamente o tipo de sistema em que Chris estava procurando opiniões.
22610 Kevin Vermeer

4

Acabei de ver o Netduino, que pode ser um compromisso interessante para você. Não tenho idéia das especificações ou detalhes do sistema, mas ele parece usar o .NET Micro, por isso parece uma boa maneira de, pelo menos, experimentar essa estrutura.


3

O maior problema para mim com o Processing / Arduino é a falta de um depurador decente. Eu tenho um dragão AVR, mas isso não ajuda muito porque (a) o depurador do AVR Studio é lento e com bugs, ou (b) a depuração no Eclipse é muito lenta e, embora menos, ainda com bugs. Não tive a chance de experimentá-lo no WinAVR, mas é o próximo na lista.

Obviamente, não há depurador no IDE do Arduino.

Depois de sair de aplicativos simples e começar a criar aplicativos que precisam fazer coisas envolvidas no nível da rede com e sem fio, é bastante frustrante. É principalmente por isso que estou analisando seriamente o .NET MF - estou brincando com o SDK e há algum hardware aparecendo em breve.


Opa ... lapso de concentração! Eu estou usando o toochain WinAVR com eclipse ;-)

11
Confesso ... nunca me ocorreu que, em qualquer um dos sistemas, haveria um depurador, além do pino 13. Isso definitivamente exige uma segunda olhada no Netduino ...
Chris B. Behrens

Sim; você pode usar o DebugWire no ATMegas menor e o JTAG nos chips maiores (1280 e acima, eu acho) para fazer a depuração no chip de aplicativos Arduino através dos dois ambientes mencionados acima. Você tem que ter hardware para fazer isso, porém, e para mim o dragão em torno de US $ 50USD foi uma boa compra

Mas, como mencionei, ambas as opções pareciam ser médias nas melhores experiências. Estou ansioso para fazer a comparação de depuração com o netduino que tenho por vir.

11
Uma atualização sobre isso - recebeu um netduino mais alguns dias atrás e vem jogando com ele. Devo dizer que a experiência imediata é incrível em comparação com o estado atual do Arduino. Não é necessário nada sofisticado - apenas o visual studio (você pode usar a versão 'expressa' gratuita) e um cabo USB e você está pronto para operar com a depuração integrada em um instante. Todo o material do intellisense funciona no IDE, e eu tenho que dizer - embora eu fiz um monte de c / c ++ trabalho em outras plataformas, utilizando .NET faz buildnig código incorporado criminalmente fácil ;-)

2

Você pode querer verificar o Netduino . Ele foi desenvolvido para ser compatível com o layout e os pinos do arduino e executa o .NET Micro Framework. Então você pode codificar em C # e até depurar dentro do Visual Studio!

Até agora, achei muito bom e fácil trabalhar. Embora eu não tenha encontrado muitos tutoriais, acho que você pode simplesmente portar muitas coisas do Arduino. Sendo um novato, pude facilmente portar uma configuração e código de fotoresistor / fotocélula a partir de um tutorial do Arduino.


1

Você pode considerar o desenvolvimento de um estilo C do Arduino em um STM32 (ARM M3), por meio de um dos vários projetos de código aberto. O LeafLabs e o xduino possuem hardware de trabalho e cadeias de ferramentas baseadas em Arduino. Eu uso a placa Leaflabs Maple quando preciso de um microcontrolador de 32 bits, sobre chips Atmega comuns


1

Você pode consultar http://www.hpinfotech.ro/html/cvavr.htm, que é um IDE fácil de usar para o Atmel e escrever que alguns ICs usaram isso profissionalmente e é muito bom, mais parecido com o nível de conveniência que você obtenha IDE's como o Visual Studio. Eu tenho o Eclipse para ser um pouco desajeitado para o desenvolvimento do Android, não tão liso quanto um comprado.

Eu tenho o Netduino, que implementei por diversão um sistema de controle Tricopter, que é muito em tempo real e funciona de maneira confiável, escrito em C # com o Visual Studio 2010. A depuração no dispositivo geralmente é excelente, eu tenho os dados de sincronização automática via wifi e eu tenho um pequeno servidor HTTP na aeronave.


0

Utilizamos o .NET Micro Framework em aplicativos de produção (dispositivos de medição de precisão). Funciona bem.

Os microprocessadores de hoje atingiram o estado em que você pode usar o paradigma 'criar-ver-perfil-mudar-ver ...'. A quantidade de memória é muito grande e barata agora, portanto, provavelmente você não empilhará com condições de falta de memória.

E como desenvolvedor de C #, você sabe que o perfil adequado para atingir uma condição desejada é uma maneira melhor de viver do que adivinhar o que mais e mais complicado você deve fazer ao criar seu código para torná-lo (e talvez não) um pouco mais rápido.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.