函数指针有啥用?有啥意义?
时间: 2024-04-28 08:53:38 | 来源: 小九直播体育下载
有些东西就是这样,自己明白该怎么用,用在哪,但如果一下子让我很通俗易懂地表达出来,脑子就卡壳了。
昨晚夜深人静,我想到了正好我们wifi报警主机那个项目有个例子,很适合去深刻理解。
这个项目我们对接的是涂鸦云平台,然后涂鸦云提供SDK,我们应该移植到我们自己的项目里去。
在移植的过程中,我们应该去更改他们SDK里面的代码,我觉得这点是可以优化的。
比如个人会使用的涂鸦云提供的WiFi模组,通过串口和我们单片机连接,有一个通讯协议,但是涂鸦云帮我们做好了这个通讯协议的代码,所以会提供一个SDK给我们。
我们在使用SDK的时候,需要修改SDK的代码,把我们这款单片机的串口发送一个字节的函数,移植到SDK里面去。
如果采用这样的形式,有一种功能实现不了,就是假设涂鸦云这个SDK要封库(lib文件),源码不开放,我们就没法把Hal_Wifi_SendByte放到protocol.c文件的usart_transmit_output函数里面去。
是不是会有这样的一个问题?这在某种程度上预示着,protocol.c必须开源,但是很多企业有一些核心代码,是商业机密,不能开放的,比如做导航的地图数据库。
客户的技术水平层次不齐,如果有些基础稍微差点的,把SDK改乱了,这样会增加涂鸦云技术上的支持的人工成本。
所以,如果我去做,最理想的是不让客户改SDK的任何代码,你就直接按照我的方法和流程,调用函数用。
第三步:修改protocol.c文件下uart_transmit_output函数,直接调用刚刚定义的函数指针变量Uart_transmit_outputCBS,记住调用前,必须要指针不为空的条件判断,否则,如果指针调用前没正确指向,会造成指针异常,程序死机。
第四步:在protocol.c文件下编写Uart_transmit_outputCBS函数指针的注册函数,也就是让这个函数指针变量指向一个地址的函数接口。
为什么要单独写个函数呢?因为我们理想的情况下,是提供函数接口,给别的.c文件调用,而不是用全局变量的形式。
这就是函数指针的作用,这样就能实现,客户不修改SDK代码,SDK也能调用客户工程下.c文件里的函数了。
这些技巧不复杂,就像纱窗,有人指点一下,很快就捅破了,没人指点,可能很多年都领悟不了,这也是进阶架构师必须要掌握的技巧。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。举报投诉
?2.AP_IOMCU文件具体代码3.总结摘要本节主要学习AP_IOMCU这个文件夹下的东西是做什么
区别?1、软件方面这应该是最大的区别了。引入了操作系统。为什么引入操作系统?
什么好处嘛?1)方便。大多数表现在后期的开发,即在操作系统上直接开发应用程序。不像单片机
区别? 1、软件方面 这应该是最大的区别了。引入了操作系统。为什么引入操作系统?
什么好处嘛? 1)方便。大多数表现在后期的开发,即在操作系统上直接开发应用程序
Arduino做出网上常见的60%的项目。C语言基础和一点面向对象语言编程概念Arduino编程时使用C++,但是C++是兼容C语言的,一些简单基础的部分
的,没太听清楚,在网上也没看见,感到很新奇,就想问问有没有人了解这一个牌子,还有这个牌子关于
Flash Interface中AXI Interface和TCM Interface具体
M7内核的MCU目前只用过H743和H7B0,在配置Cortex Interface时没这个选项,这两天开始
F767ZGT6,在用CubeMX配置工程时发现F7在这里多了不少项,想问问各位Flash Interface 中AXI Interface和TCM Interface具体
本帖最后由 *** 于 2017-11-19 20:51 编辑 MAX中的DAQmx和labview软件中的DAQmx创建通道
MRS的汇编设置assembler和assembler-with-cpp
各位大佬,如图,MRS 的汇编设置 assembler 和 assembler-with-cpp
例程 WebServer 参考 FreeRTOS,移植了FreeRTOS的代码,但是编译报错,如下图,是哪里没设置好吗?
js实现获取应用信息,包括应用名称,图标等信息,没什么问题;但当我想用ets实现的时候,感觉各种不对劲,API看上去没问题,但是获取不到想要的东西,甚至报错。
?一个bootloader可以切换到X86保护模式能够读磁盘并加载ELF执行文件格式显示字符一个OS能处理时钟中断显示字符项目组成
区别吗,STM32的PWM和DAC一级目录二级目录三级目录一、STM32F103输出一路PWM波形一级目录二级目录三级目录一、STM32F103输出一路PWM波形
stm32f0启动文件里的TSC_IRQHandler与TS_IRQHandler,
启动文件里的TSC_IRQHandler与TS_IRQHandler,
));ijk-aa=0x00;ijk-bb=0xff;}2.在text2.h中,有如下代码:struct a; //不知
,我注释了,编译器也没报错typedef struct a b;//取
互斥信号量保护的一个u8全局变量就和消息邮箱具有同样的传递数据的功能,这么一来消息邮箱用起来不就没什么
什么是占空比,占空比就是高电平的长度除于总长度乘于百分之百,得到的就是占空比,这个是不同的占空比的:PWM与LED呼吸灯
关系?我们学过物理的同学必须要知道,我们的占空比越大,做的功就越大,所以LED灯就越亮,反之,一样的原理。就像我们学过的物理一样(W=UIt),所以我们调节占空比就能灯的亮度。二、代码编写
使用的是64PIN的28035,我想问一下使用Internal VREG和不使用Internal VREG
区别,在什么应用条件下Enable,什么样的条件下Disable。看了datasheet,还不是很清楚,希望大侠帮忙。谢谢
更多志同道合的小伙伴一起分享各自的想法,一起解决困惑的难题。首先是看大佬郭天祥的51单片机C语言教程,先开始是懵逼的的状态,还根本摸不清单片机是
2.嵌入式应用3.PIN 引脚4.外设LED灯:继电器超声波测距模块1.嵌入式是
重点描述如下:软硬件可裁剪对功能、可靠性、成本、体积、功耗等严格要求嵌入式系统是软件和硬件
东东?朋友是做美容的,她从这家 买了一个叫【工业手机】的东东,连在电脑上,给老顾客发短信搞促销,最近生意比较火。工业手机是个
区别,各个库他的优点在哪里。标准库串口通信GPIO初始化外部中断HAL库HAL库其实是标准库更高级的一层封装,深究其实先总结...
求助大神 :Labview中二值化高级形态学中 Distance和Danielsson
Labview中二值化高级形态学中 Distance和Danielsson
区别吧。嵌入式android源码架构:uboot+linux kernel+android(包含文件系统,虚拟机,UI)嵌入式linux:这是大部分人
比如结构体变量a,那么&a是代表a中第一个成员的地址吗,变量名字a也能代表地址吗还有一个问题,结构体
小弟最近在看lwip,感觉真的很痛苦啊~~~恳请哪位大神能有简单通俗的语言告诉我这2个
区别???[C] 纯文本查看 复制代码netif-output = etharp_output;netif-linkoutput = low_level_output;
写在前面此文觉得非常有逻辑性,而且有很多量子计算方面的常识介绍。大部分资料都是网络公开的,这里做了一个汇集。因此,转发到博客里。文章目录(一)量子是个