中级会员
- 积分
- 446
- 金钱
- 446
- 注册时间
- 2017-2-14
- 在线时间
- 90 小时
|
20金钱
各位好,小弟最近在移植 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 error\n"));
pbuf_free(p);
p = NULL;
}
}else break;
}
}
}
}
|
|