# fsm **Repository Path**: axenhook/fsm ## Basic Information - **Project Name**: fsm - **Description**: 使用FSM实现电子琴功能。 FSM(finite-state machine,有限状态机),将每个任务都认为是一个FSM,本项目主要解决多个任务(多个FSM)的管理问题,是一种使用FSM方式实现任务管理的框架。 - **Primary Language**: C - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-06-23 - **Last Updated**: 2025-10-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # fsm #### 介绍 本项目实现了一个FSM(finite-state machine,有限状态机)框架,适合不使用RTOS的场景,主要特性有 1. 支持任务管理,如任务创建、销毁、启动、停止、挂起等操作,一个任务就是一个FSM 2. 支持事件机制,如事件发送、获取等 3. 定义了初始化、延时(定时)、退出、休眠等事件 4. 实现了一个延时(定时)事件框架 另外,本项目还实现了一个基于此FSM框架的案例,也就是电子琴应用,此案例的主要特性有 1. 支持弹琴模式和播放内置音乐(两只老虎)模式,通过按键0和15进行模式切换 2. 在弹琴模式下,按键1~14分别对应1、2、3、4、5、6、7的中音和高音 3. 在播放内置音乐模式下,会自动循环播放“两只老虎”乐曲 4. 支持数码管显示当前按下的按键值,如果是长按按键,会多显示一个A字母 5. 支持数码管显示当前秒数 本项目在普中的8051 A4开发板上进行了验证。 #### 软件架构 本项目的文件构成 1. fsm.h, fsm.c:FSM框架实现的主要代码,平台无关 2. fsm_types.h:基本数据类型定义 3. main.c:定义系统时钟和main函数,并创建sys任务 4. task_xxx.c:案例所需的任务代码 5. 其他c和h文件:案例所需的器件驱动代码 #### 使用说明 如果要移植到其他平台,需修改 1. fsm_types.h:定义符合目标平台的基本数据类型 2. main.c:根据目标平台初始化定时器,以提供系统所需的时钟