硬汉嵌入式论坛

 找回密码
 立即注册
查看: 927|回复: 3
收起左侧

[LwIP] LWIP中TCP/IP线程获取邮箱与UDP任务获取邮箱

[复制链接]

39

主题

127

回帖

244

积分

高级会员

积分
244
发表于 2025-1-23 11:51:24 | 显示全部楼层 |阅读模式
在ETH_ETH_IRQHandler中断里面释放信号量, 然后执行 ethernetif_input:

ethernetif_input    ---->    tcpip_input()    ---->    tcpip_inpkt    ---->    sys_mbox_trypost给出邮箱

TCP/IP线程需要获取信号量
tcpip_init(NULL, NULL)    ---->   sys_thread_new 创建 tcpip_thread  ----> sys_arch_mbox_fetch获取邮箱

在UPD的任务中也需要获取信号量
udp任务    ---->    netconn_recv()    ---->    netconn_recv_data()    ---->    sys_arch_mbox_fetch获取邮箱

TCP/IP线程和UPD任务都序号获取 “邮箱”,请问是谁先获取,谁后获取,因为就给出一个邮箱?

回复

使用道具 举报

39

主题

127

回帖

244

积分

高级会员

积分
244
 楼主| 发表于 2025-1-23 18:55:26 | 显示全部楼层

粗略的见解
ethernetif_input    ---->    tcpip_input()    ---->    tcpip_inpkt    ---->    sys_mbox_trypost给出邮箱

TCP/IP线程:

tcpip_thread() ----> TCPIP_MBOX_FETCH() ----> tcpip_timeouts_mbox_fetch ----> sys_arch_mbox_fetch()和sys_check_timeouts()搭配使用,获取sys_mbox_trypost给出邮箱 ----> tcpip_thread_handle_msg() ---->继续下行


----> ethernet_input() ----> ip4_input() ----> udp_input() ----> pcb->recv,即recv_ud() ----> err = sys_mbox_trypost(&conn->recvmbox, buf)给出邮箱


邮箱创建: netconn_new() ----> netconn_new_with_proto_and_callback() ----> netconn_alloc() ----> sys_mbox_new(&conn->recvmbox, size),创建邮箱


获取邮箱: netconn_recv() ----> netconn_recv_data() ----> sys_arch_mbox_fetch() ----> xQueueReceive(),获取邮箱。如果LWIP_SO_RCVTIMEO设定为0,在没有邮箱时会一直等待阻塞。


这是目前自己的学习见解,如有后续深入再补充。









回复

使用道具 举报

39

主题

127

回帖

244

积分

高级会员

积分
244
 楼主| 发表于 2025-1-23 11:57:15 | 显示全部楼层
微信截图_20250123115559.png
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
116230
QQ
发表于 2025-1-24 06:34:30 | 显示全部楼层
谢谢分享。
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-6-11 06:27 , Processed in 0.343443 second(s), 30 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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