FreeModbus--学习函数指针

目录

函数指针

最简单的例子

稍作修改例子

引入协议栈的函数指针

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


函数指针

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

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.rhkb.cn/news/217739.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【数学建模】《实战数学建模:例题与讲解》第十三讲-相关分析(含Matlab代码)

【数学建模】《实战数学建模&#xff1a;例题与讲解》第十三讲-相关分析&#xff08;含Matlab代码&#xff09; 基本概念典型相关分析综合评价模型对应分析因子分析聚类分析 习题10.41. 题目要求2.解题过程3.程序 习题10.51. 题目要求2.解题过程3.程序 习题10.6&#xff08;1&a…

数据结构-07-二叉树

前面学习的栈、队列等等都是线性表结构。树是一种非线性表结构&#xff0c;比线性表的数据结构要复杂。 1-树tree “树”这种数据结构类似我们现实生活中的“树”&#xff0c;这里面每个元素我们叫作“节点”&#xff1b;用来连线相邻节点之间的关系&#xff0c;我们叫作“父子…

vue中element-ui日期选择组件el-date-picker 清空所选时间,会将model绑定的值设置为null 问题 及 限制起止日期范围

一、问题 在Vue中使用Element UI的日期选择组件 <el-date-picker>&#xff0c;当你清空所选时间时&#xff0c;组件会将绑定的 v-model 值设置为 null。这是日期选择器的预设行为&#xff0c;它将清空所选日期后将其视为 null。但有时后端不允许日期传空。 因此&#xff…

如何使用GaussDB创建外表(FOREIGN TABLE)

目录 一、前言 二、创建外表的特点 二、GaussDB创建外表访问外部数据库表&#xff08;示例&#xff09; 1、创建外表 2、FAQ&#xff1a;CREATE USER MAPPING错误 三、GaussDB创建外表映射数据文件&#xff08;示例&#xff09; 1、创建数据文件 2、创建外表 3、FAQ&a…

SpringBoot+Netty+Websocket实现消息推送

这样一个需求&#xff1a;把设备异常的状态每10秒推送到页面并且以弹窗弹出来&#xff0c;这个时候用Websocket最为合适&#xff0c;今天主要是后端代码展示。 添加依赖 <dependency><groupId>io.netty</groupId><artifactId>netty-all</artifact…

SpringBoot Maven 项目打包的艺术--主清单属性缺失与NoClassDefFoundError的优雅解决方案

Maven项目的Jar包打包问题-没有主清单属性&&ClassNotFoundException 与 NoClassDefFoundError 文章目录 Maven项目的Jar包打包问题-没有主清单属性&&ClassNotFoundException 与 NoClassDefFoundError1、问题出现1.1、Jar包运行&#xff1a;没有主清单属性解决方…

快递批量查询高手:自动查询,精准掌控状态实时更新信息

随着电子商务的繁荣和智能化生活的普及&#xff0c;快递服务已经成为了我们生活中不可或缺的一部分。然而&#xff0c;在大量的快递信息中&#xff0c;如何快速、准确地查询和掌握快递的实时状态成为了许多人的痛点。今天&#xff0c;我们将介绍一款名为“快递批量查询高手”的…

智能优化算法应用:基于混合蛙跳算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于混合蛙跳算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于混合蛙跳算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.混合蛙跳算法4.实验参数设定5.算法结果6.…

Mac 文件高速下载工具 JDownloader2 下载安装详细教程

朋友们大家好&#xff0c;今天推荐一款多线程下载神器 JDownloader&#xff0c;JDownloader 支持多线程下载、断点续传、网盘资源下载、压缩包文件自解压、OCR识别等众多实用功能&#xff0c;最重要的就是可以提升我们的下载速度5-20倍&#xff0c;非常的硬核 安装也是比较简单…

SpringBoot使用自带的日志框架(开箱即用,同时输出到文件与控制台)

