Sugiero que aprendas sobre tu microcontrolador.
- Cortex-M4F tiene una FPU de precisión simple.
- Cortex-M4 no tiene FPU.
- Cortex-M3 tampoco tiene FPU.
La manipulación de los números de punto flotante de precisión doble sin FPU es tremendamente lenta.
Ahora, la pregunta es, si el código es acerca del rendimiento rápido de FP de doble precisión, ¿por qué seleccionó un micro sin una FPU de doble precisión? (o cualquier FPU en absoluto ...)
(Nota: No tengo conocimiento de ningún micro con una FPU de doble precisión).
EDIT
@peufeu, Esencialmente, sí. La posición se comparará con un recuento de codificador, sujeto a un bucle PID y el resultado se enviará a un DAC.
Bien, entonces ¿por qué no hacer eso? Eso es 1-2 páginas de código C, tal vez una pequeña máquina de estado ... bastante simple. No hay necesidad de clases y Movers / Managers / Bloat. Implemente su máquina de estado usando un interruptor / caja, obviamente. El patrón de "estado" no tiene lugar aquí.
@peufeu, ¿De qué manera estoy abusando de C ++, si no te importa que pregunte?
¿Por qué hacerlo en una página de código cuando puede completar una clase de Mover, una clase para aceleración y desaceleración y otras cosas, y 13 archivos de origen? ... cuyo resultado es que no tiene idea de lo que El programa realmente está funcionando y, por lo tanto, te preguntas por qué es lento.
El propósito de C ++ es tener un código claro y legible, que también es de alto rendimiento ya que el compilador puede optimizarlo. Si quieres un lenguaje dinámico, usa Python. Si quieres encender un motor, usa C.
Dado que un motor es lento según los estándares de los microcontroladores, no es posible que necesite más de, por ejemplo, 1k actualizaciones / s en su PID. Usar un ARM Cortex está bien, incluso puede usar flotadores si lo desea ... incluso sin FPU y en la emulación de software ...
Quiero decir, un PIC16 puede hacerlo ...
Puedes usar flotador (o doble) si te gusta la seguridad, ya que tu micro tiene mucha energía de sobra.
El punto fijo solo sería útil en cuanto a rendimiento en una micro pequeña. Sin embargo, tiene otras ventajas, por ejemplo, si utiliza un valor de 32 bits para codificar sus giros, por ejemplo, 8 bits para los grados de su codificador, entonces contar giros y hacer módulos y cosas así es muy simple, pero por supuesto que tiene para protegerse contra envoltura alrededor de insectos.
El punto flotante te permite no preocuparte por los errores envolventes.
Como está? Parece esconder unas docenas de líneas de matemáticas en mil líneas de abstracción. Hay aplicaciones escritas de esta manera, por ejemplo. Eclipse, pero este estilo realmente solo tiene sentido en grandes aplicaciones con componentes.
pj_50 - > Eeeeexactly, bien dicho.