12 votos

¿Alguien ha portado el marco estatal de QP para Arduino?

Al revisar los posibles enfoques para mi proyecto de registro de datos, he encontrado que el libro "Practical UML statecharts in C/C++" es muy interesante para un trabajo más serio con el Arduino. QP es una familia de marcos de trabajo ultraligeros, de código abierto, basados en máquinas de estado para sistemas empotrados y distribuyen código y puertos para sus marcos de trabajo (GNU GPL2) en http://www.state-machine.com/ donde tienen un puerto para el AVR y el AVR mega usando el conjunto de herramientas WinAVR/Gnu C++.

Aunque los encabezados específicos de los chips son apropiados, ¿alguien ha creado un archivo BSP de la placa o ha tenido alguna experiencia con estos marcos? Estoy empezando con el libro, así que cualquier comentario será muy apreciado.

4voto

letronje Puntos 128

Evitaría este tipo de cosas como la plaga.

El software de bajo nivel más "serio" con el que me he encontrado ha sido una máquina de estado en esta forma:

#include <stdio.h>

typedef enum
{
    STATE_INIT,     // Description
    STATE_RUNNING,  // Description
    STATE_COMPLETE  // Description
} state_t;

int main(void)
{
    state_t state = STATE_INIT; // setup the initial state

    while(1)
    {
        os_run(); // call the OS services (poll the UART, check buttons, etc.)

        switch(state)
        {
            case STATE_INIT:
                state = STATE_RUNNING;
                puts("init");
                break;
            case STATE_RUNNING:
                state = STATE_COMPLETE;
                puts("running");
                break;
            case STATE_COMPLETE:
                puts("complete");
                break;
        }
    }
    return 0;
}

Hay muchos otros buenos enfoques en C/C++, pero no son mis favoritos.

El gran problema con herramientas como QP es que a menudo es muy difícil hacer cosas que no quieren que hagas. Si eliges jugar con el código manualmente tendrás que mantener el caso especial para siempre.

Diría que los gráficos de estado UML son una herramienta fantástica para la documentación, la enseñanza y el análisis. Pero, no para la programación real - hay herramientas mucho mejores para eso :)

3voto

intrepion Puntos 3973

Personalmente no he usado el marco de QP/biblioteca, debido a la licencia GPL. En ese momento, no creí que mi empleador estuviera dispuesto a soltarme la pasta para experimentar con HSM (máquinas de estado jerárquico) usando QP. Tuve que implementar la mía propia que era similar a la QP cuando estaba refactorizando una horrible máquina de estado que ocupaba cientos de líneas de código como el ejemplo de Joby pero multiplicado por 1000. El viejo diseño que fue prestado para poner en marcha las características en un plazo corto fue un terrible dolor de mantener. Temía tratar de añadir algo nuevo por miedo a romper algo más.

Rediseñé el código en un HSM que tenía mucho más sentido para mí personalmente sobre cómo debería comportarse el sistema. Funcionó mucho mejor de lo que podía imaginar. Era mucho más fácil de modificar y mantener de lo que jamás podría haber soñado. Incluso tuve que rehacer gran parte de la máquina de estado, debido al comportamiento inesperado del sistema. Era mucho más fácil de arreglar con el marco de trabajo que había hecho, y estoy seguro de que habría sido igual de fácil en QP. El marco que construí se hizo popular y se extendió a otras máquinas de estado complejas dentro de nuestra base de código.

Tuve un amigo que implementó el marco cuántico usando Java en un robot que funcionó bastante bien. Era parte del algoritmo de toma de decisiones del robot basado en ciertas entradas. Era un ajuste natural, dadas las decisiones que tenía que tomar basado en el estado del robot.

Lo que entiendo de la belleza del QP es la capacidad de tener un marco listo para un diseño de máquina de estado optimizado para su procesador y no tener que depender de herramientas CASE que escupen un código de placa de calderas ineficiente. Pero, sólo usaría QP si tienes un conjunto de máquinas de estado complejas para implementar que describan tu diseño.

Si todo lo que tienes es algo tan simple como el ejemplo de Joby, entonces hazlo como él lo explicó. Pero si encuentras tu máquina de estado creciendo y creciendo con todo tipo de declaraciones de "si no" envueltas alrededor de diferentes condiciones... entonces podría ser el momento de intentar algo como QP para descomponerlo en HSM's.

1voto

Kieron Puntos 5096

Ampliando el ejemplo de Joby, una forma más limpia de implementar una máquina de estado muy grande es reemplazar la declaración del caso con una serie de indicadores de función. Entonces puedes aislar todo el código de un estado particular dentro de una función. He descubierto que implementarlo de esta manera requiere mucha menos memoria de programa.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X