Forum: Compiler & IDEs Listfile erzeugung mit GNUARM compiler


von Marco (Gast)


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

von Stefan B. (stefan) Benutzerseite


Lesenswert?

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

von Martin Thomas (Gast)


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".

von Martin Thomas (Gast)


Lesenswert?

ups, mal wieder zu lahm...

von Marco (Gast)


Lesenswert?

Danke für die schnelle Antwort, hat super funktioniert.

mfg
Marco

von Marco (Gast)


Lesenswert?

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

von Stefan B. (stefan) Benutzerseite


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

von Marco (Gast)


Lesenswert?

Danke, hat geklappt.

mfg
Marco

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
Noch kein Account? Hier anmelden.