结构体对函数指针的高级封装应用

2023-11-15

分层设计考虑

作用:降低对底层应用程序的高耦合度

示例:

#include "mac.h"
typedef struct _phy_t{
    char channel;
    char snd_fail_count;
    char *name;
    char open_flag;

    void (*init)(void);
    int (*send_packet)(struct _phy_t phy, u8 *pdata, u8 len, u16 waitms);
    void (*recieve_packet)(u8 *data, u8 len, u16 waitms);

    rt_sem_t send_sem;
    rt_mq_t  send_mq;
    u8 recvbuff[DEFAULT_PACKET_LEN];
}phy_t;

用法一:
extern phy_t *phy_1, *phy_2;   //变量可供所有文件使用(只需包含该头文件)
/*
    需要在include "mac.c"定义一下变量
        phy_t *phy_1, *phy_2;
*/
在实际使用 时需要分配内存大小在:
int main(){
    phy_1 = (phy_t *)malloc(sizeof(phy_t));  //分配空间,否则**只占用四字节大小**内存<但不可使用>
    phy_2 = (phy_t *)malloc(sizeof)(phy_t);

    phy_1->init = si4463_init;
    /*
       (* phy_1->init)(void);   //直接进行解引用
    */

}
用法二:
extern phy_t phy_1, phy_2;   //变量可供所有文件使用(只需包含该头文件)
/*
    需要在include "mac.c"定义一下变量,直接为变量分配内存大小
        phy_t phy_1, phy_2;
*/
在实际使用 时直接使用即可:
int main(){
    phy_1.init = si4463_init;
    /*
       (* phy_1.init)(void);   //直接进行解引用
    */

}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

