Frage

Ich arbeite an einem eingebetteten Systeme Projekt und haben sich zu einem Thema des Compilers laufen im Paradigm C ++ IDE programmatisch eingebettet ist. Ich möchte in der Lage sein Gebäude zu automatisieren.

Der Prozessor ist die AMD186ES. Ich bin nicht mit dem Betriebssystem arbeiten - nur BareMetal Sachen. Ich brauche 16-Bit-8086 Real-Modus-Code-Maschine von C ++ zu generieren.

Meine googeln zeigt an, dass G ++ solchen Code bauen.

Meine Fragen sind:

Can g ++ konfiguriert wird diesen Maschinencode zu bauen?

Gibt es andere C ++ Compiler, die es auch tun können?

War es hilfreich?

Lösung

Ich bin derzeit Gnu as (Teil binutils und den Assembler verwendet für gcc) mit und ich habe erfolgreich 16bit Assembler-Code mit dem folgenden worden Montage:

as <file>
ld --oformat binary -Ttext 0x0 -e start <file>

mit meinen Assembly-Dateien anfangen mit:

.code16
.globl start
.text
start:

seit seiner Ebene binäre die Linien weggelassen,

.globl start
start:

wird lediglich eine Warnung ergeben, obwohl flache Binärdateien keinen Einstiegspunkt benötigen.


etwas, das ich auf die harte Weise gelernt;

-Ttext 0x0

ist von entscheidender Bedeutung, da sonst die .text Segment außerhalb von 16bit geschoben wird Adressbereich (fragen Sie mich nicht warum)

Ich persönlich bin nach wie vor Montag lernen, so ist dies nur meine Art und Weise, die nicht unbedingt der beste Weg.


EDIT: Wenn Sie Boot-Code schreiben, sollten Sie ändern

-Ttext 0x0

-Ttext 0x7c00

Dies wird Ihre Speicheradressen von 0x7c00 Offset da Boot-Code in der Regel bei 0x7c00 vom BIOS geladen wird.

Andere Tipps

Ihre beste Wette ist wahrscheinlich OpenWatcom , die eine C ++ Compiler enthält. Zurück in den frühen bis Mitte der 90er Jahre, ich glaube, das war das beste C / C ++ Compiler um. Es war Open-Source vor ein paar Jahren.

nicht Ihren Chip-Anbieter (AMD, glaube ich) haben keine Hinweise auf Compiler für den Chip?

Wenn nicht, können Sie in der Lage sein, einige 16-Bit-DOS-Compiler verwenden - aber Sie werden mehrere potenzielle große Probleme haben:

  1. immer eine Bibliothek für den Compiler, die nicht abhängig von der BIOS oder MS-DOS
  2. ist
  3. Debuggen
  4. Linker für eingebettete Systeme haben in der Regel spezifische Support-Code in bestimmten Speicherbereichen für die Lokalisierung. Das ist in der Regel nicht in Compiler für DOS enthalten, aber Sie können in der Lage sein, eine Art von Linker / Locator zu finden, die den Trick für Sie tun.

Ein paar Compiler, die noch unterstützt werden und 16-Bit-Code generieren, sind:

Die google-Suche eine Reihe von Links zeigt für gcc oben als Cross-Compiler zu setzen. Um es etwas anderes als ein Standard-ELF-Binaries Ziel Sie die Ausgabe frig können. Dieser Link bespricht die Standardbibliotheken ohne und das Ausgabeformat anpassen. Sie können einige Geigen tun müssen, um es an die Arbeit.

Als Alternative openwatcom.org hat eine Open-Source-Version des Watcom C-Compiler, der Lage sein, könnte auch zu tun, was Sie wollen.

Die jüngsten per 2014 dev86 .

Es gibt einen Patch für GCC 4.3: New back-End-IA16: 16-Bit-Intel-x86

Und hier ist ein Update für sie . Beachten Sie, dass es wahrscheinlich nicht sehr gut funktioniert, zum Beispiel, sagt der aktualisierte Beitrag: „Konstruktoren und Destruktoren werden nun unterstützt, aber aus irgendeinem Grund sie   nur auf der elks Konfiguration arbeiten. "

Dieser Docker Behälter hat einen Build davon: https: // registry.hub.docker.com/u/ysangkok/ia16-gcc-rask

Ich habe es nicht geschafft DOS machen Binärdateien noch: Wie zusammenbauen ich GAS Montage und verbinden es mit dem Open Watcom C-Bibliothek?

Hier finden Sie aktuelle bcc , die ein x86-C-Compiler 16-Bit ist. Zum Beispiel gibt es auch Debian-Pakete für sie .

Nicht sicher, aber ich denke, alte Version von Borland C ++ konnte, das tun. Sie können Version 5.5 t herunterladen: hier Glück

Es ist schon eine lange Zeit, da ich bei Paradigm Sachen geschaut haben (sie sind noch?) - sind Sie sicher, dass sie keine Befehlszeilenäquivalente für den Compiler haben? Meine Erinnerung ist, dass sie auf der Borland-Compiler Toolchain gebaut wurden ... Also vielleicht eine alte Kopie von Borland Compiler könnte den Trick tun?

- Ah, ein wenig weiteren suchen, finde ich, dass Paradigm immer noch rund ist (www.devtools.com) Verkauf von X86-Tool. (Muss eine Melkkuh sein!)

Ihr professionelles Produkt enthält scripting ... Abhängig von der Menge der Arbeit, die Sie planen zu tun, es könnte sich lohnen, den sauren Apfel beißen und ihr volles Angebot kaufen ...

Viel Glück.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top