2014-10-21 8 views
5

Sto provando a creare un progetto per Cortex-M4F. Il chip ha una FPU, quindi sto costruendo con -mfpu=fpv4-sp-d16 -mfloat-abi=hard e non sto usando nessuna libreria per risparmiare spazio, quindi faccio -nostdlib -fno-builtin.riferimento non definito a `__aeabi_ddiv 'e amici - creazione senza stdlib ma con -mfloat-abi = difficile

Ora voglio usare operazioni in virgola mobile, ma quando si fa così ottengo un errore di linker:

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' 

Perché? Se ho capito bene, non dovrebbe fare affidamento sulle funzioni di libreria ma usare le istruzioni native FPU ARM per quello.

risposta

4

Il core supporta istruzioni in virgola mobile a precisione singola, tuttavia il codice funziona con virgola mobile a precisione doppia.

Si può notare che tutte le cose __aeabi mancanti hanno una "d" (come in doppio) menzionate.

Se si dispone di valori letterali in virgola mobile nel codice, in base allo standard C vengono considerati doppi. Puoi forzarli in un intervallo di precisione singola aggiungendo uno f o F alla fine del letterale.

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...

Problemi correlati