本人将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;
}
}
}
看下当时的R1和R10的值都是多少,是否超出了可用的地址空间?
高手,我最近也在用这个LWIP,不知道从哪个地方开始弄哦?我用的DM9000,是不是先看DM9000的资料,再看DM9000驱动代码,再看LWIP的结构哦。
ADS经常出现由于内存对齐引起莫名其妙的问题. 我后来用keil for ARM后这种现象很少.