高中生
最后登录1970-1-1
在线时间 小时
注册时间2016-2-26
|
楼主 |
发表于 2016-10-13 09:40:11
|
显示全部楼层
以下是火哥的源码,这样轮询是没问题,但网络若没有数据的时候程序会一直轮询,根本没法调度其它任务,我把
if (p == NULL)
continue;
改成
if (p == NULL)
{
OSTimeDlyHMSM(0, 0, 0, 5, OS_OPT_TIME_DLY, (OS_ERR *)&os_err);
continue;
}
后再PING就会丢包很严重,这是怎么回事儿呢?
void ethernetif_input( void * pvParameters )
{
struct pbuf *p;
OS_ERR os_err;
err_t err;
/* move received packet into a new pbuf */
while (1)
{
SYS_ARCH_DECL_PROTECT(sr);
SYS_ARCH_PROTECT(sr);
p = low_level_input(s_pxNetIf);
SYS_ARCH_UNPROTECT(sr);
if (p == NULL)
continue;
err = s_pxNetIf->input(p, s_pxNetIf);
if (err != ERR_OK){
LWIP_DEBUGF(NETIF_DEBUG, ("ethernetif_input: IP input error\n"));
pbuf_free(p);
p = NULL;
}
/*sleep 5 ms*/
OSTimeDlyHMSM(0, 0, 0, 5, OS_OPT_TIME_DLY, (OS_ERR *)&os_err);
}
} |
|