Sida 1 av 1
GNU ARM problem
Postat: 10 maj 2011, 23:08:20
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!
Re: GNU ARM problem
Postat: 11 maj 2011, 10:20:27
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)
Re: GNU ARM problem
Postat: 11 maj 2011, 14:30:19
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?
Re: GNU ARM problem
Postat: 11 maj 2011, 17:43:14
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
Re: GNU ARM problem
Postat: 12 maj 2011, 11:22:14
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
Re: GNU ARM problem
Postat: 12 maj 2011, 18:29:23
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.
Re: GNU ARM problem
Postat: 12 maj 2011, 19:58:09
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?
Re: GNU ARM problem
Postat: 24 maj 2011, 20:03:33
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?
Re: GNU ARM problem
Postat: 24 maj 2011, 21:31:54
av jesper
Jag kör CodeSourcery G++ Lite. Funkar hur bra som helst på både Windows och Linux.
Re: GNU ARM problem
Postat: 25 maj 2011, 16:42:02
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.
Re: GNU ARM problem
Postat: 25 maj 2011, 22:16:12
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.

Re: GNU ARM problem
Postat: 1 juni 2011, 15:06:08
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!
