Arduino / Verarbeitung versus .NET Micro Framework? Beste Sprache? Beste Hardware?

10

Ich habe jetzt eine Weile mit Arduino rumgespielt und bin dabei, vom Anfänger zum Fortgeschrittenen zu wechseln. Ich hätte gerne einige Meinungen zu .NET Micro Framework in Bezug auf Leistung und Hardwareverfügbarkeit.

Ich bin ein .NET-Programmierer, aber ich habe festgestellt, dass die Verarbeitung für Arduino nahezu reibungslos ist ... Es liegt so nahe an C #, dass alles, was ich tun möchte, nicht einmal einen Besuch der Dokumentation erfordert.

Wie auch immer, was ist besser?

Chris B. Behrens
quelle
Siehe auch diese Frage (im Zusammenhang mit C ++): chiphacker.com/questions/3027/…
Kevin Vermeer

Antworten:

17

Wenn Sie vom Anfänger zum Fortgeschrittenen wechseln möchten, müssen Sie die Sprache C lernen. Auch wenn Sie die gesamte Windows-Lock-In-Debatte beiseite legen, müssen Sie in C sehr gut programmieren können, bevor Sie qualitativ hochwertige Arbeiten an a ausführen können Mikrocontroller in einer höheren Sprache wie .NET Micro oder C ++.

Eingebettete Systeme bestehen aus einer Wissenspyramide, und Sie müssen wirklich mindestens einige Schritte kennen, um ein guter Designer zu sein:
^ Benutzercode
^^ Betriebssysteme
^^^ Die C-Sprache
^^^^ Assemblersprache
^^^ ^^ Mikrocontroller-Architektur
^^^^^^ Digitales Design
^^^^^^^ Halbleiter ^^^^^^^
Grundelektronik (Ohmsches Gesetz)

Das Arduino-Framework bietet Hobbyisten einen praktischen Einstieg in die Pyramide zwischen der C-Sprache und einem Betriebssystem.

Speziell für Ihre .NET Micro Framework-Frage lautet das Info :

Das typische .NET Micro Framework-Gerät verfügt über einen 32-Bit-Prozessor ohne externe Speicherverwaltungseinheit (MMU) und verfügt möglicherweise nur über 64 KB Arbeitsspeicher (RAM).

Die Broschüre unterscheidet es außerdem von Windows Mobile , Windows Embedded , CE 6.0 und dem .NET Compact Framework und vergleicht es mit Linux-, Echtzeit-, Java- und benutzerdefinierten Betriebssystemen. Dies ist ein großer Sprung vom Arduino / Processing-Framework.

Ihr Arduino verfügt über einen 8-Bit-Prozessor mit 1 KB RAM. Zusätzlich zum Leistungsverlust von 8 Bit gegenüber 32 Bit läuft es weniger als halb so schnell wie die meisten der aufgeführten Prozessoren. Ich würde Sie zwar nicht davon abhalten, auf einen 32-Bit-Prozessor umzusteigen, würde ihn jedoch als Zwischenstufe bis Fortgeschrittene empfehlen.

Es ist wirklich einfach, mit ein paar Zeilen in C # oder C ++ viel Zeit und Speicher zu verbrauchen, die auf einem Dual-Core-Prozessor mit ein paar Gigahertz und Gigabyte RAM unbedeutend sind, auf einem eingebetteten Gerät jedoch einen großen Unterschied machen können . Bis Sie gut in Assemblersprache und / oder C oder einem Guru in C # oder C ++ sind, würde ich nicht empfehlen, es für die eingebettete Programmierung zu verwenden.

Also würde ich mit dem Herunterladen von WinAVR beginnen und eine einfache LED-Blinkroutine in C programmieren. Wenn C Sie völlig verwirrt, machen Sie ein wenig nativen Code ("Hello World") auf Ihrem PC und wechseln Sie dann zu Mikrocontroller, aber das sollte nicht nötig sein. Fahren Sie als Nächstes mit der Kommunikation über den UART fort, beginnen Sie mit der Verwendung von Interrupts und wiederholen Sie einige Ihrer Arduino-Projekte in C. Suchen Sie dann ein neues Entwicklungsboard mit einem anderen Mikrocontroller, möglicherweise einem PIC oder einem ARM und einigen anderen (oder erstellen Sie es!) Extras wie ein LCD-Bildschirm, Ethernet, SD-Karte oder was auch immer Sie wollen, und versuchen, ein neues System zu lernen. Sobald Sie dort angekommen sind, wissen Sie besser, wohin Sie wollen.

