有限状态机C语言实现

本文介绍了如何使用C语言设计和实现有限状态机(FSM),通过函数指针表示状态,根据接收到的事件(EVENT)来决定状态的转换。通过示例展示了状态机在处理不同事件时的状态变化。
摘要由CSDN通过智能技术生成

有限状态机(FSM)是设计和实现事件驱动程序内复杂行为组织原则的有力工具。

设计思路:

(1)用函数指针表示状态;

(2)函数指针函数接收事件(EVENT),根据(EVENT)决定下个状态;

(3)函数指针函数返回下个状态的函数指针。

利用强制类型转换,实现函数指针函数的原型。

#include <stdio.h>

typedef void (*state_ret)(int event);
typedef state_ret (*state)(int event);

// 申明状态函数
state_ret STATE1(int event);
state_ret STATE2(int event);
state_ret STATE3(int event);

// 事件列表
enum EVENT_NUM {
    EVENT1,
    EVENT2,
    EVENT3,
    EVENT4,
};

int main(void) {
	int i;
	int event;
	state curState = STATE1; 
	for (i = 0; i < 5; i++) {
		switch(i % 5) {
			case 0: event = EVENT1; break;
			case 1: event = EVENT2; break;
			case 2: event = EVENT3; break;
			case 3: event = EVENT4; break;
			case 4: event = EVENT2; break;
			default: break;
		}
		// 运行当前状态函数,返回下一状态函数指针
		curStat
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值