RTT LwIP Protocol Stack问题

发布于 2011-10-22 11:24:08
关于rtt网络有个问题,
1) ethernetif.c中去开两个thread来接受和发送数据但是eth_input就交给LWIP 去做处理通过mailbox发的,tcpip_thread从mailbox拿pbuf(前提是mailbox不为空即可),但是tcpip_thread拿的不是即时的pbuf是吧? mailbox保证了数据不会丢失但是,不是及时地

2) 同时kernel mailbox的实现,限制了网络接受的最大包数

3) lwIP在发送包时并没有使用mailbox机制?如果网络堵塞貌似没有重发?

4) 另外rt-thread 0.4.0 eth_rx_thread_entry这个thread貌似再while (1)外层的区作调度以下比较好吧?(如果一直在while (1)是否会很大消耗资源)

查看更多

关注者
0
被浏览
3.3k
3 个回答
bernard
bernard 2011-10-23
关于rtt网络有个问题,
1) ethernetif.c中去开两个thread来接受和发送数据但是eth_input就交给LWIP 去做处理通过mailbox发的,tcpip_thread从mailbox拿pbuf(前提是mailbox不为空即可),但是tcpip_thread拿的不是即时的pbuf是吧? mailbox保证了数据不会丢失但是,不是及时地

2) 同时kernel mailbox的实现,限制了网络接受的最大包数

3) lwIP在发送包时并没有使用mailbox机制?如果网络堵塞貌似没有重发?

4) 另外rt-thread 0.4.0 eth_rx_thread_entry这个thread貌似再while (1)外层的区作调度以下比较好吧?(如果一直在while (1)是否会很大消耗资源)


1. 及时这个概念比较难,一般的以太网并不是实时的。
2. 这个实质上与缓冲相关,也就是memory,也就是mailbox开辟的空间。
3. 重发由协议栈完成(TCP等协议,否则也不会进行重发)。
4. while(1) 是能够break的,并不是一直永远循环。
visitor83
visitor83 2011-10-25
感谢回复,
(4)while (1)
{
if (rt_mb_recv(&eth_tx_thread_mb, (rt_uint32_t*)&msg, RT_WAITING_FOREVER) == RT_EOK)
{
struct eth_device* enetif;

RT_ASSERT(msg->netif != RT_NULL);
RT_ASSERT(msg->buf != RT_NULL);

enetif = (struct eth_device*)msg->netif->state;
if (enetif != RT_NULL)
{
/* call driver's interface */
if (enetif->eth_tx(&(enetif->parent), msg->buf) != RT_EOK)
{
rt_kprintf("transmit eth packet failed\n");
}
}

/* send ack */
rt_sem_release(&(enetif->tx_ack));
}
}

这个没有 break ?

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览