Hallo, ich habe folgendes Problem: Ich muss von den zu linkenden dateien listfiles erstellen, dies funktioniert jedoch nur bei dem startupcode mit dem Befehl "> xyz.lst" welcher ja assembliert wird. Wie lautet der Befehl um bei den .c dateien auch listfiles zu erstellen? hier noch meine makefile: LS = flash.ld AFLAGS = -ahls -mapcs-32 -o startup.o --defsym FLASH=1 CC = arm-elf-gcc LD = arm-elf-ld -v AR = arm-elf-ar AS = arm-elf-as CP = arm-elf-objcopy OD = arm-elf-objdump CFLAGS = -I./ -c -fno-common -mcpu=arm7tdmi -Os LFLAGS = -T$(LS) CPFLAGS = -O ihex clean: -rm startup.lst main.lst startup.o FunctionInterpreter.o self_utilities.o lpc2148.o main.o main.out main.hex main.map main.dmp all: main.out @ echo "...copying" $(CP) $(CPFLAGS) main.out main.hex rm startup.lst startup.o FunctionInterpreter.o self_utilities.o lpc2148.o main.o main.out: FunctionInterpreter.o self_utilities.o lpc2148.ostartup.o main.o $(LS) @ echo "..linking" $(LD) $(LFLAGS) -o main.out startup.o FunctionInterpreter.o self_utilities.o lpc2148.o main.o "C:\Programme\GNUARM\lib\gcc\arm-elf\4.1.1\libgcc.a" "C:\Programme\GNUARM\arm-elf\lib\libc.a" lpc2148.o: lpc2148.c $(CC) $(CFLAGS) lpc2148.c self_utilities.o: self_utilities.c $(CC) $(CFLAGS) self_utilities.c FunctionInterpreter.o: FunctionInterpreter.c $(CC) $(CFLAGS) FunctionInterpreter.c startup.o: startup.s @ echo ".assembling" $(AS) $(AFLAGS) startup.s > startup.lst main.o: main.c @ echo ".compiling" $(CC) $(CFLAGS) main.c
Das kann über eine Option für den GNU Assembler gesteuert werden CFLAGS += -Wa,-adhlns=$(subst $(suffix $<),.lst,$<) Siehe http://www.gnu.org/software/binutils/manual/gas-2.9.1/html_chapter/as_2.html#SEC10 http://svnweb.openpcd.org/trunk/openpcd/firmware/src/Makefile?rev=2&view=markup
Ich nutze dazu folgende Optionen (vgl. meine WinARM Beispiele): ... CFLAGS += -Wa,-adhlns=$(subst $(suffix $<),.lst,$<) ... AFLAGS += -Wa,-adhlns=$(<:.S=.lst) ... Bei AFLAGS beachtenswert: Ich lasse den Assembler nicht direkt aufrufen, sondern über das Compiler-Frontent (arm-elf-gcc), daher die Option -Wa, die Parameter an den Assembler "durchreicht".
Danke für die schnelle Antwort, hat super funktioniert. mfg Marco
Hi, gibt es eine möglichkeit in der Listfile auch die benötigte Größe vom RAM und Flash anzeigen zu lassen? Aktuell benutzte ich den obigen befehl: CFLAGS += -Wa,-adhlns=listfiles$(subst $(suffix $<),.lst,$<) mfg Limes
Das kannst du im Makefile einstellen. Das benötige Tool heisst arm-elf-size (bei WinARM dabei). Manual bei (3) # Tools festlegen # ... SIZE=arm-elf-size # Rest vom Makefile # ... # Finale Build-Rule # z.B. # - PROJECT kann auch TARGET heissen # - Namen der Voraussetzungen können anders heissen $(PROJECT).elf : $(ARM_COBJ) $(ARM_SOBJ) $(THUMB_OBJ) $(CRT0) Makefile $(CC) $(CFLAGS) ... $(SIZE) -A $(PROJECT).elf Wenn du die Daten in einer Datei festhalten willst, kannst du mit Redirection arbeiten z.B. "make all > makelauf_20070427_1109.txt" Wenn du ausführliche Infos brauchst, wo welche Variable liegt (DATA oder BSS) und wie gross einzelne Variablen sind, kannst du das nm Tool benutzen. Manual bei (2). Beim ARM Target heisst das Tool arm-elf-nm. Die Bedienung ist analog zur Bedienung beim AVR Target (1) (1) http://www.mikrocontroller.net/articles/AVR-GCC#Tipps_.26_Tricks und Beitrag "Re: float Berechnung erzeugt Compiler-Fehler??" (2) GNU Binary Utilities: nm http://www.gnu.org/software/binutils/manual/html_chapter/binutils_2.html (3) GNU Binary Utilities: size http://www.gnu.org/software/binutils/manual/html_chapter/binutils_6.html
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.