C语言应用2:函数指针

1.函数指针

函数指针本身是指针变量,该指针变量指向函数的入口地址。基础的功能是调用函数和做函数参数。

2.函数指针的应用

  • 匹配字符串(例如AT指令),执行相应的函数。将自己开发的单片机或者物联网模组封装好,只留出UART外设供外部使用。再使用UART传递交换AT指令。如下图所示,使用一个单片机采集陀螺仪加速度计数据,使用卡尔曼或者互补滤波实现角度输出,这时候将单片机和传感器封装起来成为一个模块。其他设备使用该模块的时候只需使用AT指令就可以实现控制和数据传输。
  • 补充一点额外知识,很多模块是可以定时透传数据的,比如GPS模块定时1s传输一个数据包,只需对数据包进行解析就可以获取到定位数据,这一点我后面的博客会谈到。
    在这里插入图片描述

3.代码

代码我使用codeblock模拟,具体应用到单片机等等设备需要调整。

#include <stdio.h>
#include <stdlib.h>
#define MAX_COMMAD 2
void AT1(void);
void AT2(void);
typedef void (*FUNC)(void);//函数指针

//指令结构体包括指令名以及对应的函数指针
typedef struct
{
    char * at_cmd;
    FUNC func;
}AT_CMD_TABLE;

//使用结构体数组的方式定义AT指令表
AT_CMD_TABLE cmd_table[] =
{
    {"AT1", AT1},
    {"AT2", AT2}
};

int main()
{
    char tmp[10];
    int i = 0;
    int match_succuss = 0;//匹配成功标志位
    printf("输入AT指令\n");
    scanf("%s",tmp);
    while(i<MAX_COMMAD)
    {
        if(strncmp(cmd_table[i].at_cmd, tmp, strlen(tmp)) == 0)
        {
            match_succuss = 1;
            cmd_table[i].func();//跳转到对应函数
            break;
        }
        i++;
    }
    if(match_succuss == 0)
    {
        printf("未找到AT指令");
    }
    return 0;
}

void AT1()
{
    printf("AT1");
}

void AT2()
{
    printf("AT2");
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

生活在别处u

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值