chips de unidad de punto no flotante STM32

3

Me gustaría saber cómo los chips STM32F2 y, a continuación, no manejan la unidad de punto flotante, realizan la operación de flotación.

Leí aquí , menciona que el punto flotante es manejado por Funciones de biblioteca, pero cuando estoy escribiendo el código de mi firmware y no incluí ninguna biblioteca para manejar esas operaciones de punto flotante.

Ejemplo: si realizo un cálculo de flotación simple

float gain = 1.2 * 1.5;

No incluí ninguna biblioteca externa, pero ¿puedo calcular el valor flotante? ¿O cuando compilo, el compilador lo manejará automáticamente por mí?

    
pregunta Tim

3 respuestas

6

En la cita, no hay ningún cálculo de fp en tiempo de ejecución, se realiza por preprocesador y se incluye en el código como un literal. Si hubiera un cálculo, sería manejado por las bibliotecas de bajo nivel del compilador, que, en el caso de GCC, vería las funciones fp fusionadas en el binario final de una versión particular de libgcc.a, dependiendo del uso de hard / soft fp . Aquí en mi sistema hay dos versiones de libgcc.a para cortex-m4:

/usr/lib/gcc/arm-none-eabi/5.3.0/armv7e-m/ softfp /libgcc.a
/usr/lib/gcc/arm-none-eabi/5.3.0/armv7e-m/fpu/libgcc.a

aviso: libgcc.a no se trata solo de fp.

    
respondido por el Ayhan
5

Cuando un microcontrolador no tiene una "FPU dura", la CPU realiza lo que se denomina "FPU suave", que básicamente utiliza aritmética de enteros para realizar operaciones de punto flotante.

Cuando se ajusta la opción "suave" al compilador "-mfloat-abi", el compilador se encarga de que las llamadas de la biblioteca hagan posible las operaciones de punto flotante suave ( source ).

Este FPU suave se explica en la respuesta a esta pregunta .

Aquí hay algunos detalles sobre el manejo de punto flotante en arquitecturas ARM.

    
respondido por el Florent
3

Como se mencionó anteriormente, el compilador lo resolverá por usted.

Es posible que deba verificar los errores del vinculador, ya que algunos compiladores no se vinculan en las bibliotecas de punto flotante de forma predeterminada, o lo harán de forma predeterminada, pero le permitirán deshabilitarlos. Por lo general, el espacio es limitado en micros pequeños, por lo que esta es una estrategia sensata del compilador. Sin embargo, es algo que debe tener en cuenta al configurar la compilación.

También debe tener mucho cuidado con las operaciones de punto flotante que realiza y dónde. Todas las operaciones de punto flotante serán muy lentas, por lo que si realiza este cálculo en un ISR de alto rendimiento, es probable que vaya a agotar su presupuesto de tiempo. En general, se puede considerar que la multiplicación es más lenta que la suma / resta y que la división es más lenta nuevamente.

En ausencia de soporte de punto flotante, considere usar valores enteros con un punto binario. Consulte la entrada de Wikipedia sobre la escala de puntos binarios para obtener información básica.

    
respondido por el Graham

Lea otras preguntas en las etiquetas