发 帖  
原厂入驻New
[问答] 请问LWIP中的回调函数如何传递参数?
100 LwIP c语言
分享
在函数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语言知识无法理解这段在程序初始化的时候写下的代码是怎么在程序初始化完成之后被“触发的”。

0
2020-3-27 04:35:56   评论 分享淘帖 邀请回答

相关问题

10个回答
http://www.docin.com/p-704390500.html
网址忘记发了,图片本不想传,可能由于网速卡没删掉。
2020-3-27 07:24:49 评论

举报

还是好好学习下C语言吧  ,回调函数是经常会用到的。
2020-3-27 07:41:21 评论

举报

不明白你的回复用意何在,难道是这个问题过于简单不值得回答?连一个方向也不指引给我。
2020-3-27 07:47:04 评论

举报

楼主这个问题搞清楚了吗。。。我这里也很困惑
2020-3-27 08:03:06 评论

举报

这个问题我也搁置下来了。不过最近看UCOSIII的回调函数写法比较典型,也比较容易理解,你可以看看软件定时器部分的源码。
2020-3-27 08:10:41 评论

举报

好的,谢谢楼主的建议哈哈
楼主,我找到回调函数参数传入的地方了!!
udp_input()函数中一的句代码
if (pcb->recv != NULL) {
    /* now the recv function is responsible for freeing p */
    pcb->recv(pcb->recv_arg, pcb, p, &(iphdr->src), src);   //回调函数的参数从这里传入
}
2020-3-27 08:35:27 评论

举报

我也随便找到了一处:
pcb->recv(pcb->recv_arg, pcb, p, ip_current_src_addr(), src);
和你找到那个不太一样,至此我也明白了,其实我们注册了回调函数之后,内核在调用回调函数的时候到底传什么样的参数给它LWIP的作者说了算,而我们以前太执着于C语言语法了。
2020-3-27 09:06:03 评论

举报

2020-3-27 09:18:23 评论

举报

只有小组成员才能发言,加入小组>>

92个成员聚集在这个小组

加入小组

创建小组步骤

关闭

站长推荐 上一条 /7 下一条

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