共2条
1/1 1 跳转至页
问
大家都在说ZLG/IP有问题.
而像我这样对ZLG的依赖性很大的人来说,用ZLG/IP就是不用考虑的选择(没有能力和精力去选择别的CPU和TCP/IP协议栈).我想像我这样的人可能不在少数.
大家看看,能不能互相帮助,把ZLG/IP改造好,主要是把已有的源代码中的错误找出来,利人利已.
贴一个前人找到的错误(网友lizhenARM):
源代码在Ethernet.c文件的Rec_Packet函数中:
----
WriteToNet(0x0b,tmp[0]
//RSCR1写入读取字节计数高字节//read count high
WriteToNet(0x0a,tmp[1]);
//RSCR0写入读取字节计数低字节//read count low;
应更改为:
WriteToNet(0x0b,tmp[1]>>8&0x00ff);
//RSCR1写入读取字节计数高字节//read count high
WriteToNet(0x0a,tmp[1]&0x00ff); //RSCR0写入读取字节计数低字节//read count low;
---
我也找了一个,不知对不对:
源代码在IP.c文件的IP_PROCESS()函数中
----
uint8 IP_PROCESS(uint8 * RecData,uint8 num)
{
static temp=0;
---
---
temp++;
if(temp>=MAX_REC_BUFF)
temp=1;
---
---
在这个函数中,局部变量temp不可能大于MAX_REC_BUFF,因为在进入函数时已将temp清0了.所以TEMP没有存在的意义的
------
答 1: !static temp=0;
有意义,temp是静态局部变量(static),它和全局变量差不多,只是它只能局部访问! 答 2: ???楼主搞错了这个变量的用法了 答 3: 是啊!谢谢了!读书,不认真啊! 答 4: -在用ZLG/IP时出现两个问题:
背景: 只用TCP任务.用开发板做客户机,PC做服务器.
1 只调用一次Arp_Request()无法获得对的MAC
2 连续传数会掉线,用ENTHERREAL抓包查看,双方并没有关掉连接,那应是应答出了问题.
高手能指点一下,怎样进行改进吗?
周公说ZLG/IP只要稍加修改就可实用,看来还要再努力啊! 答 5: 我第一次尝试tcp不是很成功zlgip代码写的很乱,后来我改用zlip 答 6: 是校验和出错,正在想,出错了怎么办? 答 7: -- while(ExPtr!=NULL)
{
/*
写数(IP,TCP,DATA)
问题: 如果数据为单个的怎么办????
*/
TEPTR = ExPtr->DAPTR;
for(ii=0;ii<((ExPtr->length+1)/2);ii++)
{
send_buff.bytes[0] = *TEPTR;
TEPTR++;
send_buff.bytes[1] = *TEPTR;
TEPTR++;
WriteToNet(0x10,send_buff.words);
}
ExPtr = ExPtr->STPTR;
}
如果发的数是单个的怎么办,这个段代码,没看懂,有人能指点一下吗?
而像我这样对ZLG的依赖性很大的人来说,用ZLG/IP就是不用考虑的选择(没有能力和精力去选择别的CPU和TCP/IP协议栈).我想像我这样的人可能不在少数.
大家看看,能不能互相帮助,把ZLG/IP改造好,主要是把已有的源代码中的错误找出来,利人利已.
贴一个前人找到的错误(网友lizhenARM):
源代码在Ethernet.c文件的Rec_Packet函数中:
----
WriteToNet(0x0b,tmp[0]
//RSCR1写入读取字节计数高字节//read count high
WriteToNet(0x0a,tmp[1]);
//RSCR0写入读取字节计数低字节//read count low;
应更改为:
WriteToNet(0x0b,tmp[1]>>8&0x00ff);
//RSCR1写入读取字节计数高字节//read count high
WriteToNet(0x0a,tmp[1]&0x00ff); //RSCR0写入读取字节计数低字节//read count low;
---
我也找了一个,不知对不对:
源代码在IP.c文件的IP_PROCESS()函数中
----
uint8 IP_PROCESS(uint8 * RecData,uint8 num)
{
static temp=0;
---
---
temp++;
if(temp>=MAX_REC_BUFF)
temp=1;
---
---
在这个函数中,局部变量temp不可能大于MAX_REC_BUFF,因为在进入函数时已将temp清0了.所以TEMP没有存在的意义的
------
答 1: !static temp=0;
有意义,temp是静态局部变量(static),它和全局变量差不多,只是它只能局部访问! 答 2: ???楼主搞错了这个变量的用法了 答 3: 是啊!谢谢了!读书,不认真啊! 答 4: -在用ZLG/IP时出现两个问题:
背景: 只用TCP任务.用开发板做客户机,PC做服务器.
1 只调用一次Arp_Request()无法获得对的MAC
2 连续传数会掉线,用ENTHERREAL抓包查看,双方并没有关掉连接,那应是应答出了问题.
高手能指点一下,怎样进行改进吗?
周公说ZLG/IP只要稍加修改就可实用,看来还要再努力啊! 答 5: 我第一次尝试tcp不是很成功zlgip代码写的很乱,后来我改用zlip 答 6: 是校验和出错,正在想,出错了怎么办? 答 7: -- while(ExPtr!=NULL)
{
/*
写数(IP,TCP,DATA)
问题: 如果数据为单个的怎么办????
*/
TEPTR = ExPtr->DAPTR;
for(ii=0;ii<((ExPtr->length+1)/2);ii++)
{
send_buff.bytes[0] = *TEPTR;
TEPTR++;
send_buff.bytes[1] = *TEPTR;
TEPTR++;
WriteToNet(0x10,send_buff.words);
}
ExPtr = ExPtr->STPTR;
}
如果发的数是单个的怎么办,这个段代码,没看懂,有人能指点一下吗?
共2条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |