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?
arduino
.net-micro-framework
Chris B. Behrens
quelle
quelle
Antworten:
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 :
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!
quelle
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.
quelle
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.
quelle
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.
quelle
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
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.
quelle
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
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.
quelle
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).
quelle