搜索
bottom↓
回复: 21

LWIP的移植出现死机,请兄弟们帮忙,谢谢!

[复制链接]

出0入0汤圆

发表于 2009-9-6 10:08:37 | 显示全部楼层 |阅读模式
#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[STELLARIS_NUM_PBUF_QUEUE];
  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 = ((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;
  }
  }
  }
}

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

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2009-9-6 16:36:02 | 显示全部楼层
你用的什么硬件平台?

出0入0汤圆

 楼主| 发表于 2009-9-6 20:48:36 | 显示全部楼层
1楼的兄台,你好,我用的是LM3S6911,现在在移植,问题还真不少

出0入0汤圆

 楼主| 发表于 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();返回时就出现死机了,不知是怎么一回事?请兄弟们指教!
小弟虚心学习!

出0入168汤圆

发表于 2009-9-6 21:01:11 | 显示全部楼层
a730598:
你用了系统吗?

出0入0汤圆

 楼主| 发表于 2009-9-6 23:41:59 | 显示全部楼层
用了UCOS2.52

出0入168汤圆

发表于 2009-9-7 08:20:39 | 显示全部楼层
我现在也在搞这个,LM3S6911+UCOS2.52+LWIP1.3.0,还没把LWIP移植上去呢。
能不能把你的移植共享下?我们一起研究。

出0入0汤圆

 楼主| 发表于 2009-9-7 09:20:49 | 显示全部楼层
嗯,好的,点击此处下载 ourdev_478551.rar(文件大小:1.49M) (原文件名:uCOS-lwip.rar)

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

出0入168汤圆

发表于 2009-9-7 12:17:53 | 显示全部楼层
嗯,下下来研究下。

出0入0汤圆

发表于 2009-9-7 13:10:14 | 显示全部楼层
RT-Thread有LM3S移植,可以试试。

出0入0汤圆

发表于 2009-9-7 13:12:03 | 显示全部楼层
【1楼】 oldtom
兄弟你的lpc2478 lwip后来有什么进展吗?lpc2478的板子我拿到了,不过缺少的器件也太多了,估计要跑起来得好好采购下器件才是

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

出0入0汤圆

发表于 2009-9-7 13:34:37 | 显示全部楼层
哦。谢谢你还记得。呵呵。

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

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

出0入4汤圆

发表于 2009-9-7 13:58:02 | 显示全部楼层
我也在做移植lwip 不带操作系统的,ping 能通但做文件服务器,TCP就是连接不上,一连接就死机。

出0入0汤圆

 楼主| 发表于 2009-9-7 14:17:44 | 显示全部楼层
这个点击此处下载 ourdev_478633.zip(文件大小:597K) (原文件名:LM3SAPP_Ethernet_Bootloader_Note.zip)
也是不带操作系统的,给你参考下

出0入0汤圆

 楼主| 发表于 2009-9-7 19:27:55 | 显示全部楼层
各位兄弟有什么新的进展继续跟进,我的QQ是:178122887,欢迎技术交流

出0入0汤圆

发表于 2009-10-27 01:28:28 | 显示全部楼层
mark一下··· 關注

出0入0汤圆

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

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

出0入0汤圆

发表于 2010-8-5 09:46:57 | 显示全部楼层
回复【16楼】eworker
-----------------------------------------------------------------------

ding

出0入0汤圆

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

ding

出0入0汤圆

发表于 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函数返回值问题;

出0入0汤圆

发表于 2010-8-6 15:08:18 | 显示全部楼层
1.4.0的lwip也出来了

出0入0汤圆

发表于 2010-10-18 19:20:31 | 显示全部楼层
mark
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-13 09:43

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表