[技术问答]

请教 s_I2C0HandlerFn = (I2C_FUNC)I2C_MasterTx;是函数调用吗?

[复制链接]
1583|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 | 显示全部楼层
71275ca0d888c9470.png
766985ca0d8978624f.png

使用特权

评论回复
小灵通2018| | 2019-3-31 23:12 | 显示全部楼层
729585ca0d8bec7fb3.png
这里定义了一个函数指针。
然后那两句是将回调函数传递给执行函数。

使用特权

评论回复
小灵通2018| | 2019-3-31 23:16 | 显示全部楼层
回调函数是被中断函数调用了。

使用特权

评论回复
小灵通2018| | 2019-3-31 23:16 | 显示全部楼层
324145ca0d9d4260ed.png

使用特权

评论回复
小灵通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 | 显示全部楼层
算是明白一些了,十分感谢。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

34

帖子

1

粉丝