anibarro
16/01/2006, 04:40
Buenas, tengo un problema y por mas vueltas que le he dado, no encuentro solución, a ver si alguien puede ayudarme :$
Tengo un programilla funcionando bien usando SDL y floats. Cambié casi todos los floats por sll para ver si ganaba algo de velocidad, pero lo que enlentece son las funciones de acceso a la pantalla, así que lo cambié para usar el SDK oficial y ver que pasaba.
El problema es que no llegaba a mostrar nada por pantalla porque las funciones previas tenian resultado erroneos, cosa que no entendía porque sólo había tocado las funciones de entrada/salida, el resto estaba tal cual.
Entonces hice la prueba y resultó que los floats tenían valores que no se parecían a los que yo les daba. Por ejemplo, simplemente con hacer un sprintf(texto,"%f", 1.0), me escribe 0.007813, mientras que con sprintf(texto,"%d", 1); sale bien el 1.
Usar sll sería una solución, pero no puedo convertir sll en floats, porque pasa lo mismo, al hacer un sll2float(SLL_CONST_1), me sale 0.007813.
Estoy usando el DevkitARM17, arm-elf-gcc 4.0.2 y en el make tiene estas opciones:
-marm \
-mtune=arm920 \
-march=armv4t \
-mapcs \
-O2 \
-fomit-frame-pointer \
-finline-functions \
-fshort-enums \
-ffast-math \
-fshort-double \
-mstructure-size-boundary=8 \
-mno-thumb-interwork \
-Wno-multichar \
-I$(GPSDK)/include \
-I.
En el make para SDL se añade
-msoft-float
Pero aún quitándolo sigue funcionando bien y en cambio poniéndolo en el make del sdk oficial me da un montón de errore del tipo:
xxxx uses hardware FP, whereas engine.elf uses software FP
¿alguna idea? ¿Os pasa esto a vosotros?
Tengo un programilla funcionando bien usando SDL y floats. Cambié casi todos los floats por sll para ver si ganaba algo de velocidad, pero lo que enlentece son las funciones de acceso a la pantalla, así que lo cambié para usar el SDK oficial y ver que pasaba.
El problema es que no llegaba a mostrar nada por pantalla porque las funciones previas tenian resultado erroneos, cosa que no entendía porque sólo había tocado las funciones de entrada/salida, el resto estaba tal cual.
Entonces hice la prueba y resultó que los floats tenían valores que no se parecían a los que yo les daba. Por ejemplo, simplemente con hacer un sprintf(texto,"%f", 1.0), me escribe 0.007813, mientras que con sprintf(texto,"%d", 1); sale bien el 1.
Usar sll sería una solución, pero no puedo convertir sll en floats, porque pasa lo mismo, al hacer un sll2float(SLL_CONST_1), me sale 0.007813.
Estoy usando el DevkitARM17, arm-elf-gcc 4.0.2 y en el make tiene estas opciones:
-marm \
-mtune=arm920 \
-march=armv4t \
-mapcs \
-O2 \
-fomit-frame-pointer \
-finline-functions \
-fshort-enums \
-ffast-math \
-fshort-double \
-mstructure-size-boundary=8 \
-mno-thumb-interwork \
-Wno-multichar \
-I$(GPSDK)/include \
-I.
En el make para SDL se añade
-msoft-float
Pero aún quitándolo sigue funcionando bien y en cambio poniéndolo en el make del sdk oficial me da un montón de errore del tipo:
xxxx uses hardware FP, whereas engine.elf uses software FP
¿alguna idea? ¿Os pasa esto a vosotros?