2014-10-21 8 views
5

Próbuję zbudować projekt dla Cortex-M4F. Chip ma jednostkę FPU, więc buduję z -mfpu=fpv4-sp-d16 -mfloat-abi=hard i nie używam żadnych bibliotek w celu zaoszczędzenia miejsca, więc robię -nostdlib -fno-builtin.niezdefiniowane odniesienie do `__aeabi_ddiv 'i przyjaciół - budowanie bez stdlib ale z -mfloat-abi = trudne

Teraz chcę użyć operacji zmiennoprzecinkowych, ale robiąc to pojawia się błąd linkera:

led1642gw_gain.c:(.text.led_calculateGain+0xc): undefined reference to `__aeabi_f2d' 
led1642gw_gain.c:(.text.led_calculateGain+0x24): undefined reference to `__aeabi_ddiv' 
led1642gw_gain.c:(.text.led_calculateGain+0x36): undefined reference to `__aeabi_dsub' 
led1642gw_gain.c:(.text.led_calculateGain+0x48): undefined reference to `__aeabi_ddiv' 
led1642gw_gain.c:(.text.led_calculateGain+0x54): undefined reference to `__aeabi_d2f' 
led1642gw_gain.c:(.text.led_calculateGain+0x9e): undefined reference to `__aeabi_f2d' 
led1642gw_gain.c:(.text.led_calculateGain+0xb6): undefined reference to `__aeabi_ddiv' 
led1642gw_gain.c:(.text.led_calculateGain+0xc8): undefined reference to `__aeabi_dsub' 
led1642gw_gain.c:(.text.led_calculateGain+0xda): undefined reference to `__aeabi_ddiv' 
led1642gw_gain.c:(.text.led_calculateGain+0xe6): undefined reference to `__aeabi_d2f' 
led1642gw_gain.c:(.text.led_calculateGain+0x10c): undefined reference to `__aeabi_f2d' 

dlaczego tak jest? Jeśli dobrze rozumiem, nie powinno się polegać na funkcjach bibliotecznych, ale używać do tego rodzimych instrukcji FPU ARM.

Odpowiedz

4

Twój rdzeń obsługuje instrukcje zmiennoprzecinkowe z jedną precyzją, ale twój kod działa z zmiennoprzecinkową podwójną precyzją.

Można zauważyć, że wszystkie brakujące elementy __aeabi mają wspomniany "d" (jak w podwójnym).

Jeśli w swoim kodzie występują literały zmiennoprzecinkowe, według normy C są one uważane za podwójne. Możesz zmusić je do zakresu o pojedynczej precyzji, dodając na końcu literału f lub F.

2.13.3 Floating literals: The type of a floating literal is double unless explicitly specified by a suffix. The suffixes f and F specify float...

Powiązane problemy