主页
  • README
  • 主页
  • journal日记
    • rtthreadv5.1.0
  • embedded嵌入式开发
    • SSPI
    • fsm状态机
      • 事件驱动型状态机
    • mm_fifo环形队列
    • lvgl
      • font字体生成
    • 经验分享
      • Byte alignment and protocol parsing
  • rt-thread笔记
    • repo
    • 线程
    • 设备
      • 串口
  • openharmony笔记
  • scons笔记
  • 公共基础库
    • 嵌入式utils
    • 鸿蒙utils
  • 开发与部署
    • gitbook
    • gitea服务器
      • gitea官方指导部署
      • Bitnami部署
    • 让Linux磁盘空间的弹性管理
    • docker笔记
      • docker
      • container
      • docker-compose
      • docker-machine
      • Portainer可视化界面
    • 1Panel运维管理面板
      • 家庭云的公网访问
      • 1Panel快速配置TCP代理
      • 端口转发访问内网
    • 服务器推荐
    • 极路由3刷机
    • ipv6公网
    • ddns动态域名
    • nginx反向代理
    • jumpserver堡垒机
    • bt宝塔
    • service自启服务
    • cloudreve部署
    • proxy代理
  • 工具收集
    • git笔记
      • git-push
      • git-flow
      • git-svn
      • EWARM
      • 常见需求
    • UsbEAm Hosts Editor
    • keil_下载地址
    • iar_下载地址
  • 相关链接
    • gitee首页
    • github首页
    • B站首页
    • gitea仓库备份
    • blog地址
Powered by GitBook
On this page
  • 项目简介
  • 使用方法
  • 1. 包含头文件
  • 2. 定义状态和事件
  • 3. 定义状态机管理结构体
  • 4. 初始化状态机
  • 5. 注册状态机
  • 6. 定义状态机管理函数
  • 7. 设置状态机管理函数
  • 8. 定义状态事件处理函数
  • 9. 初始化状态机状态
  • 10. 执行状态机
  • 注意事项
  • 示例
  • 许可证
  • 贡献
  • 联系方式
  1. embedded嵌入式开发
  2. fsm状态机

事件驱动型状态机

这个项目提供了一个用于实现有限状态机(Finite State Machine, FSM)的简单框架,用于管理状态和处理事件。该框架支持状态的初始化、退出、周期性任务执行,以及状态切换和事件处理。

Previousfsm状态机Nextmm_fifo环形队列

Last updated 1 year ago

项目简介

这个项目提供了一个用于实现有限状态机(Finite State Machine, FSM)的简单框架,用于管理状态和处理事件。该框架支持状态的初始化、退出、周期性任务执行,以及状态切换和事件处理。

使用方法

仓库地址

1. 包含头文件

#include "efsm.h"

2. 定义状态和事件

在使用状态机前,你需要定义状态和事件。状态通过 efsm_state_t 结构体表示,事件通过命令(cmd)进行触发。

// 定义状态
efsm_state_t stateA = {NULL, initA, exitA, actionA};
efsm_state_t stateB = {NULL, initB, exitB, actionB};

// 定义事件命令
#define CMD_START  (EFSM_STATE_USER_CMD_BASE + 1)
#define CMD_STOP   (EFSM_STATE_USER_CMD_BASE + 2)

3. 定义状态机管理结构体

efsm_manage_t myStateMachine;

4. 初始化状态机

efsm_manage_init(&myStateMachine);

5. 注册状态机

efsm_register(&myStateMachine);

6. 定义状态机管理函数

void myInitFunction(void *obj) {
    // 初始化操作
}

void myTickFunction(void *obj) {
    // 周期性任务
}

void myExitFunction(void *obj) {
    // 退出操作
}

void myControlFunction(void *obj, uint32_t cmd, void *param) {
    // 控制函数,根据cmd执行相应的操作
}

7. 设置状态机管理函数

myStateMachine.init = myInitFunction;
myStateMachine.tick = myTickFunction;
myStateMachine.exit = myExitFunction;
myStateMachine.control = myControlFunction;

8. 定义状态事件处理函数

void actionA(void *obj, uint32_t cmd, void *param) {
    // 处理状态A的事件
}

void actionB(void *obj, uint32_t cmd, void *param) {
    // 处理状态B的事件
}

9. 初始化状态机状态

efsm_transition(&myStateMachine, &stateA);  // 初始状态为A

10. 执行状态机

efsm_manage_tick();

注意事项

  • 在使用状态机之前,确保你的状态、事件和函数都已经正确定义和设置。

  • 通过设置命令(cmd)来触发相应的事件处理函数。

  • 使用 efsm_transition 函数进行状态切换。

  • 可以通过修改状态机管理结构体的成员来控制状态机的行为。

示例

查看 example.c 文件以获取一个简单的状态机使用示例。

许可证

贡献

联系方式

如有任何问题,请通过邮件联系:chengmeng_2@outlook,com。

该项目基于 。详细信息请参阅许可证文件。

欢迎贡献!如果你发现问题或有改进建议,请提出 或提交 Pull Request。

mengplus-plus/efsm
MIT 许可证
issue