- 论坛徽章:
- 0
|
今天把达芬奇平台g-bios的的网络部分移植好了,现在就剩flash的移植了。
网络接收采用poll的方式,所以在net_core.c的GUdpRecvPacket()函数中重新加进GNetRecvPoll()查询函数,之前被注释掉了,估计后面合并针对不同平台得做些设置。
把socket.c的gethostaddr()函数修改成如下:
struct sockaddr *gethostaddr(const char *sip)
{
const UINT32 nip;
struct sockaddr *sockAddr;
UINT32 cnt = 20;
if(GuStrToIp((BYTE *)&nip, sip))
{
printf("%s(): fail to convert ip %s\n", __FUNCTION__, sip);
return NULL;
}
while (cnt--)
{
UINT32 psr;
// add by seen.yang
ArpSendPacket((BYTE *)&nip, NULL, ARP_OP_REQ);
// add by seen.yang
while(GNetRecvPoll() <= 0);
IrqDisableSave(psr);
sockAddr = getaddr(nip);
IrqRestore(psr);
if (sockAddr)
break;
// TODO: add re-send code here
udelay(3);
}
return sockAddr;
} |
加上cnt = 20用于计数,以防止ping不通时陷入死循环。
conke兄,请多指教。
[ 本帖最后由 zhiqiang0071 于 2009-1-13 16:51 编辑 ] |
|