c语言-表驱动方式

发布时间:2023年12月17日

介绍

今天写代码时,遇到了读多个不同引脚状态的情况,首先想到的是使用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;
}

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

文章来源:https://blog.csdn.net/weixin_46158019/article/details/135032044
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。