新手上路
- 积分
- 46
- 金钱
- 46
- 注册时间
- 2019-12-4
- 在线时间
- 25 小时
|
1金钱
我用原子哥的,LWIP netconn方法创建了一个Server.然后直接拔网线.拔网线处理方法如下
- netconn_shutdown(newconn,0,0);
- netconn_close(newconn);
- netconn_delete(newconn);
- while(HAL_UART_GetState(&huart1) == HAL_UART_STATE_BUSY_TX){}
- // printf("Close:%d,Del:%d\r\n",a,b);
- // printf("Client:%d.%d.%d.%d,Port:%d Close\r\n",remot_addr[0], remot_addr[1],remot_addr[2],remot_addr[3],port);
- DebugServerConnCount = 255 ;
- vPortFree(recvbuf);
- vPortFree(q);
- osThreadExit(); //网线已经拔掉,此线程自杀
复制代码 这时候,虽然内存释放了.但是连接其实没有正常断开.LWIP TCP配置如下
- #define LWIP_NETCONN 1
- #define MEMP_NUM_NETBUF 10
- #define MEMP_NUM_NETCONN 10
- #define MEMP_NUM_TCP_PCB 3
- #define LWIP_SOCKET 1
- //#define LWIP_COMPAT_MUTEX 1
- #define LWIP_SO_RCVTIMEO 1
- /*----- Default Value for LWIP_NETIF_LINK_CALLBACK: 0 ---*/
- #define LWIP_NETIF_LINK_CALLBACK 1
- //LWIP memory size
- #define MEM_SIZE 2097152
复制代码 不用在意内存分配太大.我把SDRAM的32MB 分配给FreeRTOS 和LWIP 的内存,他们俩分配的内存都在SDRAM中.
#define MEMP_NUM_TCP_PCB 3 这一句,是连接数量限制.
现在问题是:
1:只要我连接着拔掉网线,这样来回3次,就达到最到数量限制了.不允许新的连进来.请问,拔掉网线后,应该怎么清空LWIP中正在连接的数量?
///////////////////////分隔线//////////////////////////////////////////////////////////
可以分享程序:
1:程序目前实现了新申请的变量自动定位到SDRAM去,内存使用更噬无忌惮,利用linker链接脚本实现.
2:移值了FreeModbus ,使用TCP. 移植的代码进行少量修改后才可使用.
3:代码除了SDRAM部分代码,参照了原子哥的.其它全是由Stm32cubeMX 自动生成.
4:集成了LWIP FreeRTOS.
5:自己画的4层PCB,网卡管脚配置和原子哥的不一样.
6:程序实现了网线热插拔.Stm32cubeMX 支持配置热插拔.只需要在相关函数中实现相关功能.
程序保证能顺利编译,并运行.
程序编译环境
系统:Mac OS 或 ubuntu
编译工具 : arm-none-eabi-gcc
编译脚本 : Makefile
如果有需要程序的可以留言.
|
|