求助:关于lwip,AXD调试

gufan   2009-12-11 09:59 楼主
本人将Lwip 移植到基于ARM9和ucos上。用AXD调试,接收到一个IP数据包。程序走到LWIP 中的 ip_input()函数中的
if (ip_addr_cmp(&(iphdr->dest), &(netif->ip_addr)) ||    行时,跑飞了(如下代码)。在AXD中将其反汇编时,发现编译成的汇编指令前 带有 "*"号  如: * ldr r1,[r10,#10]. 感觉是此地址的数据读失败。不知程序跑飞和 “*”是否有关系? 请高手指教!感谢!

for (netif = netif_list; netif != NULL; netif = netif->next) {

    LWIP_DEBUGF(IP_DEBUG, ("ip_input: iphdr->dest 0x%"X32_F" netif->ip_addr 0x%"X32_F" (0x%"X32_F", 0x%"X32_F", 0x%"X32_F")\n",
      iphdr->dest.addr, netif->ip_addr.addr,
      iphdr->dest.addr & netif->netmask.addr,
      netif->ip_addr.addr & netif->netmask.addr,
      iphdr->dest.addr & ~(netif->netmask.addr)));

    /* interface is up and configured? */
    if ((netif_is_up(netif)) && (!ip_addr_isany(&(netif->ip_addr))))
    {
      /* unicast to this interface address? */
      if (ip_addr_cmp(&(iphdr->dest), &(netif->ip_addr)) ||    //调试到此行时 程序飞了
         /* or broadcast on this interface network address? */
         ip_addr_isbroadcast(&(iphdr->dest), netif)) {
        LWIP_DEBUGF(IP_DEBUG, ("ip_input: packet accepted on interface %c%c\n",
          netif->name[0], netif->name[1]));
        /* break out of for loop */
        break;
      }
    }
  }

回复评论 (4)

看下当时的R1和R10的值都是多少,是否超出了可用的地址空间?
点赞  2009-12-11 10:49
多谢,已解决 是内存对齐的问题
点赞  2009-12-21 16:16
高手,我最近也在用这个LWIP,不知道从哪个地方开始弄哦?我用的DM9000,是不是先看DM9000的资料,再看DM9000驱动代码,再看LWIP的结构哦。
点赞  2009-12-21 21:39
ADS经常出现由于内存对齐引起莫名其妙的问题. 我后来用keil for ARM后这种现象很少.
点赞  2009-12-22 08:57
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复