c语言-表驱动方式

本文介绍了如何在C语言中使用表驱动法替代复杂的if-else或switchcase结构,提升代码的可读性和维护性,特别适用于嵌入式系统的状态机和按键驱动。通过实例展示了如何创建和使用状态表来控制程序流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

介绍

今天写代码时,遇到了读多个不同引脚状态的情况,首先想到的是使用if else或者switch case方法,有没有别的方法来取代以上方法呢?答案肯定是有的,介绍一种方法那就是表驱动
表驱动概念:表驱动法是一种编程模式,从表里面查找信息而不使用逻辑语句(if 或case),它的好处是消除代码里面到处出现的if、else、swith语句,让凌乱的代码变得简明和清晰,对简单情况而言,表驱动方法可能仅仅使逻辑语句更容易和直白,但随着逻辑的越来越复杂,表驱动法就愈发有吸引力。表驱动法设计主要是两个方面 : 对象数据设计;对象关系设计。有点像key :value的感觉。

C语言的表驱动方法是一种使用数组来实现某些操作的编程技术。它通常用于嵌入式系统中,可以简化程序结构,提高代码的可读性和可维护性。表驱动方法的基本思想是将一些数据存储在数组中,然后通过索引来访问这些数据。在C语言中,表驱动方法通常用于实现状态机、查找表和按键驱动等功能。例如,可以使用表驱动方法来实现一个事件驱动型按键驱动模块,可以无限量扩展按键,按键事件的回调异步处理方式可以简化程序结构,按键业务逻辑更清晰。

代码示例

看下示例代码:

//每个状态执行一次,执行完毕,退出程序。
#include <stdio.h>

typedef enum 
{
    STATE_IDLE,
    STATE_RUNNING,
    STATE_STOPPED
} state_t;

typedef struct
{
    state_t state;
    void (*handler)(void);
} state_table_t;

void idle_handler(void) 
{
    printf("Idle state\n");
}

void running_handler(void) 
{
    printf("Running state\n");
}

void stopped_handler(void) 
{
    printf("Stopped state\n");
}

state_table_t state_table[] = 
{
    {STATE_IDLE, idle_handler},
    {STATE_RUNNING, running_handler},
    {STATE_STOPPED, stopped_handler}
};

int main(int argv,char *argc[]) 
{
    state_t current_state = STATE_IDLE;
    while (1)
     {
        state_table[current_state].handler();
        current_state = (current_state + 1) % 3;
		if(current_state == 0)
        {
            break;
        }
    }
    return 0;
}

运行结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值