结构体对函数指针的高级封装应用 的相关文章

  • 微信小程序开发架构——JavaScript的基本概述 和 JavaScript在 Nodejs、小程序中、浏览器中的使用方法

    轻量 是指在入门JavaScript语言时候觉得JavaScript 没有其它语言学习起来那么重 解释性 是指所编写的JavaScript语言它在运行时 机器会把JavaScript语言翻译成机器语言 JavaScript语法接近于Java
  • C++使用dll的一些探索

    一 动态链接库的加载方式 隐式加载又称载入时加载 指在主程序载入内存时搜索DLL 并将DLL载入内存 使用隐式加载时 使用者需要DLL链接库的 h文件 lib文件和 dll文件 lib文件包含DLL导出的函数声明和变量的符号名 dll 文件
  • 区块链在非金融领域有哪些值得期待的应用

    引言 自己关注区块链好多年了 感觉大部分人都在炒币 或者所谓的搞金融 但是现在各国的审查都越来越严格 针对金融领域的审查尤其严格 在国内 基本上是禁止区块链应用有任何的发币行为的 我个人也是觉得金融领域的监管太多 反而不容易落地 这篇文章来
  • Android Studio 安装应用失败总结

    昨天公司刚发了测试机 我拿到一台魅蓝max 刚拆开手机 今天插上数据线 run 结果居然安装失败 提示信息为 INSTALL FAILED USER RESTRICTED 顿时懵逼了 刚买的新机 就出现这个问题 无语啊 刚开始还以为是And
  • 中国互联网技术联盟推出“互联网+”资讯门户

    ITA1024中国互联网技术联盟7月正式推出专注 互联网 的资讯门户网站http abc ita1024 com 这也是国内首个专注于帮助中国企业有效落地 互联网 的服务平台 是为负责企业 互联网 转型战略的CEO CIO CFO CMO
  • 六、线性队列

    序言 结构图 队列结构 队列常用操作 队列的实现 序言 线性队列是用数组实现的队列 队列遵循的原则FIFO first in first out 通常我们说的线性队列 为了节省数组的空间使用 都是循环队列 结构图 队列结构 typedef
  • 关于区块链电子发票

    2018年8月10日 国家税务总局深圳市税务局与腾讯联合开出全国首张区块链电子发票 一年时间过去 区块链电子发票已覆盖100多个行业 接入企业超过6000家 开具区块链电子发票累计超过700万张 总开票金额达近百亿元 与此同时 腾讯区块链从
  • 半夜睡不着,MFC搞起来!

    一 MFC的概念和作用 1 什么是MFC 全称 Microsoft Foundation Class Library 我们称之为微软基础类库 封装了各种windowsAPI函数 C 语法 中的一些数据结构 1 MFC就是一个类库 2 MFC
  • unity 在pc平台 重启应用程序

    void ReStart 延迟5秒启动 string strs new string echo off echo wscript sleep 5000 gt sleep vbs start wait sleep vbs start d 0
  • 数据结构之线性表预习

    1 简述线性表中顺序存储结构的含义及主要元素 描述顺序存储结构需要三个属性 1 存储空间的起始位置 数组 data 它的存储位置就是存储空间的存储位置 2 线性表的最大存储容量 3 线性表的当前长度 数组长度 与 线性表长度区别 数组长度
  • C语言结构体中字符数组的问题

    第一个程序 include
  • 选择 dwm 作为窗口管理器的 4 大理由分析

    导读 我喜欢极简 如果可能 我会尽量在一个终端下运行所有需要的程序 这避免了一些浮夸的特效占用我的资源或者分散我的注意力 而且 无论怎么调整窗口大小和位置却依旧无法使它们完美地对齐 这也让我感到厌烦 出于对极简化的追求 我喜欢上了 Xfce
  • 网络体系结构总结

    网络体系结构总结 七层结构 应用层 各种应用 网络虚拟终端 SMTP 文件传输 HTTP EMALL等 表示层 完成特定的常见的功能 关心所传输信息的语法和语义 数据压缩 数据转换 数据加密 会话层 为会话用户提供一个建立连接及在上按顺序传
  • java中JVM的原理

    看过JVM讲解最好的 一 Java虚拟机的生命周期 Java虚拟机的生命周期 一个运行中的Java虚拟机有着一个清晰的任务 执行Java程序 程序开始执行时他才运行 程序结束时他就停止 你在同一台机器上运行三个程序 就会有三个运行中的Jav
  • 【Android Socket专题】:UDP通信客户端app的demo的实现

    Android Socket 专题 UDP Client客户端 http blog csdn net shankezh article details 50731287 UDP Server服务器 http blog csdn net sh
  • 阿里云轻量应用服务器使用指南

    阿里云轻量应用服务器使用指南 云服务器 云服务器 Elastic Compute Service ECS 是一种简单高效 安全可靠 处理能力可弹性伸缩的计算服务 其管理方式比物理服务器更简单高效 用户无需提前购买硬件 即可迅速创建或释放任意
  • 用Unity3D和VuforiaSDK简单做AR应用(实战)

    一 首先来到https developer vuforia com downloads sdk 这里有高通给予的很多开发包 当然也有很多的学习资源 接下来说重点 下载vuforia unity mobile android ios 4 2
  • 白盒测试(程序流程图)

    白盒测试又称结构测试 透明盒测试 逻辑驱动测试或基于 代码的测试 白盒测试是一种 测试用例设计方法 盒子指的是被测试的 软件 白盒指的是盒子是可视的 你清楚盒子内部的东西以及里面是如何运作的 白盒 法全面了解程序内部逻辑结构 对所有逻辑路径
  • 玩转Makefile

    1 前言 Makefile是一个神奇的东西 有了它只需一个make命令就可以让源文件按你的规则编译成你所想要的程序 非常简单 方便 对于Keil VS等IDE 一般只需点一下绿色的三角按钮 就可以完成编译 但具体内部是怎么实现编译的 改动文
  • AI在广告中的应用——预测性定位和调整

    营销人员的工作就是在恰当的时间将适合的产品呈现在消费者面前 从而增加他们购买的可能性 随着时间的推移 营销人员能够深入挖掘越来越精准的客户细分市场 他们不仅具备了实现上述目标的能力 而且这种能力还在呈指数级提升 在AI技术帮助下 现在的营销

