GNU ARM problem

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
Korken
Inlägg: 2230
Blev medlem: 3 februari 2006, 19:19:36
Ort: Luleå, Porsön

GNU ARM problem

Inlägg av Korken »

Godagens!

Jag skulle precis testa och köra floats på min LPC1768, men jag kan inte göra multiplikation eller division (__divsf3, __mulsf3 fattas).
Ett enkelt grep i lib mappen säger att libm.a har funktionerna jag söker, men fast jag lägger till -lm i länkaren så fungerar det inte.

Vet någon vad jag gör för fel?
Jag kör Ubuntu och har dessa:
gcc-4.5.2
binutils-2.21
newlib-1.19.0
gdb-7.2

Skriver in min Makefile här:

Kod: Markera allt

COMMON = -mcpu=cortex-m3 -mthumb
CFLAGS = $(COMMON) -std=gnu99 -O1 -g -fno-builtin-memcpy -fno-builtin-memset
LDFLAGS = $(COMMON) -nostdlib --library-path=/usr/local/arm/arm-elf/lib -lm -T link.T -Wl,--build-id=none
DIR = ./source/
SRCC =  $(DIR)startup.c $(DIR)system_LPC17xx.c $(DIR)main.c $(DIR)misc.c $(DIR)fmath.c \
		$(DIR)leds.c $(DIR)uart.c $(DIR)adc.c $(DIR)extint.c $(DIR)timer.c $(DIR)i2c.c
SRCO = 	startup.o system_LPC17xx.o main.o misc.o fmath.o leds.o uart.o adc.o extint.o \
		timer.o i2c.o

all: clean main.elf
	
main.o: main.c
	@echo "\nCompiling..."
	arm-elf-gcc $(CFLAGS) -c $(SRCC)
	@echo "Done!"

main.elf: main.o
	@echo "\nLinking..."
	arm-elf-gcc $(LDFLAGS) $(SRCO) -o main.elf
	@echo "Done!"
	
clean:
	@echo "Cleaning..."
	rm -f *.o *.elf
Tack på förhand!
SvenW
Inlägg: 1156
Blev medlem: 24 april 2007, 16:23:10
Ort: Göteborg

Re: GNU ARM problem

Inlägg av SvenW »

Jag använder ./gcc --version
gcc (Sourcery G++ Lite 2010.09-51) 4.5.1
Har inga problem med multiplikation och divison med float utan att vare sig inkludera <maht.h> eller -lm.
Men det är inte samma processor. Jag har STM32-discovery.

Men om jag vill använda libm så får jag sätta flaggan
LDLIBS+=../arm-2010.09/arm-none-eabi/lib/thumb/libm.a
dvs. använda absolutpath.

Men mitt utvecklingssystem inte är installerat enligt konstens regler utan bara nerladdat.
Men det fungerar rätt bra ändå.

Från Makefile:

Kod: Markera allt

#TC=arm-none-eabi
 TC=/home/sven/Desktop/www/CORTEX/arm-2010.09/bin/arm-none-eabi
 CC=$(TC)-gcc

all:libs src src/config.h
	$(CC) -o $(PROGRAM).elf $(LDFLAGS) \
		-Wl,--whole-archive \
			src/app.a \
		-Wl,--no-whole-archive \
			$(LDLIBS)
Användarvisningsbild
Korken
Inlägg: 2230
Blev medlem: 3 februari 2006, 19:19:36
Ort: Luleå, Porsön

Re: GNU ARM problem

Inlägg av Korken »

Jag testade det och det hjälpte inte.
Jag har nu disassemblat alla libx.a filer och ingen av de innehåller funktionerna, bara referenser till dom.

Vet någon vad jag måste importera för att få det att fungera?
SvenW
Inlägg: 1156
Blev medlem: 24 april 2007, 16:23:10
Ort: Göteborg

Re: GNU ARM problem

Inlägg av SvenW »

Vet inte om det är till hjälp, men i mitt paket (Sourcery G++ Lite 2010.09-51) finns __mulsf3 på tre ställen:

./arm-2010.09/lib/gcc/arm-none-eabi/4.5.1/libgcc.a
./arm-2010.09/lib/gcc/arm-none-eabi/4.5.1/thumb/libgcc.a
./arm-2010.09/lib/gcc/arm-none-eabi/4.5.1/thumb2/libgcc.a

samma för __divsf3
Användarvisningsbild
Korken
Inlägg: 2230
Blev medlem: 3 februari 2006, 19:19:36
Ort: Luleå, Porsön

Re: GNU ARM problem

Inlägg av Korken »

Tackar! Det hjälpte väldigt mycket!
Jag har tydligen inte de libet installerat, vilket är konstigt.

