打印
[技术问答]

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

[复制链接]
1794|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 | 只看该作者
看看原型具体是个什么。

使用特权

评论回复
5
小灵通2018| | 2019-3-31 23:10 | 只看该作者
你注意到没有,回调函数。

使用特权

评论回复
6
小灵通2018| | 2019-3-31 23:11 | 只看该作者

使用特权

评论回复
7
小灵通2018| | 2019-3-31 23:12 | 只看该作者

这里定义了一个函数指针。
然后那两句是将回调函数传递给执行函数。

使用特权

评论回复
8
小灵通2018| | 2019-3-31 23:16 | 只看该作者
回调函数是被中断函数调用了。

使用特权

评论回复
9
小灵通2018| | 2019-3-31 23:16 | 只看该作者

使用特权

评论回复
10
小灵通2018| | 2019-3-31 23:18 | 只看该作者
请注意上面这个中断函数的else分支。
意思是发生了中断,执行后面的s_I2C0HandlerFn(u32Status);
而你问的那两个就是给这个函数传递回调函数的地址的,指针,请注意指针。

使用特权

评论回复
11
小灵通2018| | 2019-3-31 23:19 | 只看该作者
所以这个例子里采用了高级的C语言成分:函数指针,回调函数,通过指针调用函数。

使用特权

评论回复
12
小灵通2018| | 2019-3-31 23:22 | 只看该作者
多亏你没有去学STM32,那个系列的更坑,遇到中断就是用回调的。搞晕人。函数套函数,还有功能冲突的。坑爹的很,新唐这个其实如果你认真看一遍例子,再懂一点指针,和函数指针的概念,基本上是没有难度的。

使用特权

评论回复
13
21mengnan| | 2019-4-1 20:09 | 只看该作者
原来是函数指针啊,多谢上面高手讲解。

使用特权

评论回复
14
sunhhl|  楼主 | 2019-4-16 22:34 | 只看该作者
算是明白一些了,十分感谢。

使用特权

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

本版积分规则

8

主题

35

帖子

1

粉丝