OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 8438|回复: 11
打印 上一主题 下一主题

请问LWIP中的回调函数怎样传递参数

[复制链接]

33

主题

197

帖子

0

精华

高级会员

Rank: 4

积分
587
金钱
587
注册时间
2015-1-9
在线时间
80 小时
跳转到指定楼层
楼主
发表于 2016-12-22 20:53:19 | 显示全部楼层 |只看大图 回帖奖励 |倒序浏览 |阅读模式
10金钱
在函数IAP_httpd_init();中调用了函数:tcp_accept(pcb, http_accept);
在函数http_accept();中调用了函数:tcp_recv(pcb, http_recv);

最后一个回调函数的部分代码如下:
static err_t http_recv(void *arg, struct tcp_pcb *pcb,  struct pbuf *p, err_t err)
{
  int32_t i,len=0;
  uint32_t DataOffset, FilenameOffset;
  char *data, *ptr, filename[13], login[LOGIN_SIZE], logina[LOGINA_SIZE];
  struct fs_file file = {0, 0};
  struct http_state *hs;
  
  hs = arg;
。。。。。。。
}


那么请问:arg这个参数是哪里传来的呢?

在网上搜索回调函数的资料,似乎都没有明确讲解过回调函数参数传递的问题。
唯有下面网址的文档提到了这个问题,但是只给出了编译结果,没有从C语言的原理方面作出解释。

另外一个问题是“注册回调函数”中的“注册”怎么理解呢?从实验现象来看,似乎只要以太网收到了有效数据就会触发回调函数。但是以我有限的C语言知识无法理解这段在程序初始化的时候写下的代码是怎么在程序初始化完成之后被“触发的”。







1.PNG (69.43 KB, 下载次数: 529)

1.PNG

2.PNG (102.31 KB, 下载次数: 568)

2.PNG

3.PNG (42.61 KB, 下载次数: 534)

3.PNG

1.JPG (69.43 KB, 下载次数: 533)

1.JPG

2.JPG (102.31 KB, 下载次数: 553)

2.JPG

3.JPG (42.61 KB, 下载次数: 531)

3.JPG
君子性非异也,善假于物也
不知常,妄作,凶
纵浪大化中,不喜亦不惧,应尽便须尽,无复独多虑
路漫漫其修远兮,吾将上下而求索
菩萨畏因,凡夫畏果
回复

使用道具 举报

33

主题

197

帖子

0

精华

高级会员

Rank: 4

积分
587
金钱
587
注册时间
2015-1-9
在线时间
80 小时
2#
 楼主| 发表于 2016-12-22 20:54:39 | 显示全部楼层
http://www.docin.com/p-704390500.html
网址忘记发了,图片本不想传,可能由于网速卡没删掉。
君子性非异也,善假于物也
不知常,妄作,凶
纵浪大化中,不喜亦不惧,应尽便须尽,无复独多虑
路漫漫其修远兮,吾将上下而求索
菩萨畏因,凡夫畏果
回复

使用道具 举报

33

主题

197

帖子

0

精华

高级会员

Rank: 4

积分
587
金钱
587
注册时间
2015-1-9
在线时间
80 小时
3#
 楼主| 发表于 2016-12-22 21:07:52 | 显示全部楼层
jiaozhu 发表于 2016-12-22 20:59
还是好好学习下C语言吧  ,回调函数是经常会用到的。

不明白你的回复用意何在,难道是这个问题过于简单不值得回答?连一个方向也不指引给我。
君子性非异也,善假于物也
不知常,妄作,凶
纵浪大化中,不喜亦不惧,应尽便须尽,无复独多虑
路漫漫其修远兮,吾将上下而求索
菩萨畏因,凡夫畏果
回复

使用道具 举报

33

主题

197

帖子

0

精华

高级会员

Rank: 4

积分
587
金钱
587
注册时间
2015-1-9
在线时间
80 小时
4#
 楼主| 发表于 2017-7-11 19:21:55 | 显示全部楼层
wrnb11 发表于 2017-7-10 15:28
楼主这个问题搞清楚了吗。。。我这里也很困惑

这个问题我也搁置下来了。不过最近看UCOSIII的回调函数写法比较典型,也比较容易理解,你可以看看软件定时器部分的源码。
君子性非异也,善假于物也
不知常,妄作,凶
纵浪大化中,不喜亦不惧,应尽便须尽,无复独多虑
路漫漫其修远兮,吾将上下而求索
菩萨畏因,凡夫畏果
回复

使用道具 举报

33

主题

197

帖子

0

精华

高级会员

Rank: 4

积分
587
金钱
587
注册时间
2015-1-9
在线时间
80 小时
5#
 楼主| 发表于 2017-7-14 17:36:46 | 显示全部楼层
wrnb11 发表于 2017-7-13 23:37
楼主,我找到回调函数参数传入的地方了!!
udp_input()函数中一的句代码

君子性非异也,善假于物也
不知常,妄作,凶
纵浪大化中,不喜亦不惧,应尽便须尽,无复独多虑
路漫漫其修远兮,吾将上下而求索
菩萨畏因,凡夫畏果
回复

使用道具 举报

33

主题

197

帖子

0

精华

高级会员

Rank: 4

积分
587
金钱
587
注册时间
2015-1-9
在线时间
80 小时
6#
 楼主| 发表于 2017-8-15 18:25:04 | 显示全部楼层
wrnb11 发表于 2017-7-13 23:37
楼主,我找到回调函数参数传入的地方了!!
udp_input()函数中一的句代码

我也随便找到了一处:
pcb->recv(pcb->recv_arg, pcb, p, ip_current_src_addr(), src);
和你找到那个不太一样,至此我也明白了,其实我们注册了回调函数之后,内核在调用回调函数的时候到底传什么样的参数给它LWIP的作者说了算,而我们以前太执着于C语言语法了。
君子性非异也,善假于物也
不知常,妄作,凶
纵浪大化中,不喜亦不惧,应尽便须尽,无复独多虑
路漫漫其修远兮,吾将上下而求索
菩萨畏因,凡夫畏果
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /1 下一条

正点原子公众号

如发现本坛存在违规或侵权内容, 请点击这里发送邮件举报 (或致电020-38271790)。请提供侵权说明和联系方式。我们将及时审核依法处理,感谢配合。

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2026-8-22 18:38

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表