Wir helfen Ihnen gerne weiter!

Kevin Vermeer
quelle
6
Ich bin nicht der Meinung, dass Kenntnisse über Assembler und C wesentlich sind. Es ist wichtig zu verstehen, wie Mikrocontroller funktionieren . Assembler zu lernen (c, weniger) ist sicherlich ein Weg zu diesem Verständnis, aber es ist nicht der einzige.
Connor Wolf
4
@Fake Name: Sicher, deshalb habe ich "zumindest einige von jedem" gesagt. Wenn Sie einem einfachen Programm von C über die Montage bis zum Hex folgen und jeden Schritt verstehen, werden Sie zu einem weitaus besseren Programmierer. Sie können die Magie später ihre Sache machen lassen, wenn Sie möchten, aber Sie müssen die Fähigkeiten der Maschine verstehen, mit der Sie arbeiten.
Kevin Vermeer
Hoppla, sorry. Verpasste das "Einige von".
Connor Wolf
7

Ich habe keine Erfahrung mit ".NET Micro Framework", bin jedoch sehr misstrauisch gegenüber allem, was das Ausführen einer virtuellen Maschine auf eingebetteten Plattformen mit geringem Stromverbrauch beinhaltet. Es scheint mir nur eine Verschwendung zu sein. Sie benötigen mehr Energieprozessoren, mehr Speicher und mehr Stromverbrauch, um den gleichen Effekt zu erzielen wie eine dediziertere Plattform, die bis auf nativen Maschinencode kompiliert wird. Möglicherweise fühlt sich mein 528-MHz-Android-Telefon, auf dem eine virtuelle Maschine ausgeführt wird (ähnlich wie JVM), oft langsamer an als mein mehrere Jahre alter 312-MHz-Palm Treo, auf dem Anwendungen ausgeführt werden, die für systemeigenen Maschinencode kompiliert wurden.

Auf den ersten Blick benötigt .NET MF einen ARM-Prozessor, der in Bezug auf Leistung und Komplexität einen Schritt weiter ist als die in Arduino verwendeten 8-Bit-ATMega-Chips.

Mein Vorschlag ist, wenn Arduino tut, was Sie wollen, bleiben Sie dabei. Wenn nicht, können Sie auf die leistungsstärkeren ATMega- oder ATXmega-Chips schauen und darüber hinaus mit ARM direkt in C / C ++ arbeiten, ohne dass die zusätzliche .NET-Übersetzungsschicht darüber liegt.

davr
quelle
2
Ich stimme von Herzen zu, aber ich glaube nicht, dass das passiert. Ich denke, die IL wird bei der Bereitstellung in maschinenspezifischen Code übersetzt. Hier ist ein Link, der diese Annahme untermauert: microsoft.com/downloads/… Ich bin bisher ziemlich zufrieden mit Arduino ... Ich denke, das einzige, was mich möglicherweise überzeugt, ist, dass ich auf tinyclr.com eine ziemlich beeindruckende Schildauswahl gefunden habe. Ich habe noch keine so umfangreiche Schildauswahl für Arduino gesehen.
Chris B. Behrens
1
Der Kompromiss zwischen Power-to-Programmer-Aufwand ist auch der Grund, warum unsere Desktop-PCs genauso lange brauchen, um Programme zu starten und zu starten wie die Computer, die wir vor 5 oder 10 Jahren verwendet haben.
Kevin Vermeer
@Chris - Das Problem ist nicht, dass es keinen Maschinencode ausführt, sondern dass es eine Reihe von Abstraktionen durchläuft. Abstraktion, Objekte, generische Bibliotheken, Modularität usw. sind insofern gut, als sie die Programmierung vereinfachen, aber Zeit und Raum in Anspruch nehmen.
Kevin Vermeer
Ja, aber ich denke, die Abstraktionsschichten existieren nur (oder zumindest meistens nur) auf der Entwicklungsmaschine. Aber das ist natürlich genau die Art von Information, die ich brauche.
Chris B. Behrens
2
@Chris - Die Abstraktionen werden bis zum Maschinencode weitergegeben. Am Ende führt die Maschine Operationen an Adressen aus: Laden, Speichern, Hinzufügen, bedingte Verzweigung usw. Assembly ist eine Eins-zu-Eins-Übersetzung von Maschinencode, und C ist vergleichsweise genau darauf abgebildet. Übergeordnete Sprachen haben jedoch viel Arbeit zu erledigen, da der Befehlssatz eines Prozessors beispielsweise keine Try / Catch-Anweisung enthält. Der zum Implementieren eines Ausnahmebehandlers erforderliche Maschinencode ist nicht trivial.
Kevin Vermeer
4

