Máquinas de estado de programación incrustadas

7

Estoy considerando la implementación de una máquina de estado finita no trivial (especificada como un gráfico de estado jerárquico UML) en un MCU de 32 bits con gcc.

¿Hay alguna regla general que funcione mejor y que funcione menos bien? Mi intuición dice que una implementación basada en conmutadores (o incluso goto calculada) debería tener un poco más de rendimiento, mientras que una tabla de transición basada en punteros de función generalmente tiene la reputación de ser más mantenible.

También: alguien ha evaluado Boost MSM para incrustar aplicaciones? Sé que a Boost MSM generalmente se le aclama por ser muy eficiente, pero para aplicaciones integradas, la eficiencia se puede medir de manera diferente a como lo hace en el mundo de la programación de PC.

¿Alguien sabe cómo es el motor de máquina de estado compilado de MSM? ¿Más como un switch jumptable o más como una tabla de transición de puntero de función? ¿Utiliza la asignación de memoria dinámica o puede usarse estáticamente?

    
pregunta ARF

2 respuestas

7

Me sorprendería si hubiera una gran diferencia en una MCU de 32 bits. Evitar las ramas condicionales podría ahorrarle algunos ciclos, pero ¿realmente va a tener éxito o fracasará en base a unos pocos ciclos? El número de estados de espera en su RAM y ROM es probablemente tan importante. Así es el conjunto de instrucciones de la CPU.

La optimización prematura es la raíz de todo mal. Comience con lo que es más fácil de implementar y mantener, y solo optimice cuando sea necesario según el perfil.

    
respondido por el Adam Haun
3

Para una implementación de UML en incrustado, eche un vistazo a QP framework - > enlace . Ambas variantes C y C ++ están disponibles. La GUI (QM) que lo acompaña permite incluso codificar usando notación UML. El marco es lo suficientemente pequeño como para ejecutarse en Arduino; Los 32 bitters son fáciles.

    
respondido por el Oleg Mazurov

Lea otras preguntas en las etiquetas