C ++ für 8051 Mikrocontroller?

8

Könnte mir bitte jemand sagen, ob es möglich ist, einen 8051 Mikrocontroller mit einem C ++ Programm zu brennen? Ich habe versucht, online darüber zu suchen, aber ich kann nicht herausfinden, ob es möglich ist oder nicht. Keil benutzt C, aber das Programm, das ich schreiben muss, ist sehr string-intensiv und C ist ziemlich string-unfreundlich im Vergleich zu C #, was ich gewohnt bin zu verwenden. Im Moment versuche ich, den Code in C zu schreiben, aber es wird wirklich unordentlich, also wäre ich sehr erleichtert, wenn ich es stattdessen in C ++ schreiben könnte.

Ich würde einen C ++ - Compiler benötigen, der eine Hex-Ausgabedatei erstellt, die dann auf den Mikrocontroller gebrannt werden kann. Hat jemand von etwas gehört, das ich benutzen könnte? Außerdem verwendet C eine Header-Datei, mit der Sie auf Ports verweisen können, aber als ich herauszufinden versuchte, ob diese Header-Datei auch in C ++ verwendet wird, konnte ich keine Informationen darüber finden.

Zusatz: Der Mikrocontroller, den ich verwende, ist ein Atmel AT89C51 mit 4K Bytes reprogrammierbarem Flash-Speicher und 128 x 8-Bit internem RAM. Dies ist eigentlich für einen Roboter für ein Projekt an der Universität und die Codierung benötigt eigentlich keine OOP. Es hat nur viele Nachschlagetabellen im 2D-String-Array-Format. Der einzige Grund, warum ich C ++ in Erwägung ziehen wollte, war, dass chaotisch manipulierende Strings (aufgrund meines Mangels an Fachwissen in C) zu kommen schienen.

Und weiß jemand über die Header-Datei? C verwendet #include reg51.h, aber ich habe versucht herauszufinden, ob das für C ++ funktioniert und konnte nichts finden.

    
CodeConfused 22.05.2009, 19:39
quelle

11 Antworten

11

Ich würde in Frage stellen, ob das überhaupt eine gute Idee ist. Ich verstehe die Gründe dahinter, C ++ im allgemeinen Fall über C verwenden zu wollen, aber im Falle eines 8-Bit-Mikrocontrollers der Harvard-Architektur würde ich davor warnen.

Zu beachten sind:

  • Die Debugging-Unterstützung auf Quellcodeebene liegt irgendwo zwischen arm und unmöglich.
  • Laufzeit-Overhead von OOP auf einer 8-Bit-Maschine. Ich würde dringend empfehlen, ein ernstes Benchmarking durchzuführen, bevor Sie sich an ein Tool wenden.
  • Speicher ist in eingebetteten Systemen nicht billig, und Sie werden zweifellos einige Adressraumbeschränkungen haben.

Auch wenn Sie wirklich eine ernsthafte String-Behandlung durchführen, würde ich empfehlen, die C-Standard-Bibliothek anstelle einer String-Objekt-Bibliothek zu verwenden, weil Sie eine bessere Kontrolle über die In-Place-Substitution haben der Code.

Bitte posten Sie etwas über den Mikrocontroller, den Sie verwenden möchten (Datenspeicher, Programmspeicher) und ob Leistungsanforderungen erfüllt werden müssen, damit wir etwas konkreter helfen können.

    
mikelong 26.05.2009 19:04
quelle
4

IAR-Systeme haben einen 8051-Compiler , der C ++ nativ kompilieren kann (keine Übersetzung in C), Das Debuggen von Quellcode sollte ebenfalls kein Problem darstellen.

    
JesperE 22.05.2009 21:13
quelle
2

Es gibt einen kommerziellen Compiler von ceibo .

Wenn Sie jedoch c ++ (insbesondere STL-Zeichenfolge) verwenden können, hängt davon ab, wie viel Ressourcen (ROM und RAM) Sie haben.

Es gibt eine 8051-Seite mit Foren, Tutorials und Downloads, wo Sie möglicherweise mehr Ressourcen für die Programmierung des 8051 bekommen.

    
lothar 22.05.2009 19:47
quelle
1

Vielleicht möchten Sie zusätzliche Details über die Art des Programms, das Sie auf diesem Mikrocontroller ausführen möchten, bereitstellen:

Sie haben in Ihrem Beitrag sowohl C ++ als auch C # erwähnt, die sicherlich nicht ideal für die Verarbeitung von Strings auf einem Mikrocontroller geeignet sind, ganz zu schweigen von Ihnen Überlegen Sie sich wahrscheinlich eine starke Nutzung der STL, die die Größe der ausführbaren Datei weiter erhöhen würde?

Was genau sind Ihre primären Einschränkungen (RAM, CPU, ROM usw.)?

Wenn Sie wirklich denken, dass Sie diese Zeichenfolgenverarbeitung in einer OO-Art durchführen müssen, sollten Sie einen leichtgewichtigen eingebetteten Skript-Interpreter auf dem Controller ausführen, damit Sie dann Ihre Zeichenfolgenverarbeitungsroutinen mit der Skriptsprache bereitstellen können. während der Interpreter selbst wäre ANSI C in eine HEX-Datei kompiliert (z. B. lua oder nasal würden beide als geeignete Kandidaten erscheinen).

Beachten Sie jedoch, dass eine Skriptsprache wie lua normalerweise ungefähr 100kb + Overhead im Raum verursacht, Nasal etwas leichter ist und sich möglicherweise auf 50-70 kb kompiliert, wenn Sie bestimmte Erweiterungen deaktivieren.

