Cuándo no utilizar la coma flotante
Lo primero que hay que tener en cuenta es que el punto flotante no no significa "necesito decimales". Aquí es donde fallan el 95% de los programadores de sistemas embebidos que hacen un mal uso de la coma flotante.
La cura para esa incredulidad es darse cuenta de que internamente, el programa debe utilizar una unidad que tenga sentido para la MCU de usar, no una que tenga sentido para los humanos.
Por ejemplo, si se mide la corriente en mA con un ADC de 10 bits integrado en el chip, la unidad que conviene utilizar en el software es "valores ADC brutos de punto fijo de 0 a 1024". En programación C eso significa un uint16_t
u opcionalmente un uint_fast16_t
. No es un int
y ciertamente no un float
.
Utilizar la unidad mA dentro de los cálculos del firmware sólo es conveniente para el cerebro del programador humano, en caso de que no pueda manejar unidades abstractas. Pero es inconveniente para el programa, ya que significa que usted necesita para volver a escalar todas las lecturas y, potencialmente, añadir inexactitud redondeo mientras lo hace. Además, el código de escala es sólo una sobrecarga. Y es probable que incluya la división, que puede ser doloroso para muchos MCUs.
Sí, estás leyendo la corriente en mA. Pero a menos que realmente necesites imprimir esa corriente en una pantalla o algo para un usuario humano, esa unidad no es realmente útil. Haz la re-escala de mA en lápiz y papel mientras diseñas el algoritmo, en lugar de arrastrarlo a tu firmware.
Cuándo utilizar la coma flotante
- Si tu MCU tiene una FPU y realmente necesitas hacer matemáticas avanzadas entonces debe utilizar coma flotante. En caso contrario, no.
"Matemáticas avanzadas" no significa necesariamente avanzadas desde la perspectiva del programador, sino del software. "Avanzadas" incluye cosas como raíces cuadradas, geometría o trigonometría, el uso de math.h
en general, números complejos, matemáticas de IA, etc. Cosas que sería doloroso implementar en punto fijo.