<[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;.