Listfile erzeugung mit GNUARM compiler

Gast #546051
Lesenswert?

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
Gast #546073
Lesenswert?

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".
Persönliche Seite #549468
Lesenswert?

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren