Hat jede Mikrocontrollerzeile eine eigene Programmiersprache / Syntax?

10

Ich habe den Arduino programmiert und mit der Programmierung des Teensy begonnen. Sie ähneln C, aber die Programmiersprache weist leichte Nuancen auf.

Zum Beispiel rufen Sie in Arduinos C eine Funktion pinMode (Pin #, Output / Input) auf, um einen digitalen Pin zu bestimmen, der entweder Signale ausgibt oder Signale empfängt. In Teensys C legen Sie das "DDR" -Register fest, das einem von vier Ports zugeordnet ist (von denen jeder eine Sammlung von Pins darstellt), die Sie gemeinsam als Eingabe oder Ausgabe festlegen ( Teensy IO-Syntax ).

Ich würde gerne wissen, ob es der Fall ist, dass Sie, wenn Sie einen für Sie neuen Mikrocontroller verwenden, effektiv eine neue "Sprache" lernen müssen. Ich habe das Wort "Sprache" in Anführungszeichen gesetzt, da trotz der Syntaxnuancen die Komponenten und deren Einrichtung in der Software grundsätzlich gleichwertig sind, z. B. bezieht sich der Begriff der Ports und Pins immer noch auf ein Terminal, über das Sie digital ausgeben / eingeben können Signale.

Im gleichen vergeblichen Diskurs: Gibt es Mikrocontroller, die nicht in Software programmiert sind, oder wird es immer eine Softwareschicht geben, die zum Programmieren des uControllers verwendet wird? Wenn letzterer, wer schreibt / liefert Dokumentation für sie?

Minh Tran
quelle
2
Die Programmiersprache für Arduino ist C ++ (nicht (nur) C) - oder vielleicht nur eine Teilmenge von C ++ (oder sogar Verarbeitung ). Es ist nicht ganz klar, aber es ist sicherlich mehr als C; Zum Beispiel hat es Klassen und einen benutzerdefinierbaren Operator + = .
Peter Mortensen
1
Es ist C ++, es kompiliert mit g ++ - avr. Technisch gesehen handelt es sich um eine freistehende C ++ - Implementierung, die die C ++ - Standardbibliothek nicht enthält (da beispielsweise dynamische Speicherzuweisung und Ausnahmen erforderlich sind). Sie können Sprachfunktionen wie Klassen und Vorlagen verwenden. Ich habe einen vorlagenbasierten Ersatz für digitalWrite () gesehen , der die gleiche Leistung wie der direkte Zugriff auf Register erzielt. Die Arduino-Methode hat einen erheblichen Aufwand.
r_ahlskog
1
Die Sprache ist die gleiche. Es ist die API, die anders ist. Wenn Sie sich von Mikrocontrollern entfernen und Desktop-Apps schreiben, treten beim Schreiben von C-Programmen für Windows, Linux und Mac genau dieselben Probleme auf. Selbst wenn Sie eine reine POSIX-API verwenden (die von allen drei Plattformen unterstützt wird), werden Sie dennoch plattformspezifische Unterschiede feststellen, wenn Sie die Einstellungen / Einstellungen des Benutzers speichern möchten.
Slebetman

Antworten:

3

Mikroprozessoren und Mikrocontroller verwenden normalerweise eine gemeinsame Architektur zwischen verschiedenen Produkt- und Herstellerlinien. Diese Architekturen definieren normalerweise einen Befehlssatz ( Befehlssatz ) auf niedriger Ebene , der allen Implementierungen gemeinsam ist. Der AC- oder C ++ - Compiler kann Bytecode generieren, der auf allen z. B. ARM-Prozessoren ausführbar ist.

Die Architektur ist jedoch nur das halbe Bild. Da es viele spezifische Speicheradressen, integrierte Peripheriegeräte, Speicherverwaltung und andere Implementierungsdetails gibt, die von der Architektur nicht berücksichtigt werden

Ein Hersteller oder Drittanbieter stellt normalerweise eine Sammlung von Quelldateien ( HDK ) bereit, die Definitionen, Portzuordnungen und Beispielcode enthalten. Normalerweise ist das HDK für C und C ++ . In der Regel ist dem HDK ein Demonstrationsboard zugeordnet (denken Sie an 500 US-Dollar Arduino). Oft sind viele detaillierte Konfigurationsarbeiten erforderlich, um die Entwicklungs- / Beispielplattform an das von Ihnen entworfene Gerät anzupassen

Das Arduino basiert auf der AVR-Architektur und wird hauptsächlich von Atmel unterstützt. Arduino hat einen Plattform-Bootloader und eine Bibliothek vereinfachter C ++ - Funktionen und -Objekte erstellt, damit Sie die Plattform mit minimalem Aufwand verwenden können. Die Arduino-Plattform und IDE wurde für Hobbyisten mit minimaler Ausrüstung entwickelt. Vor dem Arduino hatte der PIC eine ähnliche Rolle mit einer einfach zu bedienenden und billigen BASIC-Umgebung.

In einem professionellen Umfeld wird dieser Support normalerweise vom Anbieter / Hersteller bereitgestellt oder an Dritte vergeben. Sie stellen den Low-Level-Code und die Header bereit, und Sie schreiben Ihre Anwendung mit diesem HDK. In größeren Organisationen kann dies intern erfolgen. In jüngster Zeit gibt es einen Trend für Hersteller, ein offenes API / Software-Ökosystem um ihre Plattform herum aufzubauen, das die sofortige Verwendung so einfach macht wie das Arduino. Es gibt immer noch unzählige Chips mit sehr wenig Programmierunterstützung und das meiste Plattformwissen ist in der Unternehmenswelt verborgen.

krasisch
quelle
14

Die Sprache ist in diesem Fall genau die gleiche. Die Arduino-Umgebung verfügt zufällig über einige zusätzliche Bibliotheken (nur mehr C-Code), die den Zugriff auf die tatsächlichen Hardwareregister (DDRx, PORTx, INx usw.) mit etwas benutzerfreundlicheren Funktionen "umschließen". Dies erhöht den Overhead (es müssen mehr Befehle für dieselbe Operation ausgeführt werden), erhöht jedoch die Flexibilität, da es "einfach" ist, ein Programm zu schreiben, das nur diese Aufrufe verwendet, und es dann für einen anderen Chip (z. B. ein Arduino Mega) und neu auszurichten Die Bibliothek übernimmt die ordnungsgemäße Zuordnung intern.

Es gibt eigentlich keine "Standard" -APIs für einen wirklich einfachen Zugriff auf Chips verschiedener Hersteller. Der gesamte Zugriff auf niedriger Ebene erfolgt jedoch auf die gleiche Weise - Lesen und Schreiben in feste Speicheradressen -, sodass die allgemeine Zugriffsmethode zwischen verschiedenen Teilen ähnlich ist, nur die Details und Namen unterschiedlich sind. Vielleicht liefert man nur Header-Dateien mit riesigen Listen von # Defines-Registeradressen, die in Zeiger umgewandelt wurden. Oder vielleicht verwenden die Header-Dateien Strukturen, um die Dinge mit einer gewissen Hierarchie zu organisieren. Einige Hersteller bieten möglicherweise auch übergeordnete APIs an. Dies kann sehr nützlich für Peripheriegeräte sein, die komplex und schwer zu konfigurieren sind. GPIO ist sehr einfach, aber so etwas wie ein USB-Controller mit DMA-Unterstützung kann Hunderte von Registern haben.

Das Fazit lautet also: Ja, Sie müssen einige neue Registernamen lernen, aber die Sprache ist immer noch C ++ (oder C, Assembly oder vielleicht etwas Esoterischeres).

alex.forencich
quelle
4
Arduino ist nicht nur C (eigentlich C ++) - es hat einen Präprozessor, der einige Änderungen vornimmt, bevor er dem C-Compiler zugeführt wird.
Nick Johnson
Für Arduino ist es mehr als C. Es ist C ++ (oder vielleicht eine Teilmenge von C ++).
Peter Mortensen
Ist es nur natives C ++ mit Arduino-Bibliotheken oder etwas mehr?
KayleeFrye_onDeck
Die Arduino IDE führt anscheinend zusätzlich zu Standard-C ++ eine zusätzliche Vorverarbeitung durch. Die meisten IDEs tun dies nicht.
Alex. Forencich
Es ist im Grunde C ++, aber mit main()für Sie vordefiniert. Stattdessen erhalten Sie zwei Einstiegspunkte: init()und loop()(korrigieren Sie mich, wenn ich falsch liege, aber ich habe Arduino nur mit einer 20-Fuß-Stange berührt)
Slebetman
5

Sie verwirren Mikrocontroller und Compiler. Die Hochsprachen, in denen Sie ein bestimmtes Mikro programmieren können, hängen davon ab, welche Compiler für dieses Mikro verfügbar sind.

Auf der niedrigen Ebene führt das Mikro Maschinenanweisungen aus, die ein Compiler für die von Ihnen angegebene Textdatei ableitet, die Sie als "Programm" betrachten. Sie geben wirklich eine Logik an, die ausgeführt werden soll, und der Compiler findet heraus, wie die verfügbaren Maschinenanweisungen zum Implementieren dieser Logik verwendet werden. In diesem Fall ist das, was Sie programmieren, eine Funktion des Compilers, nicht des nativen Befehlssatzes des Mikros.

Sie können ein Mikro programmieren, indem Sie native Anweisungen direkt angeben. Dies erfolgt mithilfe der Assemblersprache. Wie ein Compiler ist der Assembler ein Übersetzer, der eine von Ihnen geschriebene Textdatei verwendet und als Ergebnis Maschinenanweisungen erstellt. Der Unterschied besteht darin, dass Sie in diesem Fall diese Maschinenanweisungen direkt angeben. Jede Anweisung erhält einen Namen, und Sie schreiben diese Namen anstelle der binären Opcodes, geben die Anweisungen jedoch weiterhin direkt an. Der Assembler erledigt nur das Grunzen, indem er die genaue binäre Codierung jeder Anweisung anhand des Namens und der Optionen ermittelt, die Sie in die Textdatei schreiben.

Während eine Hochsprache für sehr unterschiedliche Mikros gleich sein kann, sind die Maschinenanweisungen normalerweise nur innerhalb einer Familie verwandter Mikros ähnlich. Zum Beispiel haben alle Microchip PIC 18 (meistens) den gleichen Befehlssatz, der sich vom Basis-PIC 16 und wiederum von den 16-Bit-Teilen wie dem PIC 24 und dem dsPIC 30 und 33 unterscheidet.

Olin Lathrop
quelle
1
Der Assembler löst auch Beschriftungen für Sprunganweisungen auf, was bei manueller Ausführung sehr fehleranfällig ist.
Pete Becker
2

Die Programmiersprache ist immer noch C. Die Bibliothek des Herstellers für den Zugriff auf die Hardware ist jedoch unterschiedlich. Soweit ich weiß, gibt es keinen Standard, daher hat jeder Hersteller seine eigene API. Wenn Sie zwischen verschiedenen Herstellern portierbar sein möchten, möchten Sie möglicherweise Ihre eigene abstrakte API einführen, um mit bestimmten Implementierungen auf die Hardware zuzugreifen, die Ihre API den herstellerspezifischen Methoden zuordnen.

MrSmith42
quelle
Eigentlich ist es mehr als C. Es ist C ++ (oder vielleicht eine Teilmenge von C ++).
Peter Mortensen
2

Andere Antworten haben die Unterscheidung zwischen Hochsprachen (wie C ++) und Maschinencode getroffen, obwohl ich nicht glaube, dass dies Ihre Aussage ungültig macht, dass jedem Mikrocontroller eine 'Sprache' zugeordnet ist.

Die Unterschiede bei den Sprachimplementierungen sind nicht groß genug, um als verschiedene Sprachen klassifiziert zu werden, obwohl ich nicht zögern würde, sie in "Dialekte" zu differenzieren. Hier können zwei Ebenen der Veränderung existieren.

  1. Hochrangige Wrapper-Bibliotheken sind möglicherweise beim Hersteller oder einem Drittanbieter erhältlich
  2. Bestimmte Compiler geben möglicherweise keinen standardkonformen Code aus

Nehmen wir diese Punkte, während wir die Arduino-Plattform beobachten.

  • Die Arduino-Community bietet stark abstrahierte C ++ - Bibliotheken für AVR-Architekturchips. Diese Bibliotheken schlagen einen anderen Kontrollfluss vor als von einem typischen C ++ - Programm (z. B. das Ausblenden von main ()).
  • Unter der Haube kompiliert Arduino seinen Code mit avr-gcc, das C / C ++ - Code ausgibt. Ausnahmen werden auf AVR-Chips jedoch nicht gut unterstützt und sind fast immer deaktiviert. Wenn eine so große Funktion fehlt, verhält sich das resultierende Programm möglicherweise nicht wie ein "normales" C ++ - Programm.

Wie entscheiden Sie in diesem Wissen, wie Sie einen beliebigen Mikrocontroller programmieren? Sie haben mehrere Möglichkeiten:

  1. Suchen Sie nach von der Community erstellten Bibliotheken und IDEs für Ihren spezifischen Chip. AVR-Chips werden manchmal nur mit C entwickelt, aber das Arduino-Projekt bietet Hobbyisten eine benutzerfreundlichere Erfahrung.
  2. Finden Sie Compiler, die für Ihren speziellen Chip kompiliert werden können. Mit dem richtigen Compiler, den Datenblättern Ihres Chips und etwas Geduld können Sie Code sehr nahe am Metall schreiben.

Als Referenz finden Sie hier eine Liste der unterstützten Backends für GCC. Sie werden feststellen, dass ARM, AVR, MIPS und einige andere unterstützt werden.

Über Chips, die nicht mit 'Software' programmiert sind ...

Vielleicht möchten Sie sich mit feldprogrammierbaren Gate-Arrays (FPGAs) befassen! FPGAs werden durch Ändern der Werte von Nachschlagetabellen gesteuert, um Logikgatter zu emulieren. Dies hat per se keine entsprechende Softwareform, wird aber immer noch unter Verwendung von Hardwarebeschreibungssprachen wie VHDL und Verilog entwickelt.

Seltsame Arbeit
quelle
1

Ich schaue auf eine Leiterplatte und sehe einige Geräte zur Oberflächenmontage, einige Widerstände, Kondensatoren und LEDs. Bedeutet das, dass alle Karten mit Widerständen und Kondensatoren sowie mehreren Schichten und Leiterbahnen Grafikkarten sind, da eine dieser Karten eine Grafikkarte ist? Nee.

Hier ist ein weiteres Beispiel: Diese Webseite verwendet das englische Alphabet und englische Wörter. Also, macht die New York Times Website, macht das diese Website zur New York Times? Nein, sie haben nur dasselbe Alphabet und dieselbe Sprache, sind aber ansonsten völlig unterschiedlich.

C ist eine Allzweck-Programmiersprache, die den darunter liegenden Befehlssatz abstrahiert. Kann für Bare Metal verwendet werden, kann verwendet werden, um verschiedene und inkompatible Betriebssysteme zu erstellen, kann verwendet werden, um Videospiele zu erstellen usw. Alle verwenden dieselbe grundlegende C-Sprache, einige gängige C-Funktionen und -Konstruktionen sowie Von ihnen erstellte Funktionsaufrufe, die für die Zielanwendung spezifisch sind. Für jede dieser oder andere Plattformen, die Sie erwähnen, gibt es möglicherweise eine Reihe von Funktionen, die jemand erstellt hat. Genau wie eine Handvoll Leute, einschließlich mir, haben Ihnen die gleiche Antwort gegeben, sie aber anders geschrieben. Nehmen Sie 100 Programmierer, isolieren Sie sie voneinander und geben Sie ihnen eine Programmieraufgabe, um ein bestimmtes Problem zu lösen, ohne ihre Programmierfreiheit vollständig einzuschränken. und Sie erhalten zwischen 1 und 100 verschiedene, nicht miteinander kompatible Lösungen, wahrscheinlich nicht 1, sondern mehrere gemeinsame Themen, abhängig von ihrer Ausbildung und Erfahrung, und dann Variablennamen und Funktionsnamen, die als Satz wahrscheinlich für jede Person einzigartig sind. Nehmen Sie die gleichen Boards, über die Sie bereits sprechen, und Sie werden feststellen, dass ich mit Sicherheit meinen eigenen C-Code habe, der (mit den Arduino-Funktionen) nicht kompatibel ist, um auf ihnen ausgeführt zu werden, wie bei vielen anderen, sowie nicht kompatibel mit anderen Plattformen. Das ist das Schöne an der eingebetteten Bare-Metal-Programmierung. Sie sind in keiner Weise eingeschränkt. Sie müssen nicht innerhalb der Standardbibliotheksaufrufe des Betriebssystems oder der begrenzten Regeln usw. leben. wahrscheinlich nicht 1, sondern mehrere gemeinsame Themen, abhängig von ihrer Ausbildung und Erfahrung, und dann Variablennamen und Funktionsnamen, die als Satz wahrscheinlich für jeden Einzelnen einzigartig sind. Nehmen Sie die gleichen Boards, über die Sie bereits sprechen, und Sie werden feststellen, dass ich mit Sicherheit meinen eigenen C-Code habe, der (mit den Arduino-Funktionen) nicht kompatibel ist, um auf ihnen ausgeführt zu werden, wie bei vielen anderen, sowie nicht kompatibel mit anderen Plattformen. Das ist das Schöne an der eingebetteten Bare-Metal-Programmierung. Sie sind in keiner Weise eingeschränkt. Sie müssen nicht innerhalb der Standardbibliotheksaufrufe des Betriebssystems oder der begrenzten Regeln usw. leben. wahrscheinlich nicht 1, sondern mehrere gemeinsame Themen, abhängig von ihrer Ausbildung und Erfahrung, und dann Variablennamen und Funktionsnamen, die als Satz wahrscheinlich für jeden Einzelnen einzigartig sind. Nehmen Sie die gleichen Boards, über die Sie bereits sprechen, und Sie werden feststellen, dass ich mit Sicherheit meinen eigenen C-Code habe, der (mit den Arduino-Funktionen) nicht kompatibel ist, um auf ihnen ausgeführt zu werden, wie bei vielen anderen, sowie nicht kompatibel mit anderen Plattformen. Das ist das Schöne an der eingebetteten Bare-Metal-Programmierung. Sie sind in keiner Weise eingeschränkt. Sie müssen nicht innerhalb der Standardbibliotheksaufrufe des Betriebssystems oder der begrenzten Regeln usw. leben. Nehmen Sie die gleichen Boards, über die Sie bereits sprechen, und Sie werden feststellen, dass ich mit Sicherheit meinen eigenen C-Code habe, der (mit den Arduino-Funktionen) nicht kompatibel ist, um auf ihnen ausgeführt zu werden, wie bei vielen anderen, sowie nicht kompatibel mit anderen Plattformen. Das ist das Schöne an der eingebetteten Bare-Metal-Programmierung. Sie sind in keiner Weise eingeschränkt. Sie müssen nicht innerhalb der Standardbibliotheksaufrufe des Betriebssystems oder der begrenzten Regeln usw. leben. Nehmen Sie die gleichen Boards, über die Sie bereits sprechen, und Sie werden feststellen, dass ich mit Sicherheit meinen eigenen C-Code habe, der (mit den Arduino-Funktionen) nicht kompatibel ist, um auf ihnen ausgeführt zu werden, wie bei vielen anderen, sowie nicht kompatibel mit anderen Plattformen. Das ist das Schöne an der eingebetteten Bare-Metal-Programmierung. Sie sind in keiner Weise eingeschränkt. Sie müssen nicht innerhalb der Standardbibliotheksaufrufe des Betriebssystems oder der begrenzten Regeln usw. leben.

Sie können wählen, und ein hoher Prozentsatz der Leute spielt in einer anderen Sandbox, anstatt Ihre eigene zu bauen, was bedeutet, dass Sie die Arduino-GUI und ihre C-Bibliotheken verwenden.

Sie können denselben PC verwenden und verschiedene Versionen von Windows it, Linux, bsd und einer Wäscheliste anderer Betriebssysteme ausführen, die auf einer bestimmten Ebene C verwenden, deren Funktionsaufrufe jedoch nicht miteinander kompatibel sind. Dieselbe Hardware und inkompatibles C, das sich auf unterschiedliche Hardware und dieselbe Sprache erstreckt, können kompatiblen oder inkompatiblen Code enthalten. Die Sprache macht sie in keiner Weise kompatibel.

C wird auf diesen eingebetteten Plattformen verwendet, da dies die übliche Praxis ist. Es gibt keine andere Sprache, die C dafür ersetzen kann. Der erste Schritt für einen neuen Prozessor ist natürlich die Montage, dann ist fast immer C der nächste, dann vielleicht andere, wenn er leistungsfähig genug ist, um ein Betriebssystem (Linux, BSD usw.) auszuführen. C wurde erfunden und hoffte, das damalige Problem der Portierung von Code über Plattformen hinweg zu lösen. Solange Sie über ein Betriebssystem verfügen, das ein C-kompatibler Compiler ist, der Code erstellt, der auf einem Betriebssystem ausgeführt wird, wird die Standard-C-Datei ausgeführt Operationen und printf und solche Dinge. Aber Bare Metal ist eine andere Geschichte, es gibt kein Betriebssystem, es gibt oft keine Vorstellung von einem Dateisystem oder einer Anzeige, aber nach gängiger Praxis gibt es wahrscheinlich einen C-Compiler, der C an seinen Wurzeln in eine zielspezifische Assemblersprache verwandelt.

Oldtimer
quelle
Für Arduino ist es mehr als C. Es ist C ++ (oder vielleicht eine Teilmenge von C ++).
Peter Mortensen
1

Um Ihre zweite Frage zu beantworten, impliziert der Begriff "Mikrocontroller", dass der Chip eine CPU und einen RAM (und wahrscheinlich einen ROM) an Bord hat. Auf allen Mikrocontrollern wird Software ausgeführt - deshalb mögen wir sie.

Beachten Sie, dass (fast?) Alle MCUs über einen C-Compiler verfügen, die grundlegende C-Sprache jedoch nicht jeden Befehl auf jedem Prozessor unterstützt. Zum Beispiel hat C Operatoren zum Verschieben nach links / rechts, aber keine Operatoren zum Drehen nach links / rechts. Das Zeigersystem von C unterstützt natürlich keine separaten Programm- und Datenadressräume (wie in einigen Harvard-Architekturen). C hat keine direkte SIMD-Unterstützung.

Compiler haben einige Optionen für den Umgang mit diesen Funktionen:

  1. Erweitern Sie die Basissprache, normalerweise mit neuen Schlüsselwörtern (z. B. nah und fern für ausgelagerte Erinnerungen).

  2. Stellen Sie intrinsische Funktionen bereit (z. B. __ror () und __rol () für die Rotation).

  3. Arbeiten Sie sie in den Optimierer ein, sodass Sequenzen von C-Operationen zu einer effizienten Anweisung kompiliert werden (z. B. Multiplizieren / Akkumulieren).

  4. Ignorieren Sie sie und lassen Sie den Benutzer Assembly-Code schreiben, wenn er nicht C-Standard-Funktionen möchte.

Die nächste Stufe sind die vom Hersteller bereitgestellten Header-Dateien, die hauptsächlich alle Register für Sie definieren. Sie könnten diese selbst herstellen, aber es ist ein großer Schmerz, wenn Sie kein Experte für diese MCU sind.

Schließlich gibt es vom Hersteller bereitgestellte Bibliotheksfunktionen, die die einfachen Aufgaben wie das Schreiben von Registern für Sie erledigen.

Ihr Beispiel mischt zwei Ebenen. DDR ist ein Makro, das sich auf ein Register bezieht. Es ist entweder als Zeigerzugriff oder als Compiler-Eigenfunktion implementiert (ich vergesse welche). pinMode () ist eine Funktion, die für Sie in das DDR-Register schreibt.

Wenn Sie von einer MCU-Zeile zur nächsten wechseln, müssen Sie neue Register und neue Compiler-Macken lernen. Wenn Sie innerhalb derselben Firma bleiben, erhalten Sie möglicherweise eine ähnliche API. Verschiedene Unternehmen teilen keine APIs. Warum sollten wir Ihnen helfen, zu unseren Mitbewerbern zu wechseln? :-)

