a730598 发表于 2009-9-6 10:08:37

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(&ethernetif->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;
}
}
}
}

各位高手帮我看看是什么问题??
谢谢

oldtom 发表于 2009-9-6 16:36:02

你用的什么硬件平台?

a730598 发表于 2009-9-6 20:48:36

1楼的兄台,你好,我用的是LM3S6911,现在在移植,问题还真不少

a730598 发表于 2009-9-6 20:55:04

今天重新整理了一下程序,再调试,程序来到
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();返回时就出现死机了,不知是怎么一回事?请兄弟们指教!
小弟虚心学习!

eiglxl 发表于 2009-9-6 21:01:11

a730598:
你用了系统吗?

a730598 发表于 2009-9-6 23:41:59

用了UCOS2.52

eiglxl 发表于 2009-9-7 08:20:39

我现在也在搞这个,LM3S6911+UCOS2.52+LWIP1.3.0,还没把LWIP移植上去呢。
能不能把你的移植共享下?我们一起研究。

a730598 发表于 2009-9-7 09:20:49

嗯,好的,点击此处下载 ourdev_478551.rar(文件大小:1.49M) (原文件名:uCOS-lwip.rar)

这是lwip1.31的,各位兄弟大家一起研究

eiglxl 发表于 2009-9-7 12:17:53

嗯,下下来研究下。

ffxz 发表于 2009-9-7 13:10:14

RT-Thread有LM3S移植,可以试试。

ffxz 发表于 2009-9-7 13:12:03

【1楼】 oldtom
兄弟你的lpc2478 lwip后来有什么进展吗?lpc2478的板子我拿到了,不过缺少的器件也太多了,估计要跑起来得好好采购下器件才是

对了,上次你指出的lwip几个问题,在这次lwip 1.3.1升级的过程中都修掉了

oldtom 发表于 2009-9-7 13:34:37

哦。谢谢你还记得。呵呵。

lwip我在ucosII上面已经测试通过了,基本上还比较稳定。就是因为RAM比较小(32K),导致,如果多进程同时PING大数据包(1800左右字节)会出现因为内存不足而导致PING不通。如果是单进程PING,那还比较稳定,测试了2天2夜,采用大数据包PING,基本上没有什么丢包。
RTT版本的,还是有点问题,后来就没有再继续了。现在在做上位机软件,等过几天再来看看下。我已经看到RTT的更新了。

楼下的用的什么硬件平台呢?

liguangqang 发表于 2009-9-7 13:58:02

我也在做移植lwip 不带操作系统的,ping 能通但做文件服务器,TCP就是连接不上,一连接就死机。

a730598 发表于 2009-9-7 14:17:44

这个点击此处下载 ourdev_478633.zip(文件大小:597K) (原文件名:LM3SAPP_Ethernet_Bootloader_Note.zip)
也是不带操作系统的,给你参考下

a730598 发表于 2009-9-7 19:27:55

各位兄弟有什么新的进展继续跟进,我的QQ是:178122887,欢迎技术交流

keaiduo 发表于 2009-10-27 01:28:28

mark一下··· 關注

eworker 发表于 2010-8-5 06:19:13

回复【10楼】ffxz
【1楼】 oldtom
兄弟你的lpc2478 lwip后来有什么进展吗?lpc2478的板子我拿到了,不过缺少的器件也太多了,估计要跑起来得好好采购下器件才是
对了,上次你指出的lwip几个问题,在这次lwip 1.3.1升级的过程中都修掉了
-----------------------------------------------------------------------

敢问指出了哪几个问题?是在哪个帖子中?

eworker 发表于 2010-8-5 09:46:57

回复【16楼】eworker
-----------------------------------------------------------------------

ding

eworker 发表于 2010-8-5 23:08:21

回复【16楼】eworker
回复【10楼】ffxz
【1楼】 oldtom   
兄弟你的lpc2478 lwip后来有什么进展吗?lpc2478的板子我拿到了,不过缺少的器件也太多了,估计要跑起来得好好采购下器件才是
对了,上次你指出的lwip几个问题,在这次lwip 1.3.1升级的过程中都修掉了
-----------------------------------------------------------------------
敢问指出了哪几个问题?是在哪个帖子中?
-----------------------------------------------------------------------

ding

eworker 发表于 2010-8-6 15:01:53

回复【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函数返回值问题;

iWorker 发表于 2010-8-6 15:08:18

1.4.0的lwip也出来了

zsfang0104 发表于 2010-10-18 19:20:31

mark
页: [1]
查看完整版本: LWIP的移植出现死机,请兄弟们帮忙,谢谢!