Sida 1 av 1

Sqrt på Cortex-M3

Postat: 10 juli 2011, 16:15:35
av Korken
Godagens!

Jag slåss fortfarande med att få floats att fungera 100%.
När jag gör en sqrtf så får jag errorn nedan och jag har ingen aning om hur jag ska fixa detta.
Compiling...
/usr/local/CodeSourcery/bin/arm-none-eabi-gcc -mcpu=cortex-m3 -mthumb --no-builtin-memcpy --no-builtin-memset -std=gnu99 -O1 -g -c ./source/startup.c ./source/system_LPC17xx.c ./source/main.c ./source/misc.c ./source/leds.c ./source/timer.c ./source/uart.c ./source/pwm.c ./source/gps.c ./source/i2c.c ./source/itg3200.c ./source/bma180.c
Done!
Linking...
/usr/local/CodeSourcery/bin/arm-none-eabi-gcc -mcpu=cortex-m3 -mthumb --no-builtin-memcpy --no-builtin-memset -T link.T -Wl,--build-id=none startup.o system_LPC17xx.o main.o misc.o leds.o timer.o uart.o pwm.o gps.o i2c.o itg3200.o bma180.o -o main.elf
main.o: In function `main':
/media/FCB7-6FF5/Quadrocopter/Koder/Quad_code/./source/main.c:33: undefined reference to `sqrtf'
collect2: ld returned 1 exit status
make: *** [main.elf] Error 1
Hat någon en ide? :humm:
Samma sak händer med andra funktioner.
Men multiplikation och division fungerar.

Min Makefil:
CC = /usr/local/CodeSourcery/bin/arm-none-eabi-gcc
COMMON = -mcpu=cortex-m3 -mthumb --no-builtin-memcpy --no-builtin-memset
CFLAGS = $(COMMON) -std=gnu99 -O1 -g
LDFLAGS = $(COMMON) -T link.T -Wl,--build-id=none
DIR = ./source/
SRCC = $(DIR)startup.c $(DIR)system_LPC17xx.c $(DIR)main.c $(DIR)misc.c $(DIR)leds.c
SRCC += $(DIR)timer.c $(DIR)uart.c $(DIR)pwm.c $(DIR)gps.c $(DIR)i2c.c $(DIR)itg3200.c
SRCC += $(DIR)bma180.c
SRCO = startup.o system_LPC17xx.o main.o misc.o leds.o timer.o uart.o pwm.o gps.o i2c.o
SRCO += itg3200.o bma180.o

all: clean main.elf

main.o: $(SRC)
@echo "Compiling..."
$(CC) $(CFLAGS) -c $(SRCC)
@echo "Done!"

main.elf: main.o
@echo "Linking..."
$(CC) $(LDFLAGS) $(SRCO) -o main.elf
@echo "Done!"

clean:
@echo "Cleaning..."
rm -f *.o *.elf

Re: sqrt på Cortex-M3

Postat: 10 juli 2011, 16:33:14
av rehnmaak
Jag tror du behöver lägga till -lm för att länka med matte rutinerna.

Re: sqrt på Cortex-M3

Postat: 10 juli 2011, 16:43:55
av sodjan
http://www.codesourcery.com/sgpp/portal ... cslibc.pdf

"CSLIBC, The CodeSourcery C Library"

Sidan 19:
This chapter documents the mathematical functions provided by CSLIBC.
In addition to including math.h in your source code, you must link with
the math library (-lm) to use the functions listed in this chapter.

Re: Sqrt på Cortex-M3

Postat: 10 juli 2011, 20:55:04
av Korken
Oj, glömde skriva att jag har testat med -lm och att länka biblioteket direkt utan att det har hjälpt.
Men tack för länken sodjan. :)

Re: Sqrt på Cortex-M3

Postat: 10 juli 2011, 22:17:52
av rehnmaak
Du skulle kunna kolla att det biblioteket verkligen innehåller sqrtf()

kör objdump -t /sökväghär/libm.a | grep sqrtf

Re: Sqrt på Cortex-M3

Postat: 11 juli 2011, 10:13:15
av Korken
Har kollat det nu och den finns där.
Jag har nu skrivit egna funktioner för det, men man tycker att det borde fungera.

Re: Sqrt på Cortex-M3

Postat: 11 juli 2011, 10:34:01
av sodjan
> Oj, glömde skriva att jag har testat med -lm

Jag är inte helt säkert på hur sådant här fungerar, men om du använder
-lm switchen, borde inte det synas i make filen !?

Googlade lite till och hittade bl.a :
http://stackoverflow.com/questions/9068 ... g-in-xcode
I've been reading that by default there is an -mthumb compiler flag which reduces code size by 35%.
However, in a floating-point calculation intensive app like mine, this is not an good option, like apple says.
I'd like to try it out if it changes anything.
Har du provat med "-marm" istället för "-mthumb" ?

Se även : http://stackoverflow.com/questions/2057 ... -thumb-vfp

Och : http://free-electrons.com/doc/arm-linux.odp (Speciellt bild 19 och 20).

"-mthumb-interwork" verkar också ha med detta att göra...

EDIT: La till en PDF av ODP'n ifall du inte kan läsa OO filer...