Adam Haun
quelle
1

Mikrocontroller haben auf Hardwareebene häufig unterschiedliche Mikrocodes. Um uns vor der Eingabe von Maschinencode (dh Anweisungen in Form von Zahlen - jede repräsentiert den rohen Mikrocode des Mikrocontrollers) oder im symbolischen Assembler (der eine mnemonische Bezeichnung für jede Maschinencode-Anweisung bereitstellt) zu schützen, werden tragbare Hochsprachen verwendet.

C und Forth sind absichtlich so konzipiert, dass sie problemlos auf verschiedene Maschinencodesätze übertragen werden können.

Wenn Sie also C auf dem Arduino und C auf dem Teensy verwenden, verwenden Sie in beiden Fällen C.

Wenn Sie Forth auf dem Arduino und Forth auf dem Teensy verwenden würden, würden Sie Forth in beiden Fällen verwenden.

Manchmal veranlassen zusätzliche Hardwarefunktionen die Person (oder Gruppe), die die Sprache auf die neue Hardware portiert, einen vorgefertigten Code zu schreiben, damit Sie auf die neuen Funktionen der Hardwareplattform zugreifen können, ohne viel Code auf niedriger Ebene schreiben zu müssen du selber.

Diese Bibliotheken (in C) oder Wörterbücher (in Forth) können einige hardwarespezifische Funktionen oder Wörter enthalten.

Euan M.
quelle