嵌入式C与C++封装的回调函数(嵌入式)
嵌入式与C项目封装里的回调函数什么是回调函数回调函数简单说就是在某个特定事件发生的时候会被自动调用的函数。比如在嵌入式里一个引脚默认上拉是高电平。当外界输入低电平时引脚捕获到电平跳变就会触发一个回调函数。如果你在回调函数里写“点亮LED”的逻辑就实现了引脚变化控制灯亮。又比如外部中断触发定时器时间到了串口收到数据这些事件发生的时候芯片需要处理数据但你不知道什么时候会来。所以就把处理函数提前注册进去等待触发。嵌入式里的回调注册voidmy_function(void){// 这是我的处理代码}// 把 my_function 的地址注册给芯片register_interrupt_handler(my_function);当对应事件发生时芯片就会自动调用 my_function。函数指针是什么我们知道指针是存储一个变量地址的东西。比如int x 5;int *p x; // p 存储了 x 的地址那么函数指针就是存储函数地址的变量。voidmy_function(intvalue){printf(%d\n,value);}如果我们把 my_function 的地址存到一个变量里之后就可以通过这个变量来调用它。在 C 里声明一个指向“接收int参数、返回void”的函数指针可以这样写typedefvoid(*callback_t)(int);void函数的返回类型这里是空。(int)函数接收一个 int 参数。callback_t这个指针类型的名字。*说明它是一个指针。所以合起来就是callback_t 是一个指向“接收int、返回void”函数的指针类型。GPIO回调#includestdio.h// 定义一个处理函数voidgpio_change(intpin){printf(GPIO %d changed\n,pin);}// 定义一个指向函数的指针变量void(*callback_ptr)(int);// 注册函数接收一个函数指针存储到全局变量voidGPIO_set_callback(void(*cb)(int)){callback_ptrcb;}// 检测函数模拟检测到了哪一个引脚voidGPIO_PIN_detect(void){intpin10;if(callback_ptr!NULL){callback_ptr(pin);// 调用回调函数}}intmain(){GPIO_set_callback(gpio_change);// 注册处理函数GPIO_PIN_detect();// 检测到变化回调触发return0;}void (*callback_ptr)(int);定义一个函数指针变量指向“参数为int、返回类型为void”的函数。GPIO_set_callback接收一个函数地址保存到全局变量中。GPIO_PIN_detect模拟检测到GPIO变化检查回调指针是否为空然后调用它。因为 callback_ptr 在注册时被赋值为 gpio_change所以callback_ptr(pin);等价于gpio_change(pin);你写的处理函数: gpio_change(int)↑| 地址|注册函数: GPIO_set_callback(gpio_change)|v全局变量: callback_ptr gpio_change检测时:GPIO_PIN_detect() - 检查callback_ptr非空 - callback_ptr(10)|v相当于调用 gpio_change(10)

相关新闻

终极Adobe破解方案:如何免费解锁Photoshop等专业设计软件

终极Adobe破解方案:如何免费解锁Photoshop等专业设计软件

终极Adobe破解方案:如何免费解锁Photoshop等专业设计软件 【免费下载链接】Adobe-GenP Adobe CC 2019/2020/2021/2022/2023 GenP Universal Patch 3.0 项目地址: https://gitcode.com/gh_mirrors/ad/Adobe-GenP 还在为昂贵的Adobe订阅费发愁吗?Ad…

2026/8/14 2:31:21 阅读更多 →
Bambu Studio切片软件终极指南:4个高频疑问一次讲透

Bambu Studio切片软件终极指南:4个高频疑问一次讲透

Bambu Studio切片软件终极指南:4个高频疑问一次讲透 【免费下载链接】BambuStudio PC Software for BambuLab and other 3D printers 项目地址: https://gitcode.com/GitHub_Trending/ba/BambuStudio 如果你刚入手一台Bambu Lab 3D打印机,或者正在…

2026/8/14 2:31:21 阅读更多 →
5步学会Switch游戏备份:nxdumptool把卡带与数字版转成XCI/NSP的全攻略

5步学会Switch游戏备份:nxdumptool把卡带与数字版转成XCI/NSP的全攻略

5步学会Switch游戏备份:nxdumptool把卡带与数字版转成XCI/NSP的全攻略 【免费下载链接】nxdumptool Generates XCI/NSP/HFS0/ExeFS/RomFS/Certificate/Ticket dumps from Nintendo Switch gamecards and installed SD/eMMC titles. 项目地址: https://gitcode.com…

2026/8/14 2:31:21 阅读更多 →

最新新闻

VSCode搭建现代化汇编开发环境:从编写到图形化调试全攻略

VSCode搭建现代化汇编开发环境:从编写到图形化调试全攻略

1. 项目概述:为什么要在VSCode里折腾汇编和调试?如果你对计算机底层运行机制着迷,或者正在学习操作系统、计算机组成原理这类硬核课程,汇编语言是你绕不开的一道坎。但一提到汇编,很多人的第一印象可能就是古老的DOS界…

2026/8/15 5:14:05 阅读更多 →
IDEA控制台颜色丢失问题排查:从ANSI原理到Spring Boot/Maven配置

IDEA控制台颜色丢失问题排查:从ANSI原理到Spring Boot/Maven配置

1. 问题现象与初步排查:当你的控制台失去了色彩作为一名常年泡在IDEA里的开发者,你肯定遇到过这种情况:运行一个Spring Boot项目,或者执行一段精心配置了日志颜色的Maven命令,满心期待控制台里能跳出赏心悦目的彩色输出…

2026/8/15 5:14:05 阅读更多 →
老显卡UEFI启动黑屏?手把手教你注入GOP模块实现完美支持

老显卡UEFI启动黑屏?手把手教你注入GOP模块实现完美支持

1. 项目缘起:当老显卡遇上UEFI新世界最近在折腾一台老机器,想把系统从传统的Legacy BIOS引导升级到更现代的UEFI模式。UEFI的好处大家都知道,启动更快、支持大硬盘、安全性更高。但就在我兴冲冲地把硬盘分区表从MBR转成GPT,主板设…

2026/8/15 5:14:05 阅读更多 →
PPO强化学习算法:从原理到工程实践详解

PPO强化学习算法:从原理到工程实践详解

1. 项目概述:从策略梯度到PPO的演进之路如果你已经跟着前面的系列文章,从Q-Learning、DQN一路走到策略梯度(Policy Gradient)和Actor-Critic,那么恭喜你,你已经站在了现代深度强化学习(DRL&…

2026/8/15 5:14:05 阅读更多 →
Windows 10 安装 MySQL 8.0 全攻略:从下载到配置避坑指南

Windows 10 安装 MySQL 8.0 全攻略:从下载到配置避坑指南

1. 项目概述:为什么MySQL 8.0的安装值得你花时间如果你正在Windows 10上折腾一个Web项目,或者想学习后端开发,数据库这一关是绕不过去的。MySQL作为最流行的开源关系型数据库之一,几乎是每个开发者的标配。但说实话,我…

2026/8/15 5:14:05 阅读更多 →
从成绩转换器到决策系统:条件分支与映射规则的编程实践

从成绩转换器到决策系统:条件分支与映射规则的编程实践

1. 项目概述:从分数到等级的映射逻辑最近在辅导几个刚入门编程的朋友,发现他们做的第一个有交互感的小程序,往往就是这个“成绩等级转换器”。输入一个分数,程序就能告诉你对应的等级是A还是B。这看起来简单得不能再简单了&#x…

2026/8/15 5:13:05 阅读更多 →

日新闻

内景 空间站内部 中国空间站 太空 内仓

内景 空间站内部 中国空间站 太空 内仓

本项目为前几天收费帮学妹做的一个项目,在工作环境中基本使用不到,但是很多学校把这个当作编程入门的项目来做,故分享出本项目供初学者参考。 一、项目描述 空间站内部 中国空间站 太空 内仓 地址:本地PC端运行(或Web…

2026/8/15 0:00:30 阅读更多 →
重新定义数据接口:3个突破性场景让通达信数据读取更智能

重新定义数据接口:3个突破性场景让通达信数据读取更智能

重新定义数据接口:3个突破性场景让通达信数据读取更智能 【免费下载链接】mootdx 通达信数据读取的一个简便使用封装 项目地址: https://gitcode.com/GitHub_Trending/mo/mootdx 当我们面对海量金融数据时,传统的数据获取方式往往让我们陷入困境—…

2026/8/15 0:00:30 阅读更多 →
一文读懂快消WMS怎么选?2026年国内外10大主流WMS品牌盘点

一文读懂快消WMS怎么选?2026年国内外10大主流WMS品牌盘点

快消品(FMCG)是流通速度较快、竞争较为激烈的行业之一。一瓶饮料从出厂到消费者手中,往往只有几十天甚至几天的周转窗口。这决定了快消行业的仓储管理系统(WMS)与制造业、电商行业存在明显区别:它不仅需要管…

2026/8/15 0:02:30 阅读更多 →

周新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/13 2:38:34 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/13 10:41:52 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/13 10:41:51 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/14 13:40:53 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/14 14:06:45 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/15 2:35:29 阅读更多 →