[技术问答] 请教 s_I2C0HandlerFn = (I2C_FUNC)I2C_MasterTx;是函数调用吗?

[复制链接]
2120|13
 楼主| sunhhl 发表于 2019-3-31 15:47 | 显示全部楼层 |阅读模式
本帖最后由 sunhhl 于 2019-3-31 16:17 编辑

在看新唐IIC例程时,这行不明白什么意思,特请教一下,这是函数调用吗? s_I2C0HandlerFn = (I2C_FUNC)I2C_MasterTx;怎么不用写参数吗?
21mengnan 发表于 2019-3-31 22:58 | 显示全部楼层
        /* I2C function to write data to slave */
        s_I2C0HandlerFn = (I2C_FUNC)I2C_MasterTx;
21mengnan 发表于 2019-3-31 22:58 | 显示全部楼层
编译后,你可以定位一下这个原型。
21mengnan 发表于 2019-3-31 22:58 | 显示全部楼层
看看原型具体是个什么。
小灵通2018 发表于 2019-3-31 23:10 | 显示全部楼层
你注意到没有,回调函数。
小灵通2018 发表于 2019-3-31 23:11 | 显示全部楼层
小灵通2018 发表于 2019-3-31 23:12 | 显示全部楼层
729585ca0d8bec7fb3.png
这里定义了一个函数指针。
然后那两句是将回调函数传递给执行函数。
小灵通2018 发表于 2019-3-31 23:16 | 显示全部楼层
回调函数是被中断函数调用了。
小灵通2018 发表于 2019-3-31 23:16 | 显示全部楼层
小灵通2018 发表于 2019-3-31 23:18 | 显示全部楼层
请注意上面这个中断函数的else分支。
意思是发生了中断,执行后面的s_I2C0HandlerFn(u32Status);
而你问的那两个就是给这个函数传递回调函数的地址的,指针,请注意指针。
小灵通2018 发表于 2019-3-31 23:19 | 显示全部楼层
所以这个例子里采用了高级的C语言成分:函数指针,回调函数,通过指针调用函数。
小灵通2018 发表于 2019-3-31 23:22 | 显示全部楼层
多亏你没有去学STM32,那个系列的更坑,遇到中断就是用回调的。搞晕人。函数套函数,还有功能冲突的。坑爹的很,新唐这个其实如果你认真看一遍例子,再懂一点指针,和函数指针的概念,基本上是没有难度的。
21mengnan 发表于 2019-4-1 20:09 | 显示全部楼层
原来是函数指针啊,多谢上面高手讲解。
 楼主| sunhhl 发表于 2019-4-16 22:34 | 显示全部楼层
算是明白一些了,十分感谢。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

37

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部