problema de desarrollo AVR basado en Mac

0

Ok, entonces reinstalé mi entorno de desarrollo en el mac usando la última compilación de avr-gcc (4.4.2), avr-libc y avrdude del proyecto Fink.

El problema es cuando compilo, sigo obteniendo un problema de vinculador "definición múltiple de ...".

Lo he reducido a un problema de punto flotante asociado con "libm.a" (usando strtod ()). Todas las indicaciones dicen que solo debe incluir esta biblioteca, pero no estoy seguro de cómo hacerlo en mi archivo Make (a continuación).

DEVICE     = atmega128
CLOCK      = 8000000
PROGRAMMER = -c stk600 -P usb
OBJECTS    = main.o a2d.o buffer.o gps.o nmea.o uart2.o vt100.o rprintf.o timer128.o tsip.o
FUSES      = -U hfuse:w:0x99:m -U lfuse:w:0xC2:m

AVRDUDE = avrdude $(PROGRAMMER) -p $(DEVICE)
COMPILE = avr-gcc -std=gnu99 -Wall -Os -DF_CPU=$(CLOCK) -mmcu=$(DEVICE)

all:    main.hex

.c.o:
    $(COMPILE) -c $< -lm -o $@

.S.o:
    $(COMPILE) -c $< -lm -o $@

.c.s:
    $(COMPILE) -S $< -lm -o $@

flash:  all
    $(AVRDUDE) -U flash:w:main.hex:i

fuse:
    $(AVRDUDE) $(FUSES)

install: flash fuse

load: all
    bootloadHID main.hex

clean:
    rm -f main.hex main.elf $(OBJECTS)

main.elf: $(OBJECTS)
    $(COMPILE) -lm -o main.elf $(OBJECTS)

main.hex: main.elf
    rm -f main.hex
    avr-objcopy -j .text -j .data -O ihex main.elf main.hex

disasm: main.elf
    avr-objdump -d main.elf

cpp:
    $(COMPILE) -E main.c
    
pregunta Jan de Jager

1 respuesta

2

Su makefile debería compilar cada archivo C en código de objeto, luego usar el enlazador para combinar los objetos con las bibliotecas. No necesita -lm para cada archivo compilado.

En tu makefile, estás usando $(COMPILE) como compilador y enlazador, lo que está bien para GCC, pero probablemente sea algo confuso.

all:    main.hex

.c.o:
    $(COMPILE) -c $< -o $@

.S.o:
    $(COMPILE) -c $< -o $@

.c.s:
    $(COMPILE) -S $< -o $@

main.elf: $(OBJECTS)
    $(COMPILE) -lm -o main.elf $(OBJECTS)
    
respondido por el Toby Jaffey

Lea otras preguntas en las etiquetas