Om någon har lust så får den gärna ta en titt på min build fil för min toolchain, för jag hittar inte varför den inte lägger in libgcc.
build_script.txt
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Användarvisningsbild
Korken
Inlägg: 2230
Blev medlem: 3 februari 2006, 19:19:36
Ort: Luleå, Porsön

Re: GNU ARM problem

Inlägg av Korken »

Jag har nu lyckats fixa det libbet, men jag hittar inte de funktionerna i den.
De finns referenser till dom, men inte funktionerna i sig.

Är du säker på att de finns där i? Så det inte bara är referenserna du hittat.
SvenW
Inlägg: 1156
Blev medlem: 24 april 2007, 16:23:10
Ort: Göteborg

Re: GNU ARM problem

Inlägg av SvenW »

Tror att de finns där, men helt säker vågar jag inte vara!

Jag kör 'arm-none-eabi-nm libgcc.a > y' och tittar i filen y:

Kod: Markera allt

_arm_muldivsf3.o:
00000000 t $a
00000198 T __aeabi_fdiv
00000000 T __aeabi_fmul
00000198 T __divsf3
00000000 T __mulsf3
När jag extraherar '_arm_muldivsf3.o' ur libgcc.a och disassemblerar
'/home/sven/Desktop/www/CORTEX/arm-2010.09/bin/arm-none-eabi-objdump -d _arm_muldivsf3.o > x'
och tittar i filen x:

Kod: Markera allt

 Disassembly of section .text:

00000000 <__aeabi_fmul>:
   0:   e3a0c0ff        mov     ip, #255        ; 0xff
   4:   e01c2ba0        ands    r2, ip, r0, lsr #23
...

00000198 <__aeabi_fdiv>:
 198:   e3a0c0ff        mov     ip, #255        ; 0xff
 19c:   e01c2ba0        ands    r2, ip, r0, lsr #23
...
Så är det klart att '__aeabi_fmul' och '__aeabi_fdiv' finns där i disassemblerad form,
men '__mulsf3' och '__divsf3' saknas.

Jag antar att '__mulsf3' och '__divsf3' är aliasnamn för '__aeabi_fmul' och '__aeabi_fdiv'.
De ser ut att ha samma adresser.
Eller tolkar jag det hela helt fel?
Användarvisningsbild
Korken
Inlägg: 2230
Blev medlem: 3 februari 2006, 19:19:36
Ort: Luleå, Porsön

Re: GNU ARM problem

Inlägg av Korken »

Jag har nu jagat på detta ett tag och jag börjar ge upp.
Jag har testat allt känns det som... Jag tänkte testa en färdig toolchain, finns det någon som rekommenderas för Ubuntu?
Användarvisningsbild
jesper
Inlägg: 722
Blev medlem: 12 juni 2006, 16:04:08
Ort: Laem Mae Phim, Thailand

Re: GNU ARM problem

Inlägg av jesper »

Jag kör CodeSourcery G++ Lite. Funkar hur bra som helst på både Windows och Linux.
SvenW
Inlägg: 1156
Blev medlem: 24 april 2007, 16:23:10
Ort: Göteborg

Re: GNU ARM problem

Inlägg av SvenW »

Instämmer. Det har fungerat problemfritt för mig.

Finns färdigbyggt här:
http://www.codesourcery.com/sgpp/lite/a ... elease1802
och jag antar att det fungerar även med LPC1768.

De har några olika varianter, förmodar att det är 'barebone' arm-none-eabi som du vill ha(?).
Sedan behövs ett 'Peripheral Library' för processorn i fråga, så vitt man inte vill programmera på extremt låg nivå.

Sedan har jag haft nytta av följande sida:

http://stm32.spacevs.com/index.php?opti ... Itemid=102

Skeleton-C-projekt innhåller lite basics, makefiler och annat,
Dock vet jag inte på rak arm huruvida dessa saker passar för LPC1768.
Användarvisningsbild
Korken
Inlägg: 2230
Blev medlem: 3 februari 2006, 19:19:36
Ort: Luleå, Porsön

Re: GNU ARM problem

Inlägg av Korken »

Tackar tackar!
Det ska testas.

När det kommer till pherial libs och så vidare så använder jag det inte (lite ibland). Jag skiver all kod från grunden. :)
Användarvisningsbild
Korken
Inlägg: 2230
Blev medlem: 3 februari 2006, 19:19:36
Ort: Luleå, Porsön

Re: GNU ARM problem

Inlägg av Korken »

Nu har jag testat med CodeSourcery G++ Lite och det fungerar.
Men hittade också mitt fel. Jag hade -nostdlib flaggan i på linkern så den tog inte med de bibliotek som behövdes.
Dock när jag testade igen på min build så klagar den på lite andra saker, så stannar nog på G++ Lite.

Tackar för hjälpen! :)
Skriv svar