LWIP的移植出现死机,请兄弟们帮忙,谢谢!
#ifndef STELLARIS_NUM_PBUF_QUEUE#define STELLARIS_NUM_PBUF_QUEUE 20
#endif
/* Helper struct to hold a queue of pbufs for transmit and receive. 数据缓冲队列*/
struct pbufq {
struct pbuf *pbuf;
unsigned long qwrite;
unsigned long qread;
unsigned long overflow;
};
/* Helper macros for accessing pbuf queues. */
#define PBUF_QUEUE_EMPTY(q) \
(((q)->qwrite == (q)->qread) ? true : false)
#define PBUF_QUEUE_FULL(q) \
((((((q)->qwrite + 1) % STELLARIS_NUM_PBUF_QUEUE)) == (q)->qread) ? \
true : false )
/*
从缓冲区读数据处理
*/
static struct pbuf *
dequeue_packet(struct pbufq *q)
{
struct pbuf *pBuf;
/**
* This entire function must run within a "critical section" to preserve
* the integrity of the transmit pbuf queue.
*
*/
OS_ENTER_CRITICAL();
if(PBUF_QUEUE_EMPTY(q)) { //在这就跳到static void FaultISR(void);循环了
/* Return a NULL pointer if the queue is empty. */
pBuf = (struct pbuf *)NULL;
}
else {
/**
* The queue is not empty so return the next frame from it
* and adjust the read pointer accordingly.
*
*/
pBuf = q->pbuf;
q->qread = ((q->qread + 1) % STELLARIS_NUM_PBUF_QUEUE);
}
/* Return to prior interrupt state and return the pbuf pointer. */
OS_EXIT_CRITICAL();
return(pBuf);
}
void
ethernetif_input(void *arg)
{
struct netif *netif = (struct netif *)arg;
struct ethernetif *ethernetif;
struct eth_hdr *ethhdr;
struct pbuf *p;
//ethernetif = netif->state;
while(1)
{
/* move received packet into a new pbuf */
/* move received packet into a new pbuf */
p = dequeue_packet(ðernetif->rxq);
/* no packet could be read, silently ignore this */
if (p != NULL)
{
/* points to packet payload, which starts with an Ethernet header */
ethhdr = p->payload;
switch (htons(ethhdr->type)) {
/* IP or ARP packet? */
case ETHTYPE_IP:
#if ETHARP_TRUST_IP_MAC
/* update ARP table */
etharp_ip_input(netif, p);
#endif/* ETHARP_TRUST_IP_MAC */
/* skip Ethernet header */
if(pbuf_header(p, -(s16_t)sizeof(struct eth_hdr))) {
LWIP_ASSERT("Can't move over header in packet", 0);
pbuf_free(p);
p = NULL;
} else {
/* pass to IP layer */
ip_input(p, netif);
}
break;
case ETHTYPE_ARP:
#if PPPOE_SUPPORT
/* pass p to ARP module */
etharp_arp_input(netif, (struct eth_addr*)(netif->hwaddr), p);
break;
case ETHTYPE_PPPOEDISC:
pppoe_disc_input(netif, p);
break;
case ETHTYPE_PPPOE:
pppoe_data_input(netif, p);
#endif /* PPPOE_SUPPORT */
/* full packet send to tcpip_thread to process */
if (netif->input(p, netif)!=ERR_OK)
{ LWIP_DEBUGF(NETIF_DEBUG, ("ethernetif_input: IP input error\n"));
pbuf_free(p);
p = NULL;
}
break;
default:
pbuf_free(p);
p = NULL;
break;
}
}
}
}
各位高手帮我看看是什么问题??
谢谢 你用的什么硬件平台? 1楼的兄台,你好,我用的是LM3S6911,现在在移植,问题还真不少 今天重新整理了一下程序,再调试,程序来到
netif_add(&lwip_netif, &IpAddr, &NetMask, &Gateway, NULL,ethernetif_init, tcpip_input);
----->netif_set_addr(netif, ipaddr, netmask, gw);
----->netif_set_ipaddr(netif, ipaddr);
{
-----------------
-----------------
ip_addr_set(&(netif->ip_addr), ipaddr);
}
在执行netif_set_ipaddr();返回时就出现死机了,不知是怎么一回事?请兄弟们指教!
小弟虚心学习! a730598:
你用了系统吗? 用了UCOS2.52 我现在也在搞这个,LM3S6911+UCOS2.52+LWIP1.3.0,还没把LWIP移植上去呢。
能不能把你的移植共享下?我们一起研究。 嗯,好的,点击此处下载 ourdev_478551.rar(文件大小:1.49M) (原文件名:uCOS-lwip.rar)
这是lwip1.31的,各位兄弟大家一起研究 嗯,下下来研究下。 RT-Thread有LM3S移植,可以试试。 【1楼】 oldtom
兄弟你的lpc2478 lwip后来有什么进展吗?lpc2478的板子我拿到了,不过缺少的器件也太多了,估计要跑起来得好好采购下器件才是
对了,上次你指出的lwip几个问题,在这次lwip 1.3.1升级的过程中都修掉了 哦。谢谢你还记得。呵呵。
lwip我在ucosII上面已经测试通过了,基本上还比较稳定。就是因为RAM比较小(32K),导致,如果多进程同时PING大数据包(1800左右字节)会出现因为内存不足而导致PING不通。如果是单进程PING,那还比较稳定,测试了2天2夜,采用大数据包PING,基本上没有什么丢包。
RTT版本的,还是有点问题,后来就没有再继续了。现在在做上位机软件,等过几天再来看看下。我已经看到RTT的更新了。
楼下的用的什么硬件平台呢? 我也在做移植lwip 不带操作系统的,ping 能通但做文件服务器,TCP就是连接不上,一连接就死机。 这个点击此处下载 ourdev_478633.zip(文件大小:597K) (原文件名:LM3SAPP_Ethernet_Bootloader_Note.zip)
也是不带操作系统的,给你参考下 各位兄弟有什么新的进展继续跟进,我的QQ是:178122887,欢迎技术交流 mark一下··· 關注 回复【10楼】ffxz
【1楼】 oldtom
兄弟你的lpc2478 lwip后来有什么进展吗?lpc2478的板子我拿到了,不过缺少的器件也太多了,估计要跑起来得好好采购下器件才是
对了,上次你指出的lwip几个问题,在这次lwip 1.3.1升级的过程中都修掉了
-----------------------------------------------------------------------
敢问指出了哪几个问题?是在哪个帖子中? 回复【16楼】eworker
-----------------------------------------------------------------------
ding 回复【16楼】eworker
回复【10楼】ffxz
【1楼】 oldtom
兄弟你的lpc2478 lwip后来有什么进展吗?lpc2478的板子我拿到了,不过缺少的器件也太多了,估计要跑起来得好好采购下器件才是
对了,上次你指出的lwip几个问题,在这次lwip 1.3.1升级的过程中都修掉了
-----------------------------------------------------------------------
敢问指出了哪几个问题?是在哪个帖子中?
-----------------------------------------------------------------------
ding 回复【18楼】eworker
回复【16楼】eworker
回复【10楼】ffxz
【1楼】 oldtom
兄弟你的lpc2478 lwip后来有什么进展吗?lpc2478的板子我拿到了,不过缺少的器件也太多了,估计要跑起来得好好采购下器件才是
对了,上次你指出的lwip几个问题,在这次lwip 1.3.1升级的过程中都修掉了
-----------------------------------------------------------------------
敢问指出了哪几个问题?是在哪个帖子中?
-----------------------------------------------------------------------
ding
-----------------------------------------------------------------------
LwIP轻型TCP/IP协议栈:
升级LwIP到1.3.1版本;
在LwIP中添加list_if,set_if,set_dns命令;
更改DHCP休眠时间为微秒;
修正LwIP DHCP选项问题;
修正lwip_select函数返回值问题; 1.4.0的lwip也出来了 mark
页:
[1]