Wenn Sie zur Mittelstufe wechseln möchten, sollten Sie eine Plattform außerhalb der Arduino-Umgebung ausprobieren. Es stehen viele zur Auswahl. Sie können sogar mit einer Atmel-MCU bei 8 Bit bleiben oder von einem anderen Anbieter zu einem wechseln. Verwenden Sie eine IDE, schreiben Sie Code C, verstehen Sie, wie eine MCU funktioniert, schreiben Sie Ihren eigenen Bootloader-Code oder verwenden Sie einen In-Circuit-Programmierer und bleiben Sie in Bewegung.

Wenn Sie jedoch wirklich versuchen möchten, in C # für Mikrocontroller zu schreiben, versuchen Sie Folgendes: http://www.trygtech.com/products/sh7619_evb.php

Es wird eine viel größere MCU verwendet. Der typische .NET-Footprint beträgt ca. 512 KB Flash-Speicher und 256 KB RAM.

Andre Oliveira
quelle
2
Dieses System verwendet das .NET Micro-Framework. Es ist genau die Art von System, zu der Chris nach Meinungen gesucht hat.
Kevin Vermeer
4

Ich habe gerade das Netduino gesehen, was für Sie ein interessanter Kompromiss sein könnte. Ich habe keine Ahnung von den Systemspezifikationen oder -details, aber es scheint .NET Micro zu verwenden, daher scheint es eine gute Möglichkeit zu sein, dieses Framework zumindest auszuprobieren.

Otherdave
quelle
3

Das größte Einzelproblem bei Processing / Arduino ist für mich das Fehlen eines anständigen Debuggers. Ich habe einen AVR-Drachen, aber das hilft nicht viel, weil entweder (a) der Debugger von AVR Studio langsam und fehlerhaft ist oder (b) das Debuggen in Eclipse einfach nur langsam und, wenn auch weniger, immer noch fehlerhaft ist. Ich hatte noch keine Gelegenheit, es in WinAVR zu versuchen, aber das steht als nächstes auf der Liste.

Es gibt natürlich keinen Debugger in der Arduino IDE.

Sobald Sie einfache Anwendungen verlassen und Apps erstellen, die auf drahtgebundener und drahtloser Netzwerkebene zu erledigen sind, ist dies ziemlich frustrierend. Dies ist hauptsächlich der Grund, warum ich mir die .NET MF ernsthaft anschaue - mit dem SDK gespielt habe und bald Hardware auftaucht.


