Mit funktionalen Sprachen wie Haskell, LISP oder Scheme kann ein Programmierer schnell mit dem Paradigma der funktionalen Programmierung arbeiten . Sie haben ihre Ineffizienzen , aber meine Anwendung legt mehr Wert auf die Effizienz des Programmierers als auf die Effizienz des Programms.
Ich möchte die funktionale Programmierung eines Mikrocontrollers für die Maschinensteuerung usw. verwenden.
Welche Einschränkungen gibt es, z. B. minimale Systemressourcen?
Welche Beispielimplementierungen dieser Sprachen sind verfügbar?
microcontroller
programming
J. Polfer
quelle
quelle
Antworten:
http://armpit.sourceforge.net/
Du sagst:
Die Verwendung von Hochsprachen ist eine effizientere Verwendung der Programmiererzeit, kann jedoch häufig eine weniger effiziente Verwendung der Rechenressourcen sein. Bei eingebetteten Systemen, die in großen Stückzahlen hergestellt werden, haben Kosten und Leistung oft eine höhere Priorität als der Entwicklungsaufwand.
quelle
Sie können AVR-Controller mit Haskell auch mit Atom / Copilot programmieren, z. B. http://leepike.wordpress.com/2010/12/18/haskell-and-hardware-for-the-holidays/
quelle
C, C ++ und Assembly kommen der Maschinensprache sehr nahe. Durch die Verwendung einer höheren Sprache fügen Sie zusätzlichen Overhead hinzu, um eine schnellere / einfachere / etc-Entwicklung zu erzielen.
quelle
Ich habe kürzlich ein ARM-Board in Python programmiert und finde es großartig. Es ist nicht gut für die Echtzeitsteuerung, aber ich mache mehr webbezogene Dinge, was in einer höheren Sprache weitaus angenehmer ist als in C.
quelle
Die Mehrheit der Mikrocontroller sind immer noch 8- und 16-Bit-Geräte (obwohl sich dies langsam ändert). Die beiden in anderen Antworten erwähnten Instanzen übergeordneter Sprachen (Schema und Python) werden beide auf 32-Bit-ARM-Kernen ausgeführt. Die kleineren 8- und 16-Bit-Geräte (die möglicherweise nur ein paar Dollar kosten) verfügen nicht über genügend RAM, um die genannten Sprachen zu unterstützen. In der Regel verfügen sie nur über ein paar KB RAM.
Diese höheren Sprachen sind auch nicht zum Schreiben von Interrupt-Handlern und dergleichen mit niedriger Latenzzeit ausgelegt. Es ist nicht ungewöhnlich, dass ein Mikrocontroller-Interrupt-Handler hunderte oder tausende Male pro Sekunde aufgerufen wird und jedes Mal benötigt wird, um seine Aufgabe in Dutzenden von Mikrosekunden oder weniger auszuführen.
quelle
Mit der Sprache Lua können Sie einige Funktionen programmieren. Tatsächlich ist Lua eine Sprache mit mehreren Paradigmen. Wikipedia behauptet, dass es sich um eine "scripting, imperative, funktionale, objektorientierte, prototypbasierte" Sprache handelt. Die Sprache erzwingt kein einziges Paradigma, sondern ist flexibel genug, um es dem Programmierer zu ermöglichen, jedes Paradigma zu implementieren, das auf die Situation anwendbar ist. Es wurde von Schema beeinflusst.
Zu den Merkmalen von Lua gehören erstklassige Funktionen , lexikalisches Scoping und Verschlüsse sowie Coroutinen , die für die funktionale Programmierung nützlich sind. Sie können sehen, wie diese Funktionen im Lua-Benutzer-Wiki verwendet werden, das eine Seite enthält, die der funktionalen Programmierung gewidmet ist . Ich bin auch auf dieses Google Code-Projekt gestoßen , habe es aber nicht verwendet (es wird angeblich von Haskell beeinflusst, einer anderen Sprache, die Sie erwähnt haben).
eLua ist eine Implementierung, die für eine Reihe von Entwicklungsplatinen für die Architekturen ARM7TMDI, Cortex-M3, ARM966E-S und AVR32 konfiguriert ist. Sie ist Open Source, sodass Sie sie für Ihre eigene Plattform konfigurieren können. Lua ist in ANSI C implementiert und die gesamte Quelle wiegt weniger als 200 kB. Daher sollten Sie in der Lage sein, es für die meisten Plattformen mit einem C-Compiler zu erstellen. Mindestens 128 KB Flash und 32 KB RAM werden empfohlen. Ich arbeite im Moment an einem PIC32-Port dafür (der sich noch in der Phase "PIC32-Karte holen" befindet).
Das Tolle an Lua ist, dass es als Klebesprache konzipiert wurde, so dass es sehr einfach ist, C-Erweiterungen für die Dinge zu schreiben, die schnell sein müssen (wie Interrupts usw.), und die dynamischen, interpretierten Funktionen der Sprache zu verwenden, um schnell zu arbeiten Entwicklung in der Programmlogik.
Lua ist keine rein funktionale Sprache, aber Sie können eine Menge funktionale Programme darin ausführen , es ist schnell und klein (im Vergleich zu anderen Skriptsprachen ) und Sie müssen Ihr Gerät nicht neu flashen, um ein Programm auszuprobieren. Es gibt sogar einen interaktiven Dolmetscher!
quelle
"Gibt es Möglichkeiten, funktionale Programmierung mit einer funktionalen Sprache auf einer MCU durchzuführen, um schwierige Probleme zu lösen?"
Ja, es gibt Wege. Der Nachteil ist jedoch, dass Sie einen 32-Bit-Prozessor, eine MMU, 128 MB RAM, eine SSD, ein RTOS und $$$ benötigen.
Mikrocontroller unterscheiden sich von Mikroprozessoren. Der Mikrocontroller ist möglicherweise nur eine 8-Bit-CPU, 1 KB RAM, 8 KB ROM, hat jedoch einen eingebauten UART, PWM, ADC usw. und kostet nur 1,30 USD.
Sie könnten also all diese Hochsprachen laufen lassen, aber die Herstellung kostet viel mehr.
quelle
Dieses Buch bietet eine Möglichkeit, mit einem leichten Gefühl von FP zu programmieren. http://www.state-machine.com/psicc2/
Für echte FP muss es jedoch möglich sein, Funktionen zur Laufzeit zu erstellen und sie über Ihr Programm zu übertragen. Hier haben wir ein Problem: Wie können wir diese konstruierte Funktion darstellen? und wie können wir diese funktion effektiv ausführen? Auf einem großen System können wir eine dynamische Kompilierung verwenden, die in einer ersten Funktionsanwendung echten Maschinencode generiert. Auf der MCU haben wir nur RAM, um sehr primitive Compiler wie den Forth-Sprachkern zu implementieren.
Die einzige Möglichkeit, FP oder OOP zu verwenden, ist die Metaprogrammierung : Schreiben Sie komplexe Funktions- / OOP- Programme, die Programme für MCU generieren (z. B. C-Quellcode oder LLVM IL). In dieser Variante sind Sie nicht an die Komplexität des Paradigmas oder der Programmiermethoden gebunden.
quelle