Es gibt auch andere Skript-Interpreter, die speziell für die Verwendung auf eingebetteten Plattformen gedacht sind.

    
none 22.05.2009 20:21
quelle
1

IAR scheint ein C / C ++ - Compiler für 8051 ein C / C ++ - Compiler für 8051 . - Aber in voller Offenlegung habe ich nur Keils C-Compiler für die 8051-Entwicklung verwendet.

Was Ihre Header-Datei betrifft: Die Header-Dateien werden oft entweder vom IDE-Hersteller oder vom Hardwarehersteller verteilt und stellen oft eine symbolische Darstellung Ihrer Registerkarten bereit. Eine bescheidene Menge an massaging kann erforderlich sein, um eine C-basierte Header-Datei in ein C ++ - Projekt zu integrieren. - Wenn Sie IDEs / Compiler wechseln wollen, können Sie oft erwarten, dass Sie Ihren Quellcode etwas massieren müssen, um den neuen Compiler unterzubringen. (Lesen: Der Zugriff auf C-Code von einer C ++ - Code-Basis führt oft dazu, dass ich für einen Tag innehalte, um es richtig zu machen.)

    
Nate 23.05.2009 15:53
quelle
0

Es gibt mehrere kommerzielle Compiler zur Verfügung. Die Nummer 1 in der Branche ist von Keil Software .

    
NotMe 22.05.2009 21:11
quelle
0

Andere haben erwähnt, dass es C ++ - Compiler für den 8051 gibt. Ich schätze, Ihr Hauptproblem bei diesen wird der Preis sein. Viele Unternehmen lassen Sie die Assembly kostenlos schreiben, berechnen aber den C- oder C ++ - Compiler. Wir sprechen hier wahrscheinlich ein paar hundert Dollar.

Meine Hauptfrage ist, was in Ihrem Code "unordentlich" wird? Welche Funktionen versuchen Sie in C ++ zu verwenden, die in C unordentlich werden? Einige der Features in C ++ lassen sich nicht gut in solch eine minimale eingebettete Umgebung übersetzen (Streams, Konstruktoren, Destruktoren usw.). C kann viele der objektorientierten Typfunktionen mit Strukturen ausführen. Andere Funktionen sollten nur vermieden werden (alles mit dynamischer Speicherverwaltung).

Ich würde mich darum bemühen, dass es in C funktioniert, bevor ich viel Geld ausgeben kann und Code bekomme, der groß, langsam und unhandlich ist.

    
Stephen Friederichs 23.05.2009 15:18
quelle
0

Warum nicht eine C-String-Bibliothek verwenden? Wie bstrlib oder ähnlich? C ++ ist einfach nicht das, was Sie für diesen Mikrocontroller brauchen.

    
rlbond 25.05.2009 18:41
quelle
0

Es klingt, als ob Sie einen C ++ - Compiler möchten, damit Sie std::string verwenden können. std::string benötigt einen Heap. Sie werden keinen nutzbaren Heap mit nur 128x8 Bit internem RAM haben, besonders nicht für std::string objects Beachten Sie, dass wenn Sie eine 80-stellige Zeichenfolge von einer seriellen Schnittstelle lesen, diese mehr als 60% Ihres verfügbaren RAM verbraucht. Werden Sie auch externen RAM verwenden? Wie viel?

Muss Ihre Firmware die String-Verarbeitung zur Laufzeit wirklich verarbeiten? Zum Beispiel sendet / empfängt er Befehle als Zeichenfolgen über eine serielle Schnittstelle oder eine andere Schnittstelle? Wenn dies der Fall ist, sollten Sie die Zeichenfolgenbehandlung so weit wie möglich vom Rest Ihres Codes isolieren und Tokens (Aufzählungstypen oder #definierte Integralkonstanten) an anderer Stelle verwenden. Wenn nicht, werden Sie viel weniger Probleme haben, Ihre Logik in den eingeschränkten Speicher Ihres Prozessors zu passen, indem Sie Token statt Strings verwenden.

Wenn Sie eine String-Analyse durchführen müssen, sollten Sie besser einen Zustandsautomaten schreiben, der Zeichen nacheinander verarbeitet, so dass Sie nicht mit vollständigen Zeichenfolgen arbeiten müssen. Wiederum sind 128 Bytes nicht viel Platz für die String-Verarbeitung.

    
bk1e 25.05.2009 18:32
quelle
0

Ja, Sie können den Speicher des 8051-Mikrocontrollers mit einem C ++ - Programm brennen und es gibt auch einige kostenlose Compiler, mit denen Hex-Dateien erstellt und dann an den Mikrocontroller gesendet werden können. Sie können alle Informationen über den Prozess der Programmierung von Mikrocontroller in einem ausführlichen Artikel mit Tutorials finden , Compiler, Simulatoren usw.

    
Ezu 24.04.2013 08:01
quelle
0

Sie könnten versuchen, den C ++ - Code in C-Code zu konvertieren und ihn dann mit Ihrem vorhandenen C-Compiler zu kompilieren.

Sie sollten in der Lage sein, ein Makefile zu erstellen, das den C ++ - Compiler aufruft und anschließend den C-Compiler ausführt.

Es ist nicht die eleganteste Lösung, aber es ist wirklich ungewöhnlich, C ++ auf kleinen Geräten wie dem 8051 zu verwenden.

Disclaimer: Ich habe das nicht wirklich versucht, also viel Glück! Wenn ich es wäre, würde ich bei C bleiben und einige robuste Funktionen für die String-Verarbeitung schreiben.

    
Adam Pierce 22.05.2009 21:46
quelle

Tags und Links