项目背景:STM32F103RE 64K Ram. 512k ROM。
现在计划在产品中加入网页功能,使用USB虚拟网卡,rndis。使用ROMFS做文件系统。LWIP做网络协议栈。因为资源紧张,所以对原有的配置做了适当的裁剪。
目前网页功能可以正常使用,可以访问页面及cgi请求。
版本信息:
RT - Thread Operating System
/ | \ 4.0.2 build Oct 14 2019
RT-Thread webnet package (V2.0.0) initialize success.
异常情况:调试初期发现用浏览器刷新页面,经常打不开,偶尔成功几次,而且等待时间很长。
后面测试发现,用postman工具多次请求正常。用浏览器请求,几次后失败,然后等待一段时间之后又正常。
LWIP配置:
#define RT_MEMP_NUM_NETCONN 8
#define RT_LWIP_PBUF_NUM 8
#define RT_LWIP_RAW_PCB_NUM 4
#define RT_LWIP_UDP_PCB_NUM 4
#define RT_LWIP_TCP_PCB_NUM 4
#define RT_LWIP_TCP_SEG_NUM 10
#define RT_LWIP_TCP_SND_BUF 1024
#define RT_LWIP_TCP_WND 1024
#define RT_LWIP_TCPTHREAD_PRIORITY 10
#define RT_LWIP_TCPTHREAD_MBOX_SIZE 8
#define RT_LWIP_TCPTHREAD_STACKSIZE 2048
#define RT_LWIP_ETHTHREAD_PRIORITY 12
#define RT_LWIP_ETHTHREAD_STACKSIZE 1024
#define RT_LWIP_ETHTHREAD_MBOX_SIZE 8
#define LWIP_NETIF_STATUS_CALLBACK 1
webnet配置:
#define PKG_USING_WEBNET
#define WEBNET_PORT 80
#define WEBNET_CONN_MAX 1
#define WEBNET_ROOT "/webnet"
#define WEBNET_USING_LOG
#define WEBNET_USING_AUTH
#define WEBNET_USING_CGI
#define WEBNET_USING_ASP
#define WEBNET_USING_SSI
#define WEBNET_USING_INDEX
#define WEBNET_USING_ALIAS
#define WEBNET_USING_UPLOAD
#define WEBNET_CACHE_LEVEL 2
#define WEBNET_CACHE_MAX_AGE 1800
#define WEBNET_USING_SAMPLES
#define PKG_USING_WEBNET_V201
buffer:1K
堆栈:2K
后使用memtrace工具,发现,用浏览器请求过程中,webnet会分配多个对话,并且没有释放。
[0x2000e720 - 1K] webn
[0x2000eb60 - 32] webn
[0x2000eb90 - 256] webn
[0x2000eca0 - 36] webn
[0x2000ecd4 - 20]
[0x2000ecf8 - 20] webn
[0x2000ed1c - 48]
[0x2000ed5c - 96] webn
[0x2000edcc - 356]
[0x2000ef40 - 32] webn
[0x2000ef70 - 32] webn
[0x2000efa0 - 100]
[0x2000f014 - 32] webn
[0x2000f044 - 32] webn
[0x2000f074 - 32] webn
[0x2000f0a4 - 48]
[0x2000f0e4 - 32] webn
[0x2000f114 - 32] webn
[0x2000f144 - 32] webn
[0x2000f174 - 40] webn
[0x2000f1ac - 32] webn
[0x2000f1dc - 40] webn
[0x2000f214 - 32] webn
[0x2000f244 - 32] webn
[0x2000f274 - 32] webn
[0x2000f2a4 - 136]
[0x2000f33c - 32] webn
[0x2000f36c - 1K] webn
[0x2000f7ac - 380]
[0x2000f938 - 32] webn
[0x2000f968 - 1K] webn
[0x2000fda8 - 568]
msh />list_webnet
#0 client 192.168.10.2:56862
#1 client 192.168.10.2:56861
#2 client 192.168.10.2:56856
path: /webnet/demo.html
从日志现象来看,应该是web服务器一直在被访问某个接口,并且一直没有被释放掉,导致多次请求之后,内存空间不够,
请求失败(配置中设置最多只有一个链接,但是还是会有多个请求)。
后来观测发现,经过比较长的时间之后,约几分钟,原先一直在连接又被释放掉,回复正常。
具体回话没有断开的 问题还未找到。
使用过程中还有以下的未知异常请求:
第一次插入USB线时,会多次请求(浏览器未打开):
[D/wn.log] new client: 192.168.10.2:61817
[D/wn.log] method: GET
[D/wn.log] request: /
[D/wn.log] physical url: /webnet/index.html
[D/wn.log] mime type: text/html
第一次请求IP地址时(访问源码自带的例子):
[D/wn.log] new client: 192.168.10.2:62085
[D/wn.log] method: GET
[D/wn.log] request: /favicon.ico
[D/wn.log] physical url: /webnet/favicon.ico
[D/wn.log] mime type: application/binary
有做过的大神可以指点一下下。
更多回帖