完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
在函数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语言知识无法理解这段在程序初始化的时候写下的代码是怎么在程序初始化完成之后被“触发的”。 |
|
相关推荐
10个回答
|
|
|
|
|
|
还是好好学习下C语言吧 ,回调函数是经常会用到的。
|
|
|
|
不明白你的回复用意何在,难道是这个问题过于简单不值得回答?连一个方向也不指引给我。
|
|
|
|
楼主这个问题搞清楚了吗。。。我这里也很困惑
|
|
|
|
这个问题我也搁置下来了。不过最近看UCOSIII的回调函数写法比较典型,也比较容易理解,你可以看看软件定时器部分的源码。
|
|
|
|
好的,谢谢楼主的建议哈哈
|
|
|
|
楼主,我找到回调函数参数传入的地方了!!
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); //回调函数的参数从这里传入 } |
|
|
|
|
|
我也随便找到了一处:
pcb->recv(pcb->recv_arg, pcb, p, ip_current_src_addr(), src); 和你找到那个不太一样,至此我也明白了,其实我们注册了回调函数之后,内核在调用回调函数的时候到底传什么样的参数给它LWIP的作者说了算,而我们以前太执着于C语言语法了。 |
|
|
|
|
|
只有小组成员才能发言,加入小组>>
如何使用STM32+nrf24l01架构把有线USB设备无线化?
2543 浏览 7 评论
请问能利用51单片机和nRF24L01模块实现实时语音无线传输吗?
2331 浏览 5 评论
3156 浏览 3 评论
2801 浏览 8 评论
为什么ucosii上移植lwip后系统进入了HardFault_Handler?
2759 浏览 4 评论
请教各位大咖:有没有接收频率32M左右的芯片推荐的?先感谢啦!
607浏览 1评论
852浏览 0评论
965浏览 0评论
618浏览 0评论
445浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 01:26 , Processed in 1.232560 second(s), Total 96, Slave 80 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号