#include "fsm.h"
#include <stdio.h>
//事件回调函数
void nsd_forword_callback(void)
{
printf("[FSM]: nsd_forword_callback\n");
}
void nsd_reversal_callback(void)
{
printf("[FSM]: nsd_reversal_callback\n");
}
void nsd_forword_stop_callback(void)
{
printf("[FSM]: nsd_forword_stop_callback\n");
fsm.curstate = STATE_IDLE;
}
void nsd_reversal_stop_callback(void)
{
printf("[FSM]: nsd_reversal_stop_callback\n");
fsm.curstate = STATE_IDLE;
}
STATE_TABLE fsm_table[] =
{
/*当前状态 事件 下一状态 回调函数*/
{STATE_IDLE, EVENT_NSD_FORWORD, STATE_NSD_FORWORD, nsd_forword_callback},
{STATE_NSD_FORWORD, EVENT_KEY_DOWN, STATE_NSD_FORWORD_STOP, nsd_forword_stop_callback},
{STATE_NSD_FORWORD, EVENT_KEY_DOWN6, STATE_NSD_FORWORD_STOP, nsd_forword_stop_callback},
{STATE_IDLE, EVENT_NSD_REVERSAL, STATE_NSD_REVERSAL, nsd_reversal_callback},
{STATE_NSD_REVERSAL, EVENT_KEY_DOWN, STATE_NSD_REVERSAL_STOP, nsd_reversal_stop_callback},
{STATE_NSD_REVERSAL, EVENT_KEY_DOWN6, STATE_NSD_REVERSAL_STOP, nsd_reversal_stop_callback},
};
//注册状态机
FSM fsm =
{
.curstate = STATE_IDLE,
.table_size = sizeof(fsm_table) / sizeof(STATE_TABLE),
.table = fsm_table
};
//状态迁移
void fsm_state_transfer(int state)
{
fsm.curstate = (STATE)state;
}
//获取当前状态
int fsm_state_get()
{
return fsm.curstate;
}
//事件处理
void fsm_event_handle(int event)
{
STATE_TABLE *pActionTable = fsm.table;
void (*pActionFun)() = NULL;
//获取当前动作函数
for (int i = 0; i <= fsm.table_size; i++)
{
if (event == pActionTable[i].event
&& fsm.curstate == pActionTable[i].cur_state)
{
pActionFun = pActionTable[i].event_cb;
if (pActionFun)
{
pActionFun();
}
fsm_state_transfer(pActionTable[i].next_state);
}
}
}
//事件更新
void fsm_event_update(int event)
{
fsm_event_handle(event);
}
FSM有限状态机模拟例程
需积分: 13 184 浏览量
2023-01-04
13:52:38
上传
评论
收藏 24KB ZIP 举报
lly_3485390095
- 粉丝: 29
- 资源: 15
最新资源
- 基于matlab实现文档+程序边缘计算任务卸载与资源调度的算法,是论文的源代码,具有价值.rar
- 什么是学生成绩管理系统c++以及学习学生成绩管理系统的意义
- 什么是词向量-以及学习关于了解词向量的意义
- 什么是mybatis动态sql以及学习mybatis动态sql的意义
- 华为数据治理方法论,包括:数据治理框架、数据治理组织架构、数据治理度量评估体系以及华为数据治理案例分享
- 基于matlab实现对表面肌电信号进行归一化处理,并对归一化后的图形显示 .rar
- 基于matlab实现单级倒立摆的 T-S 模型 包括 LMI 程序源码
- 图书管理系统(struts+hibernate+spring+ext).rar
- 基于matlab实现此压缩包包含语音信号处理中的语音变声代码加音频.rar
- STM32使用PWM驱动舵机并通过OLED显示
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