Mikrocontroller mit C oder C ++ [duplizieren]

7

Ich bin sehr neugierig: Warum bevorzugen wir bei Mikrocontrollern C statt C ++? Basierend auf meinen Forschungen ist die Sprache C und Assembly die übliche Programmiersprache für diese Geräte. Ich kenne nur C ++ und Assemblersprache. Also, in diesem Fall, sollte ich anfangen, C zu lernen oder bei der Assembler-Sprache zu bleiben, und wenn ja, welchen Compiler sollte ich verwenden, weil ich nur den Turbo-Assembler kenne.

Danke und mehr Power! :)

    
Ju-chan 18.12.2011, 10:34
quelle

6 Antworten

2

C ist niedriger und tut genau das, was Sie sagen. Es ist besser an Umgebungen mit geringen Ressourcen wie Mikrocontroller angepasst.

C ++ als einige Funktionen, die zusätzliche Ressourcen (wie OOP, Ausnahme usw.) erfordert.

Außerdem verfügt der Mikrocontroller nicht über die gleichen Funktionen wie die CPU Ihres Computers. Es könnte zum Beispiel das dynamische Laden von Bibliotheken nicht unterstützen und selbst für statische Bibliotheken ist die Größe begrenzt, da Ihr Chip nicht viel Speicher hat.

Normalerweise stellen Mikrocontroller eine spezielle Eingabe / Ausgabe-Bibliothek zur Verfügung, und die stdlib ist nicht immer verfügbar.

Was Sie brauchen, ist ein Cross-Compiler speziell für Ihren Mikrocontroller. Dann können Sie Ihr Programm in C und ASM schreiben.

Wenn der Chip dies unterstützt, können Sie die stdlib neu kompilieren, um die Standard-C-Funktionen zu verwenden, und dann können Sie (einmal mehr, wenn der Chip genügend Ressourcen hat) einen C ++ - Cross-Compiler und dann die STL erstellen. Dann können Sie C ++ - Programm auf Ihrem Chip erstellen, aber das Programm wird viel mehr Gewicht als das ursprüngliche C-Programm.

    
Geoffroy 18.12.2011, 10:49
quelle
10

Einige C ++ - Funktionen wie Ausnahmen und virtuelle Funktionen können Ihrem Programm zusätzlichen Aufwand verschaffen, was in Umgebungen mit hoher Ressourcenbeschränkung unerwünscht ist. Dies reduziert die Nachfrage nach C ++ - Compilern auf solchen Plattformen. Es ist auch viel schwieriger, einen C ++ - Compiler als einen C-Compiler zu implementieren. Diese Schwierigkeit plus Mangel an Nachfrage macht es so vielen Micro-Controllern nur C Compiler zur Verfügung.

Ich würde C für Ihre Mikrocontroller-Programmierung lernen. Es ist nicht schwer, C nach dem Lernen von C ++ zu lernen, und es wird viel einfacher sein, Code als Assembler zu programmieren.

    
David Brown 18.12.2011 10:45
quelle
3

Es ist nur ein historischer Zufall und Übung (von alten Ludditen wie mir), dass uControllers "ASM" und "C" bevorzugen. Wenn Ihr Compiler C ++ in UController-Code kompilieren kann, gibt es keinen theoretischen Grund, warum ich nicht weiß warum benutze C ++.

Für mich ist es viel einfacher und natürlicher, ASM und C zu verwenden, aber Sie können das verwenden, was Sie bevorzugen, solange Ihr Compiler (und Linker, wenn Sie es verwenden) das Richtige tun kann; und Ihr Controller hat genug Speicher, um den (vielleicht größeren) kompilierten C ++ Code aufzunehmen.

    
Pete Wilson 18.12.2011 10:46
quelle
2

Mikrocontroller sind Speicher- und bandbreitenbeschränkte Verarbeitungseinheiten. Die C-Programmiersprache erzeugt einen engen Code, der hinsichtlich Größe und Geschwindigkeit der Assemblersprache nahe kommt. C ++ trägt normalerweise einen Overhead in Speicher und Geschwindigkeit. Ein anderes Problem ist die dynamische Speicherzuweisung. Objektorientiertes Design mit C ++ zu verwenden bedeutet normalerweise, Objekte dynamisch zu erstellen und zu zerstören. Eingebettete Anwendungen, die Mikrocontroller verwenden, weisen normalerweise den gesamten benötigten Speicher statisch zu und sind für die Lebensdauer der Anwendung nicht frei verfügbar.

Davon abgesehen, wenn Sie einen 32-Bit-Mikrocontroller verwenden und Ihre Anwendung komplex genug ist, um entweder viel Datenverkehr zu bewältigen oder eine signifikante Benutzeroberfläche über Touchscreen / LCD usw., C ++ (und manchmal sogar C #) ist die Sprache der Wahl.

Der von Ihnen ausgewählte Compiler hängt vom Mikrocontroller ab. Überprüfen Sie die Website des Mikrocontrollerherstellers, um die entsprechende Entwicklungswerkzeug-Suite zu verwenden.

Assemblersprache wird nur für die untersten Ebenen verwendet, wenn sie in C nicht möglich ist. Es ist schwieriger, Assemblersprachencode zu verwalten und zu portieren, daher ist es am besten, den Einsatz in der Anwendung zu minimieren.

    
shr 18.12.2011 11:09
quelle
2

Mikrocontroller sind kleine Geräte, die im Vergleich zu Computern nicht sehr leistungsfähig sind. Sie haben begrenzte Ressourcen. Erstens ist die Größe des Stapels sehr begrenzt, daher ist es nicht empfehlenswert, viele verschachtelte Funktionsaufrufe zu haben (bei einigen Geräten ist der Stapel auf einige wenige Bytes beschränkt). Zweitens ist es oft nicht möglich, dynamisch Speicher zuzuordnen (alloc, free ...), und die meisten Programmdaten müssen globale statische Variablen sein oder im Stack gespeichert sein, so dass nützliche Klassen wie std::vector nicht verfügbar wären.

Selbst wenn C ++ - Compiler für Mikrocontroller verwendet werden könnten, wäre dies nicht sehr nützlich, da die geringen Fähigkeiten dieser Geräte die einfache Verwendung dieser leistungsfähigen Sprache verbieten würden. Die Verwendung von C ist oft einfacher für einfache Aufgaben und die Größe von Mikrocontrollern ist für einfache Aufgaben geeignet.

    
neodelphi 18.12.2011 11:09
quelle
2

Es ist nur die Verfügbarkeit von Ressourcen, wirklich, wie von den anderen Plakaten erklärt. Zu der Zeit, in der Sie in ein paar virtuelle Methodentabellen und ein paar Dutzend Objektzeiger kompiliert haben, ist das ganze RAM von einem einfachen uC verschwunden!

Das heißt, ich bevorzuge C ++ auf den heutigen 32-Bit-Controllern mit 8K RAM, viel Flash, komplexen eingebetteten Peripheriegeräten und Multitasking-Bibliotheken. Nach Jahrzehnten von OO ist die Verwendung von normalem C alptraumhaft für alles, was nicht trivial ist.

Ich verwende derzeit NXP ARM-Chips & amp; Rowley Crossworks, (IDE, verwendet gcc). Ich benutze nur C für lib-Schnittstellen und Assembler für einige Treiber, der ganze Rest ist C ++.

    
Martin James 18.12.2011 12:30
quelle

Tags und Links