天线|RF射频
直播中

黄剑屏

8年用户 258经验值
私信 关注
[问答]

为什么ucosii+lwip+dm9051移植运行一段时间后就会出问题?

各位好,小弟最近在移植 dm9051的lwip+ucos ii ,不带操作系统的lwip移植成功了,但是带ucos ii的可以ping通,但是老是出现问题,用cmd的ping 一直ping 板子的话,一开始是可以ping通,但是运行一段时间后,就无法访问目标主机了。这个移植和dm9000的几乎一样,只是底层硬件接口驱动不一样。
当dm9051接收到数据之后,在中断里面判断是否为接收中断,然后通过OSSemPost(dm9051input)发送信号量 。
小弟发现,通过keil watch1观察到 一开始ping的通的时候,dm9051input 的OSEventTbl数组的[0]=0x40,其它都为0,并且OSEventGrp=0x01;
后面ping不通的时候,dm9051input 的OSEventTbl数组的[0]=0,并且OSEventGrp=0x00,然后OSEventCnt一直在增加。
然后下面的,ethernetif中的,OSSemPend(dm9051input,0,&_err);        这一段也无法执行到此处,字有点多,谢谢大家看完,想请教一下各位,uCOS这个问题,是不是邮箱没有请求信号量请求成功。
err_t ethernetif_input(struct netif *netif)
{
    INT8U _err;
    err_t err;
    struct pbuf *p;
    while(1)
    {
        OSSemPend(dm9051input,0,&_err);        //请求信号量
        if(_err == OS_ERR_NONE)
        {
            while(1)
            {
                p=low_level_input(netif);   //调用low_level_input函数接收数据
                if(p!=NULL)
                {
                    err=netif->input(p, netif); //调用netif结构体中的input字段(一个函数)来处理数据包
                    if(err!=ERR_OK)
                    {
                        LWIP_DEBUGF(NETIF_DEBUG,("ethernetif_input: IP input errorn"));
                        pbuf_free(p);
                        p = NULL;
                    }
                }else break;
            }
        }
    }
}

回帖(1)

高彬

2019-9-5 07:16:50
@发烧友
举报

更多回帖

发帖
×
20
完善资料,
赚取积分