Ich bin ein langjähriger Java- Entwickler, der anfängt, sich mit Lego Mindstorms NXT 2.0 vertraut zu machen . Gibt es Einschränkungen bei der Verwendung der Java-API? Welche Sprache ist auf der Plattform am robustesten?
Ich habe einen Beitrag gefunden. Welche Programmiersprache soll ich mit dem NXT verwenden? das erwähnt viele der Alternativen. Die Antwort ist hilfreich, erwähnt jedoch nicht die Einschränkungen der verschiedenen Sprachen.
nxt
programming-languages
mindstorms
Bob Paulin
quelle
quelle
Antworten:
Viele der verschiedenen Optionen in Bezug auf die Sprache sind auf der NXT-Wiki-Seite http://en.wikipedia.org/wiki/Lego_Mindstorms_NXT_2.0 aufgeführt .
Wie bereits erwähnt, ist das Diagramm in http://teamhassenplug.org/NXT/NXTSoftware.html ein guter Vergleich.
Obwohl ich der Meinung bin, dass die Frage nach der Verwendung von NXT-G, Matlab, Labview und einer Reihe anderer Schnittstellen viel zu vieldeutig ist, habe ich festgestellt, dass die BricxCC-IDE und die NXC mit großer kontextbezogener Hilfe und vielem sehr einfach zu verwenden sind von Beispielen. Es ermöglicht viel mehr Programmierfreiheit, die die visuellen Lösungen nicht bieten. Ich habe nicht versucht, die höheren Programmiersprachen wie Java und C ++ zu verwenden, da die meisten Anwendungen, die ich verwendet habe, nicht von den erweiterten Funktionen profitiert hätten. Wenn Sie diese erweiterten Funktionen wünschen, ist NXT die richtige Hardware?
In diesem Beitrag für LeJOS wird dies in Bezug auf Java erörtert: http://www.lejos.org/forum/viewtopic.php?f=18&t=4619: - "Die NXT-Firmware wechselt alle 1 ms den Thread-Kontext. Außerdem ist der Scheduler der NXT-Firmware viel vorhersehbarer. Beispielsweise würde der Scheduler einen Thread mit hoher Priorität einem Thread mit niedrigerer Priorität vorziehen. Daher Threads mit hoher Priorität Es könnte ziemlich sicher sein, dass dies so schnell wie möglich geplant wird. Die Motorregelung wurde normalerweise als Thread mit hoher Priorität ausgeführt. Wie Sie bereits vermutet haben, war die NXT-Firmware jedoch auch kein Echtzeitsystem. Threads mit derselben Priorität werden im Round-Robin-Verfahren bereitgestellt. Oh, und hin und wieder stoppt der Garbage Collector die gesamte JVM. Dies gilt immer für die NXT. Die auf dem EV3 verwendete Oracle-JVM verwendet jedoch gleichzeitig Garbage Collectors. Im schlimmsten Fall greifen jedoch auch diese auf das Anhalten zurück die ganze JVM. Der Trick, dies zu vermeiden, besteht darin, Objekte, Arrays, wiederzuverwenden.und solche Sachen so weit wie möglich in leistungskritischen Codepfaden. "
In diesem Beitrag für LeJOS wird dies in Bezug auf Java behandelt: http://www.lejos.org/nxt/nxj/tutorial/AdvancedTopics/UnderstandingFilesLCPMemTools.htm
"Der NXT verfügt über 256 KB Flash-Speicher. Ein fester Abschnitt am Anfang des Flash-Speichers ist dem System zugeordnet. Er dient zum Speichern der Firmware, gefolgt vom Startmenü. Der Rest dieses Systembereichs wird nicht verwendet. Die Größe des Systembereichs variiert zwischen den Releases.
Die Firmware ist in C mit einer ARM-Assemblersprache geschrieben. Das Startmenü ist in Java geschrieben (im Startprojekt in SVN).
Der Flash-Speicher wird auf 256-Byte-Seiten gelesen und geschrieben. Die erste Seite nach dem Systembereich wird für dauerhafte Systemeinstellungen verwendet, die vom Startmenü verwaltet werden.
Der Rest des Flash-Speichers wird für das Benutzerdateisystem verwendet. Die ersten beiden Seiten enthalten die Dateitabelle (Verzeichnis) und die restlichen Seiten enthalten Benutzerdateien. Dateien werden als zusammenhängende Menge von Bytes gespeichert, dh sie verwenden einen einzelnen Bereich von Seitenzahlen ohne Lücken. Dadurch kann eine Datei als Speicherbereich adressiert werden. "
Eine Möglichkeit zum Programmieren von Interrupt-Handlern auf dem NXT besteht darin, auf einer niedrigeren Ebene zu programmieren: http://www.tau.ac.il/~stoledo/lego/nxt-native/
"Der Einstieg ist ziemlich einfach. Sie benötigen zwei Tools: die GNU-Entwicklungstools für ARM-Prozessoren und eine Möglichkeit, die resultierenden Programme auf den NXT herunterzuladen. Ich verwende nexttool, um Programme auf den NXT herunterzuladen, aber ich nehme an, Sie könnten sie verwenden." NXT-G auch. Es gibt verschiedene Distributionen der GNU-Tools für ARM. Ich verwende normalerweise eine Distribution namens WinARM, die für Windows bestimmt ist. GNUARM und YAGARTO sind zwei weitere Optionen (ich habe GNUARM unter Linux verwendet). "
quelle