Finite State Machine Implementación en C para aplicaciones en tiempo real

Estimado lector,
En este post, usted puede encontrar el Finite Implementación de la máquina del Estado en C útil para aplicaciones en tiempo real.
Por favor, consulte mi anterior entrada del blog» máquina de estados finitos simples para principiantes «para obtener bases de la FSM
La implementación actual del FSM contiene tres estados como STATE_1, STATE_2 y STATE_3 y tres eventos como EVENT_1, EVENT_2, EVENT_3 .
obras FSM sobre la base de los hechos que se ha activado durante al punto del tiempo.
por ejemplo:
Caso 1: Si el FSM está en STATE_1 y FSM recibe un EVENT_2 entonces deberá llamar a la función respectiva acción y el cambio siguiente estado como STATE_2
Caso 2:. Si el FSM está en STATE_2 y FSM recibe un EVENT_2 entonces permanece en el mismo estado que STATE_2
Finitos Estado Machine Implementación En C
================================
<- [ if gte mso 9]> <[endif] -> <- [if gte mso 10]> Definiciones

<[endif! ] ->

# include
# include
# include

/ * Este programa implementa la máquina de estados finitos que contiene
* 3 estados como STATE_1, STATE_2, STATE_3 y 3 EVENTOS
; * EVENT_1, EVENT_2, EVENT_3 como se muestra a continuación

ESTADOS / EVENTOS | EVENT_1 | EVENT_2 | EVENT_3 | EVENT_4
================================== ====================
; STATE_1 |
— ————-
STATE_2 |
———- ——
STATE_3 ; |
—————-
* /

/ *
* Declarar los estados
* /
typedef enum estados
{
INVALID_STATE = 0,
STATE_1,
STATE_2,
STATE_3,
MAX_STATES
} FSMStates;

/ *
* Declarar Eventos
* /
typedef enum eventos
{
INVALID_EVENT = 0,
EVENT_1,
EVENT_2,
EVENT_3,
MAX_EVENTS
} FSMEvents;

/ * Devolver llamada Función * / » color: púrpura ; «>
typedef void (* FSMActionFunc) (void * datos1);

«>
/ * ============= ============
* Declaración de FSMStruct
* ===================== ====
* FSM Struct debe contener
* función ACTION y Siguiente Estado
* /
typedef struct FSM

{/ * Función de acción * /
FSMActionFunc actionFunc;
/ * El siguiente Estado * /
FSMStates Nextstate;
} FSMStruct;


/ * Declarar FSMStruct variable * /

/ * Las funciones de la manija que aquí deben * /
currentState unsigned char;

vacío processFSMEvent (evento internacional sin firmar) ;
vacío handle_FSM_EVENT_1 (void * datos1);
vacío handle_FSM_EVENT_2 (void * datos1);
vacío handle_FSM_EVENT_3 (void * datos1);

vacío initialiseFSM (void)
{
/ * Memset a AgrupaciónFsm a cero * /
memset (AgrupaciónFsm, 0x00, sizeof (FSMStruct));

/ * Intial Estado * /
currentState = STATE_1;

/ * STATE_1 Intialisation * /
; AgrupaciónFsm [STATE_1] [EVENT_1] actionFunc = handle_FSM_EVENT_1;.
AgrupaciónFsm [STATE_1] [EVENT_1] Nextstate = STATE_1;.

AgrupaciónFsm [STATE_1] [EVENT_2] actionFunc = handle_FSM_EVENT_2;
AgrupaciónFsm [STATE_1] [EVENT_2] Nextstate = STATE_2;

AgrupaciónFsm [STATE_1] [EVENT_3] . actionFunc = handle_FSM_EVENT_3;.
AgrupaciónFsm [STATE_1] [EVENT_3] Nextstate = STATE_3 ;

/ * ESTADO 2 * /
AgrupaciónFsm [STATE_2] [EVENT_1] actionFunc = handle_FSM_EVENT_1;.
AgrupaciónFsm [STATE_2 ] [EVENT_1] Nextstate = STATE_1;.

AgrupaciónFsm [STATE_2] [EVENT_2] actionFunc = handle_FSM_EVENT_2;
AgrupaciónFsm [STATE_2] [EVENT_2] Nextstate = STATE_2;

AgrupaciónFsm [STATE_2] [EVENT_3] actionFunc = handle_FSM_EVENT_3;..
AgrupaciónFsm [STATE_2] [EVENT_3] Nextstate ; = STATE_3;

/ * ESTADO 3 * /
AgrupaciónFsm [STATE_3] [EVENT_1] actionFunc = handle_FSM_EVENT_1;.
AgrupaciónFsm [STATE_3] [EVENT_1] Nextstate = STATE_1;.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *