|
折腾了几个小时,总算让RL_TCPnet在设备上跑起来了,感觉比使用LWIP省事儿多了,但也陆陆续续发现几点疑问,如下:
问题1:为何库函数对于网络地址参数开了三份缓存?
在将原有网络固定地址改成程序中可配置的时候,发现库函数声明了3份地址,但另外两份仿真发现都为0,那为何要声明3份呢?难道有什么其它用途?直接LOCALM const nlocalm=...不行吗?
RL_TCPNET库函数中没有找到专门的额配置IP的函数,如果想动态修改IP,是不是只能采用修改变量nlocalm然后重启设备或协议栈的方法?库函数提供了两个函数ip_init和ip_run_local是不是做这个使的,还有待验证。
网络地址源代码如下:
/* Local Machine info */
LOCALM const nlocalm[3] = {
/* Ethernet: Local IP address */
#if (ETH_ENABLE)
{{_IP1,_IP2,_IP3,_IP4},
/* Default Gateway IP address */
{_GW1,_GW2,_GW3,_GW4},
/* Subnet IP Mask */
{_MSK1,_MSK2,_MSK3,_MSK4},
/* Primary DNS Server IP */
{_pDNS1,_pDNS2,_pDNS3,_pDNS4},
/* Secondary DNS Server IP */
{_sDNS1,_sDNS2,_sDNS3,_sDNS4}},
#else
{{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}},
#endif
问题2:PHY用的是RMII接口,为何还要配置MAC寄存器的MCR_FES位?
手册里面针对这个位是这么描述的“位 14 FES:快速以太网速度 (Fast Ethernet speed),指示快速以太网 (MII) 模式下的速度:0:10 Mbit/s 1:100 Mbit/s”,(实测不配置它以太网功能无法使用)。
问题3:关于网络断线的检测以及主动断开TCP连接的功能。
终端运行的TCP服务器,建立TCP连接之后,拔掉网线十几秒左右,再插上网线,还能正常接收数据,TCP_TYPE_KEEP_ALIVE超时不是10秒吗?10秒后似乎并没有断开连接,后来拔掉网线差不多一分钟,再插上后无法接收数据了,且无法再次建立TCP连接,说明TCP服务器依然保持着上一个TCP连接。那“10秒内无数据通信将断开连接”这句话该怎么理解呢?如果主程序想在检测到断线的时候断开当前的TCP连接,该调用那个函数呢?
|
|