lwip1.3.2+ucosII服务器与浏览器连接问题bug解决
2015-06-02 10:37
288 查看
最近利用lwip1.3.2+ucosII在stm32f207搭建了web服务器,实现功能并不容易,但最难的却是功能实现之后查找bug的过程,这个过程可以说相当辛苦,但经历了这些我发现我也学习成长了很多,这里主要分享下我遇到的bug,以及解决方式,首先说明下我搭建的服务器带基本认证服务。 1. phy驱动初始化问题 因为stm32f207中引脚问题我的项目只能采用RMII总线,这时就需要修改默认系统时钟需要修改为100MHZ(见system_stm32f2xx.c)。参考DP83848的CLK说明,可以知道输入管脚CLK(端口PA8)的时钟要为50MHZ,PA8位于APB2区域,在参考system_stm32f2xx.c中程序,PCLK = SYSCLK/2
可知系统时钟需要配置到100MHZ,如果系统时钟达不到100MHZ,如STM32F107,则需要使用MII总线。 2. 在某些浏览器在初次登录会弹出两次登录框体(如遨游),且有时会卡死服务器 通过WireShark软件抓包分析,几乎所有浏览器在请求完一张完整网页后会继续请求favicon.ico(网站头像,如下),用于放置在地址栏或者收藏夹的首位,且有时该请求报会不附带用户的认证信息,因为它并不存在于服务器端用户设计的网页中(一般情况下),因此客户端可能会一直请求,造成服务器卡顿,因此在服务器的http层代码中要对该请求独立出来处理。
3 .win7+IE8访问服务器是偶尔会卡死 win7+IE8访问服务器时,当缓存已经有图片时,会发送[RST, ACK] TCP包
目前我所用的版本的lwip的tcp层对于该数据报的处理并不好,我测试了下,接收到RST,ACK包必卡死 经过仔细排查,我发现了问题关键,在处理[RST ACK]复位包的回调函数中err_tcp中,将连接的conn->err 置成了ERR_RST, 而在线程中调用的netconn_accept()和netconn_delete()并未修改这个参数,而在http层处理函数中将conn->err作为判断接收数据的一个标准,从而导致再也接不到数据。 因此在复位连接处理完毕(即在err_tcp)末尾后要添加conn->err = ERR_OK,不知道是不是lwip的内在缺陷。
相关文章推荐
- Hadoop课程介绍
- SQL:将查询结果插入到另一个表的三种情况
- Graph database_neo4j 底层存储结构分析(1)
- spring mvc知识点汇总
- Web service知识点笔记
- 操作系统入门
- Reveal查看任意app的高级技巧
- 五十五 毕业前的狂欢
- 五十六 毕业证书
- python学习系列(五)--- 正则表达式基本函数
- String Buffer
- Bootstrap的表格
- jboss6.3 mariadb的jndi配置
- MySQL 范式化-上线前-配合开发
- 前端编码规范
- PHP使用递归方式列出当前目录下所有文件的方法
- String 算法
- java回调简单实现
- JAVA定时执行任务的三种方法
- Android 关于屏幕适配