C语言状态机--MP3的事件驱动实现

本文探讨了如何使用C语言构建MP3播放器的状态机,通过事件驱动方式简化程序设计,提高代码的可扩展性和可维护性。文章包含状态迁移图,并详细解析了代码设计的五个关键步骤。
摘要由CSDN通过智能技术生成

有些场景下,状态机可以使得我们的程序代码变得简洁,可扩展,可维护。

先看下状态迁移图。

 代码设计分为五个步骤完成状态机。

#include <stdio.h>

// 第一步:定义两个事件
typedef enum {
    STOP,
    PLAY_PAUSE,
    EVE_MAX
} EVENT;

// 第二步:定义三种状态
typedef enum {
    PLAY_STA,
    PAUSE_STA,
    STOP_SAT,
    STA_MAX
} STA;

typedef void (*func)(void *p);

// 第三步:定义状态机结构体
typedef struct 
{
    EVENT evn;
    STA currentSta;
    STA nextSta;
    func handle;        
} M_TB;

void func_1(void *p) {};
void func_2(void *p) {};
void func_3(void *p) {};
void func_4(void *p) {};
void func_5(void *p) {};
void func_none(void *p) {};

// 第四步:定义状态迁移表
const M_TB statFunc[STA_MAX][EVE_MAX] = {
    {
        {STOP, PLAY_STA, STOP_SAT, func_1},
        {PLAY_PAUSE, PLAY_STA, PAUSE_STA, func_2},
    },

    {
        {STOP, PAUSE
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值