范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

C语言嵌入式重点知识回调函数

  前言
  上文分享了一个专用的双链表的基本操作示例:双链表的基本操作
  这里提到了一个关键词:专用。与专用对应的词是通用。我们从字面上可以很容易理解这两个词,专用就是针对特定情况的,特点就是很有局限性;通用就是可以针对大多数情况(更理想的就是所有情况),特点就是适用性广。
  为什么说上篇笔记的双链表是专用的?
  从我们的定义的元素数据类型就可以知道,我们这个双链表是只是用来存储int类型的数据的,这就很能体现出了局限性(这只是其中一点,当然还有其它的很多局限性),因此是个专用的双链表。
  我们要编写一个通用的双链表的话,我们首先要做的是就是修改双链表结点结构体了,可以修改为:
  如果我们要存放整数,我们可以把void*强制转换成整数使用。当然这篇笔记的重点不是分享通用的双链表。我们这篇笔记要分享的是回调函数,下面进入重点内容:回调函数法 VS 常规法
  我们上篇笔记中有一个打印输出链表数据的函数:
  这是我们这个专用的双链表中打印链表数据函数,我们存储的是整数,所以用%d打印。那么,如果我们面向的是通用的双链表呢?我们无法预知其中的数据,可能是整数,也可能是字符串,或者是其它的数据。那么怎么办呢?这里有几种方法:
  方法一:实现多个函数,需要用到哪个就调哪个
  比如存放的是整数,可以调用dlist_print_int函数来打印;存放的是字符串,可以调用dlist_print_string函数来打印。
  这种方法很简单,但有个缺点:每个函数都很相似,会有大量重复的代码。
  方法二:传入一个附加的参数来选择打印的方式
  这种方法使用一个参数来选择打印的方式。避免了方法一中产生大量重复的代码的问题。但是我们每当要增加新类型时,都得修改这个dlist_print函数,对于一个通用的双链表来说,这样的修改是不够好的。这里dlist_print函数也是通用双链表的一部分,我们应该尽量少去修改它。
  假如我们把一个通用的双链表的基础操作比喻做一栋楼房的地基,地基一旦牢牢固固的搭好之后,我们就不要再去动它了, 应该把精力放在如何搭建房子的上层上。
  方法三:回调函数法
  上面两种方法应该是很容易想到的方法。现在来分享我们可能想不到的方法——回调函数法,这也是本篇笔记要分享的重点。
  可能有很多朋友没用过回调函数,甚至有些朋友都没听说过。这里先简单介绍回调函数的一些概念(以下概念来自百度百科):
  回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。
  回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。
  知识点:变量指针指向的是一块数据,指针指向不同的变量,则取到的是不同的数据;函数指针指向的是一段代码(即函数),指针指向不同的函数,则具有不同的行为。
  回归正题,下面看如何使用回调函数法来实现上面的需求。
  首先,我们需要实现一个通用的打印函数dlist_print,把函数指针变量作为其中一个参数传入。其次,我们调用者得根据实际情况实现一个用于打印的回调函数,这里我们实现的的回调函数是dlist_print_int。最后,在用到打印的地方调用dlist_print函数即可。
  用回调函数法是不是很巧妙?
  此处,我们用到了typedef来"封装"一个打印链表数据的函数指针类型,这可能会刷新了初学者对于typedef关键字的认识。因为我们刚开始学C语言的时候,总认为typedef取别名的一般形式为:typedef  旧名字  新名字;
  确实也是这样,但遇到给函数指针类型、数组类型等定义别名的时候就要特别区分了。如:typedef char ARRAY20[20]; ARRAY20 a1,a2; /* 等价于char a1[20],a2[20]; */
  别问我为什么,就是这样的…
  回调函数的例子
  上面分析了那么多,可能很多朋友会觉得回调函数太麻烦了,没必要用。但是现实是,回调函数在我们的C编程、嵌入式编程中用得很广泛。
  1、在C编程中
  在C语言的通用工具库stdlib.h中,有如下一个函数原型:void qsort(void *, size_t, size_t, int (comp*)(const void *, const void *));
  这是在C通用工具库中声明的一个快速排序算法函数,其可以用来排序int类型、float类型以及字符串数据,可以按从小到大的顺序也可以按从大到小的顺序排序。其关键在于函数指针comp指向的函数的具体实现。
  2、在嵌入式编程中
  我们之前的笔记:【RT-Thread笔记】PIN设备中断配置中,就有用到回调函数。RT-Thread给我们提供了PIN设备中断回调绑定函数:rt_pin_attach_irq
  这是个中断实验,产生中断会回调我们的回调函数,所以可以在在我们的回调函数里做一些产生中断后需要做的操作。比如我们在这个中断回调里打印一串字符串。每当中断来时,就会打印该字符串:
  总结
  回调函数是一个很重要的知识点,我们需要掌握。而回调函数又与函数指针联系密切,我们要努力把函数指针弄懂、用熟。在C语言中,指针很重要,函数指针更重要。正如前辈们常说类似这样子的话:不会C指针,就没学会C语言;不会函数指针,就不要称自己是C语言高手。
  在这几种方法中的分析中,其实回调函数更多的是体现出了软件分层的思想。分层思想在我们软件开发中是一种很重要的思想,简单的分层我们都会,但是怎么才能算是分层分得很好呢?那就是不该动的地方不动,该动的地方才动,衔接得很好,就像上面的回调函数法。
  对于编程的学习,关于编程语言的学习,知识点就那么一点,很快就能学完了,但是真正灵活的、熟练应用起来真的是不容易,这需要我们大量地分析、思考、练习。有时间的话我们也应该多读读一些关于软件设计思想的书籍,这也是我最近在读的一类书,学学前辈们总结出的一些精华知识。
  以上就是本次关于回调函数的笔记分享,如有错误,欢迎指出。

