高级会员
- 积分
- 845
- 金钱
- 845
- 注册时间
- 2015-12-8
- 在线时间
- 175 小时
|
5金钱
[mw_shl_code=c,true]while(1)
{
//OSSemPend(&MY_SERVER_SEM,0,OS_OPT_PEND_BLOCKING,0,&os_err);
f_read(http_file,tcp_server_sendbuf,3500,&br);
printf("%dsending\r\n",i);
write_err=netconn_write(conn,tcp_server_sendbuf ,br,NETCONN_COPY);
if(br<3500)break;
}[/mw_shl_code]我做的是一个多线程的WEBSERVER服务器,在子线程中连续多次调用netconn_write()发送数据时,LWIP会卡在netconn_write()中,没有数据返回,ping也不通,不知道是什么原因,有人遇到过这种情况吗?顺便问一下,如果任务堆栈设置过小,程序会直接进入硬件错误中断里吗?还是会继续运行,只是运行的结果会出错?因为我设置LWIP内核任务的堆栈大小为250,原子的是1000,不知道会有什么影响。求大神解答
|
最佳答案
查看完整内容[请看2#楼]
如果内存够用,任务堆栈设置大些更好,不过你这的问题不是堆栈,如果是栈溢出就不单单是lwip协议栈卡死,而是运行一段时间进入hardfault才对,你这能恢复,就肯定不是这个问题,而是协议栈的配置有问题,这主要原因是协议栈内部的配置的内存池数量,允许的最大tcp链接数,还有各种缓冲区的配置是默认的,在应用中如果http包接收过于频繁,就会导致协议栈卡死(默认配置是不会考虑这些情况的),这个需要对协议栈深入了解重新配置 ...
|