Aslo folgendes, ich habe mir einen LPC2148 bestellt, ist zwar noch nicht
da, wollte aber schonmal was testweise compilieren, hab bisher immer nur
avr atmega's verwendet und hab es mit dem AVR-GCC compiliert.
Das sah immer wie folgt aus:
%avrdir%\bin\avr-gcc.exe -c %progdir%\main.c -o %progdir%\main.o -Os -g
-mmcu=%2
%avrdir%\bin\avr-gcc.exe %progdir%\main.o -o %progdir%\main.elf -mmcu=%2
%avrdir%\bin\avr-objcopy.exe -j .text -j .data -O ihex
%progdir%\main.elf %progdir%\main.hex
Nicht wundern über die Variablem, ich hab mir dafür ne schöne Batch
geschriebn. Jedenfalls dachte ich, ist ja auch nen GCC also müsste es so
funktionieren.
%armdir%\bin\arm-elf-gcc.exe -c %progdir%\main.c -o %progdir%\main.o -Os
-g -mmcu=%2
%armdir%\bin\arm-elf-gcc.exe %progdir%\main.o -o %progdir%\main.elf
-mmcu=%2
%armdir%\bin\arm-elf-objcopy.exe -j .text -j .data -O ihex
%progdir%\main.elf %progdir%\main.hex
Jedoch sagt er mir nach dem mir dann der er -mmcu.. net kennt, also hab
ich erstmal testweise rausgenommen und bekomme dann aber bem 2ten Befehl
die meldung vom Linker:
d:/programme/winarm/bin/../lib/gcc/arm-elf/4.1.1/../../../../arm-elf/lib
\libc.a(
exit.o): In function `exit':
exit.c:(.text+0x28): undefined reference to `_exit'
Ich habe für das Prog folgenden Code verwendet
1
#include<arch/philips/lpc214x.h>
2
3
intmain(void)
4
{
5
inti;
6
GPIO0_IODIR|=(1<<25);// Pin 25 auf Ausgang
7
GPIO0_IOSET=(1<<25);// Pin 25 auf HIGH schalten
8
9
for(i=0;i<300000;i++){// Etwas warten
10
asmvolatile("nop");
11
}
12
13
GPIO0_IOCLR=(1<<25);// Pin 25 auf LOW schalten
14
15
while(1){// Endlos-Schleife
16
}
17
return0;
18
}
Habe mir auch das ARM-elf-GCC-Tutorial angeschaut, allerdings konnte mir
das nicht helfen, aber es verwieß auf das AVRC-GCC-Tutorial, aber alles
was ich daraus gewinnen konnte war ja schon in meiner Batch datei,
deshalb weiß ich jetzt nicht wirklich weiter.
Wenn der ARM-GCC mmcu nicht kennt muss ich ihm ja irgendwie anders sagen
was für ein ARM es ist.
Kann mir jemmand helfen ?
Danke im Voraus,
MfG Sören
Hallo Sören,
es sieht so aus, dass Du keine Start-Datei (crt0.s) eingebunden hast.
Dort ist exit definiert. Nimm das Beispiel lpc2106_blink_switch und
tausche die Datei main.c gegen Deine einfach aus und compiliere dieses
dann.
Gruß Mario
Das ist ein Assembler-File - es wird zum initialisieren des LPCbla
benötigt.
Ebenfalls ist ein Linker-File (LPC2106-ROM.ld) erforderlich. Beide
Dateien sind im Ordner build. Compilieren bitte mit make nicht mit einer
selbstgebastelten BAT-Datei. Hier der Link zum Blink-Projekt.
Zuerst mal ohne Veränderungen mit "make all" in der Console compilieren,
damit Du sicher bist, dass der Compiler richtig installiert ist.
http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/lpc_2106_blink_switch_20060629.zip
Danke für die Antwort.
Und was den Batchfile angeht, den hab ich geschrieben weil ich auch von
makefiles keine Ahnung hab.
So, ich benutzt den Dev-Cpp und hab gnuarm als compiler eingestellt wenn
ich nun versuch das projekt zu compilieren sagt er mir:
1
Compiler: arm gcc
2
Führt make... aus
3
make.exe -f "Makefile" all
4
Das System kann den angegebenen Pfad nicht finden.
5
6
ECHO ist ausgeschaltet (OFF).
7
8
"-------- begin (mode: ROM_RUN) --------"
9
10
arm-elf-gcc (GCC) 4.1.0
11
Copyright (C) 2006 Free Software Foundation, Inc.
12
This is free software; see the source for copying conditions. There is NO
13
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
14
15
"-f" ist syntaktisch an dieser Stelle nicht verarbeitbar.
16
17
make.exe: *** [sizebefore] Error 255
18
19
Ausführung beendet
Wobei ich mich jetzt frage welche datei er nicht findet, weil make kann
es ja nicht sein weil das danach nen fehler liefert.
komisch, ich bin nicht berechtigt meinen eigenen Beitrag zu editieren?
Naja egal, also ich hab mal die pfade im compiler überprüft und mir ist
aufgeallen das der Pfad zu den utils falsch war. Jetzt konnte er es
compilieren.
Wenn ich das Programm nu anpassen will das es auch unterm LPC2148 läuft
muss ich ja sicher die angabe "SUBMDL" im makefile anpassen und den
richtigen header angeben.
Muss ich auch noch die ld oder s datei gegen irgendeine austauschen ?
oder sollte das so gehen?
Hmm fast, aber jetzt sagt er mir "cannot find -lnewlib-lpc" und ich hab
nach ner newlib gesucht, hab aber weder ne .a noch ne .lib irgendwo
gefunden. Was nun ?
Das letztgenannte Beispiel sollte newlib-lpc auskommen. Testweise im
Makefile in die Zeile NEWLIBLPC = -lnewlib-lpc per Doppelkreuz davor
auskommentieren.
newlib-lpc von Aelus kommt vorkompiert mit meinem WinARM-Packet und ist
abgelegt im Standardsuchpfad. Es ist eine Sammlung von newlib-syscalls
für LPC2000 (<23xx). Das Bespiel sollte zumindest planmäßig keine
Abhängigkeit zu newlib-lpc aufweisen.
Hat funktioniert, damit bedanke ich mich nochmal bei den Leuten die mir
geholfen haben, endlich kann ich mal nen paar Testprogramme für den Arm
schreiben und mal sehen was bei rauskommt.
Aber eins würde mich noch interessieren, nämlich, wo bekomme ich die
libnewlibc-lpc.a eigentlich her ? hab se nirgendso gefunden.
MfG Sören
Soeren G. wrote:
> Aber eins würde mich noch interessieren, nämlich, wo bekomme ich die> libnewlibc-lpc.a eigentlich her ? hab se nirgendso gefunden.
Steht oben: fertige Library ist in meinem WinARM Packet enthalten
(20060606 immer noch die aktuelle "offizielle" Fassung).
Ansonsten: google -> newlib-lpc -> erster Treffer ->
http://www.aeolusdevelopment.com/Articles/download.html
Von dort Quellcode herunterladen und selbst zusammenbauen. Makefiles
liegen bei (sind aber recht "speziell", habe andere genutzt).
Funktion von newlib-lpc stellt aber gewisse Anforderungen an die
Konfiguration der Toolchain (genauer der newlib). Dies ist einer der
Gründe, warum die Konfiguration der Tools in WinARM so ist wie sie ist
und etwas von der Konfiguration anderer vorgefertigter Packete (z.B.
Yagarto) abweicht.
Achso, ich hatte gehofft das ich irgendwo die bereits compilierte .a
runterladen kann. Naja ich hoffe ich bekomme die lib wenn ich sie
brauche compiliert.
Aber trotzdem danke.
MfG Sören
Hmm, ist zwar schon ne weile her, dass der letzte Post kam, aber kann
mir einer von euch sagen, wo die ganzen Dateien von der newlib-lpc dann
hinmüssen, wenn man sie denn compiliert hat? Ich benutze GNU-ARM auf
einem Ubuntu-System (nach diesem Tutorial installiert:
http://wiki.ubuntuusers.de/GNU_arm-toolchain ), und hab ehrlich gesagt
keinen blassen Schimmer, wo die Sachen hingehören.
(Ich weis, dass es einen Weg gibt, das rauszufinden, aber bis jetzt habe
ich ihn nach einer ganzen Menge suchen nicht gefunden)
Gruß,
Mox
Eine eigene Frage?
Dieser Thread ist über 18 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.