5G来了!4G就可以不用了吗?哪些是必须用5G的呢?5G来了!让人充满想象。近日,记者搜集了一些大家对5G最感兴趣的话题,采访了10余位业内权威专家,提取干货,以期大家快速准确了解5G。5G就是比4G多了1个G?5G更快更聪明。常说2019年新能源汽车补贴政策落地续航里程250公里以下电动车取消补贴每经记者段思瑶实习记者张北每经编辑裴健如图片来源摄图网期盼了3个月之久的2019年新能源汽车补贴政策终于落地。3月26日,财政部等四部委发布了关于进一步完善新能源汽车推广应用财政补我用上了微软Chromium内核的Edge浏览器,真是不胜唏嘘图片来源视觉中国文航通社,作者书航去年年底,微软宣布将放弃自己开发的EdgeHTML内核,把Windows10内置的默认浏览器Edge,转换成跟谷歌浏览器同样采用Chromium内诺基亚X71下周发布挖孔屏4800万主摄继189全面屏刘海屏水滴屏之后,又一种新的全面屏形态登场挖孔屏。像三星GalaxyS10系列GalaxyA8s华为nova4荣耀V20等手机都采用了类似的设计方案,现在诺基亚首款挖这7款PDF工具,几乎满足你对pdf的所有需求Java识堂,一个高原创,高收藏,有干货的微信公众号,一起成长,一起进步,欢迎关注给大家推荐7款不错的PDF工具,废话就不多说了,直接看下面推荐!1PDFCandyPDFCandy华为EMUI9。1发布神油优化持久流畅在P30的发布会上,华为正式发布了旗下的EMUI9。1系统。和EMUI9。0一样,EMUI9。1依然是基于Android9。1打造的,尤其是号称拥有DNA级别的深度优化,可以带来超为什么现在的智能机,不再选用金属外壳?现在换手机的频率是越来越快了,各个手机厂商发布新机的速度也越来越频繁了,前几年像魅族在和阿里蜜月期时,大家对于魅族发布新机就像是例假一样雷打不动。光是今年国内各大手机厂商就新机不断理想抵不过现实,最值得看好的造车新势力钱途生变,不是蔚来在小李车评看来,2019年不管对于传统汽车行业还是造车新势力来说,都将是异常艰难的一年,尤其对于造车新势力们来说,扎堆进入电动车行业,产品的同质化以及行业整体的不成熟必将导致有很大宝马沈阳大东工厂再次见证奇迹诞生沈阳网沈报融媒讯(记者杨晓楠)3月26日,汇聚全球顶级供应商的2019年华晨宝马供应商大会在沈举行。会上抛出了一个个令人振奋的重磅消息2020年,宝马大东工厂将生产纯电动BMWiX红极一时的Papi酱,现在怎么样了?互联网创业时代真的过去了吗?2015年末,Papi酱凭着风格独特的短视频横空出世,很快便火了。在2015年年度网红排名榜中papi酱仅次于王思聪获得了第二名,可见其影响力之大。2016年的Papi酱犹如坐上了索尼四大部门合为一体OneSony战略再度出击昨晚,索尼发布了一则重要公告,表示索尼将在今年4月1日起对影像部门家庭娱乐部门音乐部门以及移动通讯部门进行重组,将这四个部门合并为消费电子产品与解决方案事业部。并且将任命原索尼影像
阿里性侵案受害者iPhone坑了我想必大家都对最近两天发生的阿里巴巴女员工性侵案有所耳闻,此事可以说在曝光的同时就引起了全网的关注和热议,网上也有许多网友在声援和支持被害者的维权,阿里巴巴内部已经成立相关调查组跟进川菜名可以注册商标吗?看法院怎么说近日,一枚核定使用在鸡精(调味品)香辛料等商品上的美蛙鱼头商标(简称诉争商标),因违反商标法第十一条第一款第(二)项的规定,被国家知识产权局予以无效宣告。美蛙鱼头本是以美国青蛙花鲢特斯拉面特斯拉闪电球,特斯拉商标被抢麻烦不断最近几日,特斯拉可谓是处在风口浪尖,一言一行均会被全网瞩目。先来为不清楚缘由的小伙伴们科普一下。2021年3月,河南一特斯拉主车张女士因特斯拉刹车失灵,导致父母受伤住院,后因不接受迪士尼新晋女明星玲娜贝儿,商标被抢注?最近,你有没有被一只粉粉嫩嫩的小狐狸给萌化呢?如果你见到这只小狐狸,可别说不认识她。她可是当下最红的女明星,迪士尼的新角色呢。她的名字叫玲娜贝儿,因为是小狐狸形象,又是生活在位于上张家诗词(2)相信的力量相信相信的力量作者张浩天编辑天美五星曾经因为相信,有过无数次上当,一次次迷茫,一次次彷徨,一次一次上当的过程,让我一点一点的成长。相信相信的力量,正是因为相信,依旧对人生充满希望,致农民作家高启伟(1)致农民作家高启伟(1)作者闲云野鹤(2019。12。25)农民作家高启伟三部巨作心无愧心牵百姓忧与苦惮精竭力不觉累湖北女婿杨岭峰生意红火又成功知音唱歌嗓子亮歌咏比赛登金榜麻雀管群倾奥迪Q5L试驾45TFSI豪华致雅型,配双多连杆式悬挂操控不弱!在中型豪华SUV市场,奥迪Q5L是不错的主力军之一,从7月份公布的销量来看,卖出7503台,虽然比不过宝马X3,但也是市场中的中坚力量。目前在售奥迪Q5L外观上分为两种方案,一种是星越L试驾2。0T四驱旗舰型,配矩阵式LED大灯24。6英寸主副双屏今年7月份上市的星越L,早早就吸引了一批眼球,从公布的销量来看,首月就卖出了6059台,从目前趋势来看,后劲十足。作为一款紧凑型SUV,星越L厂商指导售价在13。7218。52万之大众ID。4X试驾Pro极智长续航版,555km续航后置单电机!不仅仅是造车新势力把目光聚焦到纯电动市场,很多老牌厂商也是如此,就拿大众来说,在今年1月份推出了ID。4X。定位上是一款紧凑型SUV,续航上分为多个标准,最低在402公里,最高在5成都车展亮相,实拍雪铁龙凡尔赛C5X,未来将推PHEV车型!成都车展可谓备受关注,很多厂商都是带了家族重磅车型前来,东风雪铁龙旗下的凡尔赛C5X就是其中之一。之前已经开启过预售,价格在14。3718。67万之间,上市时间预计在今年9月份,对定位中型SUV,星途凌云400T正式上市,标配2。0T引擎起售15。79万!星途汽车这几年一直不显山不显水,但家族新款车型一直在进行推动,目前刚上市的凌云400T就是很好的案例。新车定位是一款中型SUV,将基于全新M3X火星架构PRO打造,售价相对于预售的