打印

STM32F103移植LWIP,程序跑的不知去向。究竟什么原因?

[复制链接]
7305|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lihaiping1603|  楼主 | 2013-1-15 09:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
先上我的程序:
err_t
ethernetif_input(struct netif *netif)
{
  struct ethernetif *ethernetif;
//  struct eth_hdr *ethhdr;
  struct pbuf *p;
  err_t err;

  ethernetif = netif->state;


  printf("已进入ethernetif_input.\r\n");

  /* move received packet into a new pbuf */
  p = low_level_input(netif);

  printf("low_level_input已返回.\r\n");//这条语句有输出,说明程序执行了这条语句


  /* no packet could be read, silently ignore this */
  if (p == NULL)
  
  {
  printf("p=NULL.\r\n");
  return ERR_MEM;}   
//这里是我参照ST官方的方法进行移植的代码,我们不打算在这个函数里进行数据的提交
//而是调用netif->input回调函数来进行数据的分析和提交
        err = netif->input(p, netif);
   printf("netif->input已返回.\r\n");
  if (err != ERR_OK)
  {
    LWIP_DEBUGF(NETIF_DEBUG, ("ethernetif_input: IP input error\n"));
    pbuf_free(p);
    p = NULL;
  }

  return err;

//下面是官方的处理方式,他们是打算由这个函数对接收的数据进行处理,然后根据数据类型的不同,递交上层
//分ip和arp两种类型进行处理
  /* points to packet payload, which starts with an Ethernet header */
//  ethhdr = p->payload;

//  switch (htons(ethhdr->type)) {
  /* IP or ARP packet? */
//  case ETHTYPE_IP:
//  case ETHTYPE_ARP:
//#if PPPOE_SUPPORT
  /* PPPoE packet? */
//  case ETHTYPE_PPPOEDISC:
//  case ETHTYPE_PPPOE:
//#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;
//  }
}


串口打印数据输出:
已进入ethernetif_input.
已进入low_level_input.
EIR=72.
已进入enc28j60PacketReceive.
EIR=72.
EIR=72.
EIR=8.
enc28j60PacketReceive返回.
20000160
enc28j60PacketReceive已返回.
接收到的数据长度len=60.
EIR=8.
low_level_input已返回.

这是整个调试信息和程序,其中LWIP初始化中netif_add(&netif, &ipaddr, &netmask, &gw, NULL, &ethernetif_init, &ethernet_input);且在ethernet_input函数中我也放进去了串口输出,但为什么在low_level_input函数返回以后,函数下面的所有语句都没有数据显示?也就以为着,跟踪过程丢失,程序不知道跑哪里去了?怎么回事?
沙发
MariaBrook| | 2013-1-15 12:22 | 只看该作者
没有显示的那个函数可能发生了HardFault,建议在HardFault_Handler中断函数中加上显示语句
一般来说,在函数里定义了大规模的数组或者指针指飞了,都有可能发生HardFault,现象和楼主的一模一样

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
lihaiping1603 + 1 很给力!
板凳
lihaiping1603|  楼主 | 2013-1-15 18:06 | 只看该作者
MariaBrook 发表于 2013-1-15 12:22
没有显示的那个函数可能发生了HardFault,建议在HardFault_Handler中断函数中加上显示语句
一般来说,在函 ...

嗯,是指针越界,所以跑飞了,呵呵。。。

使用特权

评论回复
地板
dyf1003| | 2013-1-15 20:50 | 只看该作者
MARK

使用特权

评论回复
5
拿起书本| | 2013-1-15 21:56 | 只看该作者
80%以上的这类异常都是数组越界和指针乱指引起的

使用特权

评论回复
6
weiliao1| | 2013-1-24 16:25 | 只看该作者
您好 请问您是怎样解决的 我也是这个问题 程序运行到err = netif->input(p,netif)就会产生错误(硬中端),该怎么解决?谢谢

使用特权

评论回复
7
lihaiping1603|  楼主 | 2013-2-18 17:41 | 只看该作者
我把指针改为了数组,程序运行正常

使用特权

评论回复
8
weicz| | 2013-5-6 11:35 | 只看该作者
请问你stm32f103具体什么型号,ram多大?我的stm32f103c8,20k ram,放不下ucos+lwip啊

使用特权

评论回复
9
lihaiping1603|  楼主 | 2013-5-7 11:03 | 只看该作者
weicz 发表于 2013-5-6 11:35
请问你stm32f103具体什么型号,ram多大?我的stm32f103c8,20k ram,放不下ucos+lwip啊 ...

VC,那就裁剪下了,或者外部拓展RAM了?呵呵

使用特权

评论回复
10
weicz| | 2013-5-7 12:09 | 只看该作者
lihaiping1603 发表于 2013-5-7 11:03
VC,那就裁剪下了,或者外部拓展RAM了?呵呵

哦,VC不错,ram我的两倍多。。。

使用特权

评论回复
11
alating925| | 2013-11-30 10:39 | 只看该作者
mark

使用特权

评论回复
12
huangfeng33| | 2013-12-5 16:30 | 只看该作者
函数里分配空间实在堆栈上分配的,堆栈是比较有限的,分配那么大的空间是不允许的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

16

帖子

1

粉丝