FreeModbus--学习函数指针

news/2024/11/20 17:36:51/

目录

函数指针

最简单的例子

稍作修改例子

引入协议栈的函数指针

引入协议栈第二处函数指针


函数指针

该协议栈中使用到函数指针,现开展一篇专门存放函数指针的文章。

C语言的函数指针是指向函数的指针变量,可以用来存储和调用函数的地址。在C语言中使用函数指针可以实现以下几种功能:

        作为函数的参数:函数指针可以作为参数传递给其他函数,使得可以在调用函数时动态指定要执行的函数。

        作为函数的返回值:函数指针可以作为函数的返回值,返回指向函数的地址。

        作为数组元素:可以使用函数指针数组来存储多个函数的地址,便于根据需要选择执行某个函数。

最简单的例子

#include <stdio.h>typedef void (*FuncPtr)(int);	// 声明一个函数指针类型/* 定义两个函数,用于演示函数指针的操作 */
void func1(int num) 
{printf("This is function 1 with argument %d\n", num);
}void func2(int num) 
{printf("This is function 2 with argument %d\n", num);
}int main() 
{// 声明函数指针变量FuncPtr ptr;// 将函数地址赋值给函数指针变量ptr = func1;// 通过函数指针调用函数ptr(10);// 将函数地址赋值给函数指针变量ptr = func2;// 通过函数指针调用函数ptr(20);return 0;
}

稍作修改例子

为了更贴合协议栈的函数指针,稍加修改例子。

typedef enum
{MB_EX_NONE = 0x00,MB_EX_ILLEGAL_FUNCTION = 0x01,MB_EX_ILLEGAL_DATA_ADDRESS = 0x02,MB_EX_ILLEGAL_DATA_VALUE = 0x03,MB_EX_SLAVE_DEVICE_FAILURE = 0x04,MB_EX_ACKNOWLEDGE = 0x05,MB_EX_SLAVE_BUSY = 0x06,MB_EX_MEMORY_PARITY_ERROR = 0x08,MB_EX_GATEWAY_PATH_FAILED = 0x0A,MB_EX_GATEWAY_TGT_FAILED = 0x0B
} eMBException;typedef eMBException ( *pxMBFunctionHandler )( UCHAR * pucFrame, USHORT * pusLength );// 定义一个函数,其参数和返回值类型符合函数指针的定义
eMBException myFunctionHandler(UCHAR * pucFrame, USHORT * pusLength) 
{// 在这里编写你的函数逻辑// ...
}int main() 
{// 声明一个指向函数的指针,并将其指向具体的函数pxMBFunctionHandler myHandler = myFunctionHandler;// 调用函数指针指向的函数UCHAR frame;USHORT length;eMBException result = myHandler(&frame, &length);// 对返回结果做进一步处理// ...return 0;
}

引入协议栈的函数指针

引入协议栈第二处函数指针


http://www.ppmy.cn/news/1271475.html

相关文章

Tomcat-安装部署(源码包安装)

一、简介 Tomcat 是由 Apache 开发的一个 Servlet 容器&#xff0c;实现了对 Servlet 和 JSP 的支持&#xff0c;并提供了作为Web服务器的一些特有功能&#xff0c;如Tomcat管理和控制平台、安全域管理和Tomcat阀等。 简单来说&#xff0c;Tomcat是一个WEB应用程序的托管平台…

锁--07_1----插入意向锁-Insert加锁过程

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 插入意向锁MySQL执行插入Insert时的加锁过程MySQL官方文档MySQL insert加锁流程1.加插入意向锁2.判断插入记录是否有唯一键3. 插入记录并对记录加X锁插入意向锁----…

提升开发效率的免费API好物

日出日落&#xff1a;支持国内3400个城市以及国际4万个城市&#xff0c;获取指定城市/地点每日日出时间、日落时间&#xff1b;同时也支持全球任意经纬度查询&#xff0c;接口会返回该经纬度最近的日出日落信息。月出月落和月相&#xff1a;支持国内3400个城市以及国际4万个城市…

Mybatis-plus介绍与入门

前言 MyBatis-Plus是在MyBatis基础上的一个增强工具库&#xff0c;旨在简化开发者的工作&#xff0c;提高开发效率&#xff0c;同时保留MyBatis的灵活性。使用 MyBatis-Plus 可以减少重复性的代码&#xff0c;简化常见的数据库操作 官方学习文档&#xff1a;MyBatis-Plus (bao…

在Word中,映像或翻转文本,往往有意想不到的的创意,实现过程也很简单

如果你在Microsoft Word中通过标志、公告或传单等内容发挥创意,你可能想用你的文本做一些独特的事情。你可以镜像文本以使其反射,也可以将文本倒置。 虽然不能以正常形式操作文本字符串以完成镜像或翻转,但可以使用文本框。这也让你可以自由地将文本放在任何你喜欢的地方,…

基于ssm金旗帜文化培训学校网站的设计与开发论文

摘 要 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播&#xff0c;搭配信息管理工具可以很好地为人们提供服务。针对培训学校展示信息管理混乱&#xff0c;出错率高&#xff0c;信息安全…

java实现局域网内视频投屏播放(二)爬虫

代码链接 视频播放原理 大多视频网站使用的是m3u8&#xff0c;m3u8其实不是一个真正的视频文件&#xff0c;而是一个视频播放列表&#xff08;playlist&#xff09;。它是一种文本文件&#xff0c;里面记录了一系列的视频片段&#xff08;segment&#xff09;的网络地址。这些…

检查网络连通性的几种方法

检查网络连通性的几种方法 检查网络连通性是确保计算机或设备能够与其他设备或互联网通信的重要步骤。以下是一些用于检查网络连通性的方法&#xff1a; Ping命令&#xff1a; 在命令提示符&#xff08;Windows&#xff09;或终端&#xff08;Linux/macOS&#xff09;中&#…