ARM-DevCpp: Unterschied zwischen den Versionen

Aus der Mikrocontroller.net Artikelsammlung, mit Beiträgen verschiedener Autoren (siehe Versionsgeschichte)
Wechseln zu: Navigation, Suche
Zeile 59: Zeile 59:
* Karteikarte '''Allgemein''': Der Projekt-Type muss ''Win32 Konsole'' sein,
* Karteikarte '''Allgemein''': Der Projekt-Type muss ''Win32 Konsole'' sein,
* Karteikarte '''Dateien''': Auf jede Datei klicken und die Einstellungen aus der obigen Tabelle übernehmen. Meine DevC++ stürzt ab, sobal die Priorität von ''1000'' verschieden ist.
* Karteikarte '''Dateien''': Auf jede Datei klicken und die Einstellungen aus der obigen Tabelle übernehmen. Meine DevC++ stürzt ab, sobal die Priorität von ''1000'' verschieden ist.
* Karteikarte '''Parameter''': Hier muss der Controllertyp angegeben werden:  
* Karteikarte '''Parameter''': Hier muss der Controllertyp angegeben werden: ''-mcpu=arm7tdmi'' sowohl in das '''Compiler'''- als auch in das '''C++-Compiler'''-Textfeld einfügen.
''-mcpu=arm7tdmi'' sowohl in das '''Compiler'''- als auch in das '''C++-Compiler'''-Textfeld einfügen.
* Karteikarte '''Makefile''': Es muss ein externes Makefile eingefügt werden, um aus der *.elf Datei eine *.bin Datei zu erzeugen. Es kann auch gleich eine Disassemblierung veranlassen, näheres dazu weiter unten.
* Karteikarte '''Makefile''': Es muss ein externes Makefile eingefügt werden, um aus der *.elf Datei eine *.bin Datei zu erzeugen. Es kann auch gleich eine Disassemblierung veranlassen, näheres dazu weiter unten.

Version vom 22. Oktober 2005, 14:30 Uhr


Dieser Artikel beschreibt, wie man die Entwicklungsumgebung DevC++ so einstellt, dass sie mit dem GnuARM Compiler arbeitet.

Bezugsquellen

Die folgenden Schritte wurden mit DevC++ 4.9.9.2 gemacht.

DevC++ Einrichten

Zuerst muss man DevC++ mitteilen, dass auf dem System ein (weiterer) C-Compiler vorhanden ist. Dazu öffne man den Compiler-Dialog (Werkzeuge -> Compiler Optionen). Im Compiler Set konfigurieren-Abschnitt fügt man einen neuen Compiler durch betätigen der +-Taste hinzu, z.B. GNU ARM. Im folgenden ist wichtig, dass in der Auswahlliste neben der +-Taste der neu hinzugefügte Compiler ausgewählt ist (GNU ARM).

Beim Compileraufruf müssen einige Flags angefügt werden: Folgende Befehle beim Compiler-Aufruf hinzufügen ankreuzen und in das darunterliegende Textfeld folgendes Eintragen: -g -Os -std=c99. Der Code wird dann auf Größe optimiert und der C99 Standard verwendet (for (int i = 0; i<10; i++){ ... } ist erlaubt)