随机推荐

  • (优雅的使用)matlab脚本编程习题2

    matlab脚本编程习题2 输入一个四位整数 求出各位数字之和 如果该和能被3整除 输出 这个数可以被3整除 否则输出 这个数不可以被3整除 num input input the four digit integer n A zeros
  • C++解析xml(使用tinyxml)

    环境是vs2010 Windows 7 timyxml库我是在这里下载的 直接就能编译 编译后得到tinyxml lib 使用时当然也需要tinyxml h文件 如果不想编译 这里能下载我编译好的lib 顺便附赠h文件 我程序中解析的xml
  • 【计组】学习笔记1.1:8421码和ASCII码

    8421码 8421码即BCD码 由于人们习惯日常使用十进制数 而计算机处理时使用的是二进制数 而两种数制相互转换十分麻烦 因此产生了8421码映射关系 其映射运算例如 1001转化为十进制数9 1 8 0 4 0 2 0 1 8 0 0
  • python算法中的机器学习算法之半监督学习和强化学习(详解)

    目录 学习目标 学习内容 1 半监督学习 Semi Supervised Learning 基于图的半监督学习
  • 编码器计数原理与电机测速原理——多图解析

    编码器 是一种用来测量机械旋转或位移的传感器 它能够测量机械部件在旋转或直线运动时的位移位置或速度等信息 并将其转换成一系列电信号 编码器分类 按监测原理分类 光电编码器 光电编码器 是一种通过光电转换将输出轴上的机械几何位移量转换成脉冲或
  • 使用Pycharm,tensorflow1.13.1中的keras等库出现cannot find declaration to go to的问题

    使用Pycharm tensorflow1 13 1中的keras等库出现cannot find declaration to go to的问题 使用Pycharm编写python程序 import numpy os 使用ctrl 鼠标左键
  • python编译成c代码_cython编译Python为c语言

    第一种办法 执行命令 cython test py 结果 会在同一目录下面生成test c文件 执行命令 gcc c fPIC I usr include python2 7 test c 结果 在同一目录下面生成test o文件 执行命令
  • Windows下Apache Tomcat 8安装配置

    1 环境配置 1 安装好jar jdk文件包 jdk1 8 0 66与jre1 8 0 66 打开我的电脑 属性 高级 环境变量 新建系统变量JAVA HOME 和CLASSPATH 变量名 JAVA HOME 变量值 C Program
  • vue调用高德地图实现定位

    vue调用高德地图实现定位 第一步创建高德地图key 第二步 下载vue amap npm install vue amap save 第三步 在项目main js引入vue amap import AMap from vue amap V
  • RedmiBook pro15 2023款折腾笔记(7840HS)amd-pstat解决APU睿频问题

    这里记录一下RedmiBook pro15 2023款笔记本 7840HS 搭建ubuntu 22 04系统的记录 留给正好需要在这个笔记本上安装linux环境的童鞋参考一下 其他AMD的APU都是类似的 拿到机器过后安装ubuntu 22
  • 操作系统终端输入大小限制

    问题描述 使用c 写算法题时 测试用例是一个长字符串 上万字符 但运行结果显示字符串读入的长度远远小于输入长度 并且不同操作系统下面显示出了不同的bug macos 输入字符串长度只有1000 超过这个长度成都就会卡在cin那行代码 ubu
  • 裸片IC的简单介绍以及裸片IC的封装设计

    最近项目一直用到一种比较旧的PCB生产工艺 裸片IC 也就是绑定的工艺 1 什么是裸片IC 裸片既是在加工厂生产出来的芯片 即是晶圆经过切割测试后没有经过封装的芯片 大小一般在几毫米左右 边上有用于连接金属线的的焊盘或者小孔 金属线这是连接
  • 02rapidJson学习之数组的创建、遍历

    02rapidJson学习之数组的创建 遍历 概述 创建数组时我们需要注意以下内容 1 不能直接返回数组 我试过不行 因为数组必须依赖某一对象 即若我们不将数组添加到doc上 而直接返回数组是不行的 1 数组的创建 从doc中获取strin
  • Github 本地合并 (merge) 他人提交的 pr

    Github 上有些项目可能作者长时间没有进行维护 会出现有些新的 pr 没有合并到主分支 master 上 这时如果想在本地应用这个新的 pr 呢 一般来说主要有以下几种方式 针对提交的pr 查看具体的改动文件和改动内容 然后在本地进行对
  • git log 后一直出现:(冒号)的原因以及处理方法

    博客主页 https blog csdn net mukes 欢迎点赞 收藏 留言 如有错误敬请指正 本文由 mukes 原创 首发于 csdn 问题重现 在 git bash 中输入 git log 时出现 冒号 如下图所示 问题描述 一
  • Android酷炫实用的开源框架(UI框架)

    Android酷炫实用的开源框架 UI框架 前言 忙碌的工作终于可以停息一段时间了 最近突然有一个想法 就是自己写一个app 所以找了一些合适开源控件 这样更加省时 再此分享给大家 希望能对大家有帮助 此博文介绍的都是UI上面的框架 接下来
  • web初始

    个人学习开始 写的不好 请大佬指教
  • 机器学习实战——Kmeans聚类算法

    机器学习实战 Kmeans聚类算法 1 聚类算法介绍 1 1 K 均值聚类 1 2 聚类效果的评价 2 sklearn中的实现 1 聚类算法介绍 在无监督学习中 训练样本的标记是未知的 目标是通过对无标记训练样本的学习来揭示数据的内在性质及
  • 纷玩岛演唱会下单代码

    继大麦M端之后 再发现一个演唱会平台 纷玩岛 此平台不像大麦 猫眼那么火爆 相对来说比较容易研究 通过抓包软件发现下单很简单 就一个JWT登录后的头部token而已 下载地址 https download csdn net download
  • 结构体对函数指针的高级封装应用

    分层设计考虑 作用 降低对底层应用程序的高耦合度 示例 include mac h typedef struct phy t char channel char snd fail count char name char open flag