quelle
Ups ... Konzentrationsverlust! Ich benutze die WinAVR Toochain mit Eclipse ;-)
1
Ich werde gestehen ... es ist mir nie in den Sinn gekommen, dass es in beiden Systemen einen Debugger geben würde, abgesehen von Pin 13. Das erfordert definitiv einen zweiten Blick auf Netduino ...
Chris B. Behrens
Ja; Sie können DebugWire auf den kleineren ATMegas und JTAG auf den größeren Chips (1280 und höher, glaube ich) verwenden, um das On-Chip-Debigging von Arduino-Apps über die beiden oben genannten Umgebungen durchzuführen. Sie müssen jedoch Hardware haben, um dies zu tun, und für mich war der Drache für etwa 50 USD ein guter Kauf
Aber wie ich bereits erwähnte, schienen beide Optionen bestenfalls durchschnittlich zu sein. Ich freue mich darauf, den Debugging-Vergleich mit dem kommenden Netduino durchzuführen.
1
Ein Update dazu - hat vor ein paar Tagen ein Netduino plus erhalten und damit gespielt. Ich muss sagen, dass die Out-of-the-Box-Erfahrung im Vergleich zum aktuellen Stand von Arduino erstaunlich ist. Es ist nichts Besonderes erforderlich - nur Visual Studio (Sie können die kostenlose Express-Version verwenden) und ein USB-Kabel, und Sie können das Debuggen im Handumdrehen sofort durchführen. Das ganze Intellisense-Zeug funktioniert in der IDE, und ich muss sagen - obwohl ich eine Menge C / C ++ - Arbeiten auf anderen Plattformen durchgeführt habe, macht die Verwendung von .NET das Erstellen von eingebettetem Code kriminell einfach ;-)
2

Vielleicht möchten Sie das Netduino ausprobieren . Es ist so konzipiert, dass es mit dem Arduino-Layout und den Pins kompatibel ist, und führt das .NET Micro Framework aus. So können Sie in C # codieren und sogar in Visual Studio debuggen!

Bisher habe ich festgestellt, dass es sehr gut und einfach ist, damit zu arbeiten. Obwohl ich nicht viele Tutorials gefunden habe, denke ich, dass Sie einfach viele Arduino-Inhalte portieren können. Als Neuling konnte ich problemlos ein Fotowiderstand / Fotozellen-Setup und Code aus einem Arduino-Tutorial portieren.

John Bubriski
quelle
1

Sie könnten in Betracht ziehen, eine C-Entwicklung im Arduino-Stil auf einem STM32 (ARM M3) über eines von mehreren Open-Source-Projekten durchzuführen. LeafLabs und xduino verfügen beide über funktionierende Hardware und Arduino-basierte Toolchains. Ich habe das Leaflabs Maple Board verwendet, wenn ich einen 32-Bit-Mikrocontroller über normalen Atmega-Chips benötige


quelle
1

Sie können sich http://www.hpinfotech.ro/html/cvavr.htm ansehen, eine nette, einfach zu verwendende IDE für den Atmel, und einige CIs schreiben, die diese professionell verwendet haben und die sehr gut sind, eher wie der Komfort, den Sie haben Holen Sie sich von IDEs wie Visual Studio. Ich habe Eclipse als etwas klobig für die Android-Entwicklung, nicht so schlau wie eine gekaufte.

Ich habe Netduino, für das ich zum Spaß ein Tricopter-Steuerungssystem implementiert habe, das sehr in Echtzeit ausgeführt wird und zuverlässig funktioniert. Es wurde in C # mit Visual Studio 2010 geschrieben. Das Debuggen auf dem Gerät ist im Allgemeinen hervorragend. Ich habe es automatisch über Daten synchronisieren lassen WiFi und ich haben einen winzigen HTTP-Server im Flugzeug.

Nick
quelle
0

Wir verwenden .NET Micro Framework in Produktionsanwendungen (Präzisionsmessgeräte). Es funktioniert gut.

Die heutigen Mikroprozessoren haben den Zustand erreicht, in dem Sie das Paradigma "Create-See-Profile-Change-See ..." verwenden können. Die Speichermengen sind jetzt ziemlich groß und billig, sodass Sie höchstwahrscheinlich nicht mit Speicherproblemen arbeiten können.

Und als C # -Entwickler wissen Sie, dass eine angemessene Profilerstellung, um einen gewünschten Zustand zu erreichen, eine bessere Lebensweise ist, als zu erraten, was Sie sonst noch tun sollten, während Sie Ihren Code erstellen, um Ihren Code ein bisschen schneller zu machen (und vielleicht auch nicht).

MajesticRa
quelle