Ähnliches gilt für den Linker-Aufruf. Auch hier das Kächsten markieren und in das Textfeld darunter folgendes eintragen: -Tmem.ld -lc -lgcc -nostartfiles -g3 -nostdlib. Damit wird das Linkerscript mem.ld automatisch verwendet (dies ist bei Atmel's SAM7-Controller nötig).

In der Karteikarte Einstellungen sind i.A. keine Änderungen vorzunehmen. Der Compiler arbeitet einwandfrei, wenn alle Auswahlmöglichkeiten auf No stehen.

Als nächstes öffnet man die Karteikarte Verzeichnisse. Hier müssen die Verzeichnisse des Compilers eingestellt werden. Vorher ggf. vorhandene Verzeichnisse mit Löschen entfernen. In der Kartei Programmdateien das Verzeichnis für die GNU ARM Compilerdateien durch Eintragen in die Textzeile unter der Liste und anschließendem Betätigen von Hinzufügen einfügen (C:\Programme\GNUARM\bin). In der Kartei Bibliotheken muss das Verzeichnis lib eingefügt werden (C:\Programme\GNUARM\lib). Die Kartei C-Includes ist etwas umfangreicher zu ergänzen: Hier müssen die Includes für den Compiler und den Controller eingefügt werden (C:\Programme\GNUARM\include\atmel für den Controller und C:\Programme\GNUARM\arm-elf\include\ für die allgemeinen Funktionen des Compilers). Ähnliches gilt für die C++-Includes, hier ist C:\Programme\GNUARM\include\c++\3.4.3 nötig (noch nicht getestet, ggf. Unterverzeichnisse hinzufügen).

Nun ist die Umgebung schon fast fertig eingerichtet. In der Karteikarte Programme müssen nun noch die richtigen Programme ausgewählt werden: Als gcc' wird arm-elf-gcc.exe eingetragen, als g++ arm-elf-g++.exe und als gdb arm-elf-gdb.exe. Nun kann dieser Dialog geschlossen werden.

Als nächstes wird eine Vorlage gebraucht. Man erstelle ein neues Projekt (Datei->Neu->Projekt) und wähle in der Kategorie Basic Empty Project aus. Als Namen gebe man z.B. ARM-C-Vorlage an und wähle im rechten unteren Teil C-Projekt aus. Als nächstes wird gefragt, wo das Projekt angelegt werden soll. Danach wird ein leeres Projekt erzeugt.

Als erstes fügt man eine Haupt-Datei hinzu: Projekt->Neue Datei. Hier schreibt man eine Routine int main(void){ while(1); } mit einer Endlosschleife rein. Danach speichert man diese (Datei->Speichern) unter dem Namen main.c.

Nun differiert die weitere Vorgehensweise je nach Ziel-Controller:

Atmel AT91SAM7S-Serie

Für Atmel-Controller gibt es die Dateien Cstartup_SAM7.c und Cstartup.S, die zum Projekt hinzugefügt werden müssen (Projekt->Zum Projekt hinzufügen). Gute Vorlagen dieser Dateien gibt es z.B. in den AT91SAM7 Examples von Martin Thomas.

Nun sind folgende Dateien vorhanden:

Dateiname Inhalt Einstellungen bei Projekt Optionen->Dateien
Cstartup.S Assembler-Startup-Code In Kompilation Einbeziehen, Ins Linken einbeziehen, Überschreibe Build Kommando, Textfeld = $(CC) -c Cstartup.S -o Cstartup.o $(CFLAGS)
Cstartup_SAM7.c C-Startup-Code In Kompilation Einbeziehen, Ins Linken einbeziehen
main.c C-Programm In Kompilation Einbeziehen, Ins Linken einbeziehen

Als nächstes müssen noch einige Einstellungen für das Projekt vorgenommen werden: Projekt->Projekt Optionen öffnet das benötigte Dialogfenster. Hier ist folgendes Wichtig:

  • Karteikarte Allgemein: Der Projekt-Type muss Win32 Konsole sein,
  • Karteikarte Dateien: Auf jede Datei klicken und die Einstellungen aus der obigen Tabelle übernehmen. Meine DevC++ stürzt ab, sobal die Priorität von 1000 verschieden ist.
  • Karteikarte Parameter: Hier muss der Controllertyp angegeben werden: -mcpu=arm7tdmi sowohl in das Compiler- als auch in das C++-Compiler-Textfeld einfügen.
  • Karteikarte Makefile: Es muss ein externes Makefile eingefügt werden, um aus der *.elf Datei eine *.bin Datei zu erzeugen. Es kann auch gleich eine Disassemblierung veranlassen, näheres dazu weiter unten.