在SpringBoot内部中&#xff0c;默认就集成了LogBack的日志依赖&#xff0c;所以我们其实在实际开发中不需要直接添加该依赖。 你会发现spring-boot-starter其中包含了 spring-boot-starter-logging&#xff0c;Spring Boot为我们提供了很多默认的日志配置&#xff0c;所以&…

常见的Linux基本指令

目录 什么是Linux&#xff1f; Xshell如何远程控制云服务器 Xshell远程连接云服务器 Linux基本指令 用户管理指令 pwd指令 touch指令 mkdir指令 ls指令 cd指令 rm指令 man命令 cp指令 mv指令 cat指令 head指令 ​编辑 tail指令 ​编辑echo指令 find命令 gr…

【算法题】N进制减法(js)

返回结果-1 const str "2 11 1"; const str1 "8 07 1"; const str2 "16 af ff"; function solution(str) {const [n, minuend, subtrahend] str.split(" ");if (n < 2 || n > 35) return -1;else if (isValid(minuend) &am…

人工智能中的文本分类:技术突破与实战指导

在本文中&#xff0c;我们全面探讨了文本分类技术的发展历程、基本原理、关键技术、深度学习的应用&#xff0c;以及从RNN到Transformer的技术演进。文章详细介绍了各种模型的原理和实战应用&#xff0c;旨在提供对文本分类技术深入理解的全面视角。 关注TechLead&#xff0c;分…

探索SSL证书的应用场景,远不止网站,还有小程序、App Store等

说到SSL证书&#xff0c;我们都知道其是用于实现HTTPS加密保障数据安全的重要工具&#xff0c;在建设网站的时候经常会部署SSL证书。但实际上&#xff0c;SSL证书的应用场景远不止网站&#xff0c;它还被广泛地应用到小程序、App Store、抖音广告、邮件服务器以及各种物联网设备…

web网络安全

web安全 一&#xff0c;xss 跨站脚本攻击(全称Cross Site Scripting,为和CSS&#xff08;层叠样式表&#xff09;区分&#xff0c;简称为XSS)是指恶意攻击者在Web页面中插入恶意javascript代码&#xff08;也可能包含html代码&#xff09;&#xff0c;当用户浏览网页之时&…

html中一个div中平均一行分配四个盒子,可展开与收起所有的盒子

html中一个div中平均一行分配四个盒子&#xff0c;可展开与收起所有的盒子 1.截图显示部分 2.代码展示部分 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"wid…

测长机:精度与用途解析

测长机是一种用于测量物体长度或距离的专业测量仪器&#xff0c;而且测量结果能够稳定且可靠。其精度是衡量其优劣的重要标准之一。 在制造业中&#xff0c;长度尺寸是所有几何量尺寸测量的基准。通过测量产品的长度&#xff0c;可以及时发现并纠正尺寸偏差&#xff0c;保证产…

JVM的内存分区以及垃圾收集

1.JVM的内存分区 1.1方法区 方法区(永久代&#xff09;主要用来存储已在虚拟机加载的类的信息、常量、静态变量以及即时编译器编译后的代码信息。该区域是被线程共享的。 1.2虚拟机栈 虚拟机栈也就是我们平时说的栈内存&#xff0c;它是为java方法服务的。每个方法在执行的…

Vue--第八天

Vue3 1.优点&#xff1a; 2.创建&#xff1a; 3.文件&#xff1a; 换运行插件&#xff1a; 4.运行&#xff1a; setup函数&#xff1a; setup函数中获取不到this&#xff08;this 在定义的时候是Undefined) reactive()和ref(): 代码&#xff1a; <script setup> // …

解决el-table组件中,分页后数据的勾选、回显问题?

问题描述&#xff1a; 1、记录一个弹窗点击确定按钮后&#xff0c;table列表所有勾选的数据信息2、再次打开弹窗&#xff0c;回显勾选所有保存的数据信息3、遇到的bug&#xff1a;切换分页&#xff0c;其他页面勾选的数据丢失&#xff1b;点击确认只保存当前页的数据&#xff1…