2.10 rt-thread实操 W5500 Wiznet + webserver(webnet)
1.menuconfig 使用能webserver功能,我是W5500以太网模块、spiflash w25q128挂载的littlefs、板子上支持tftp功能,tftp客户端功能好使。webnet使用的2.0.3,rt使用的5.1.0,wiznet使用的最新的版本
webnet软件使用的是2.0.3版本
2、使用tftp客户端功能获取3个官方例程用的文件,以及创建出对应的目录,建软件包中的docs下的示例文档即可。
烧录程序后,使用官方的例程先进行测试下。
命令行输入webnet_test,提示正常
使用官方提供的例程,webnet_test运行后。
网页访问设备ip地址后,页面总是一直刷新不出来,后来进行分析代码,代码执行逻辑大致是,webnet_test命令运行后,会调用web_init函数,进行webnet_thread线程的创建和调用
webnet_thread线程,调用webnet_module_handle_event(RT_NULL, WEBNET_EVENT_INIT);进行状态。
之后webnet_thread线程进行死循环,监听等待客户端连接,有连接后,调用
webnet_sessions_handle_fds(&tempfds, &writeset);
session->session_ops->session_handle(session, WEBNET_EVENT_READ);
_default_session_ops
_webnet_session_handle
_webnet_session_handle_read(session);
webnet_module_handle_uri(session);
result = webnet_module_handle_event(session, WEBNET_EVENT_URI_PHYSICAL);
return webnet_module_handle_event(session, WEBNET_EVENT_URI_POST);
result = webnet_module_system_dofile(session);
在webnet_module_system_dofile函数中,到最后都是正常的,但是赋值_dofile_ops后,_dofile_ops中有读文件内容,将内容发送给客户端,但是方法没有调用。
不知道为什么,始终是卡在select上下不去了,但是writeset的值确实也是有写事件的
之后分析代码了解到,执行完这个函数,也就是webnet_module_system_dofile这个函数最后出来后的位置,还会往下执行
固在wn_session.c文件中后面加上了几行代码后,让其调用能_dofile_ops的函数中的读文件内容发送的方法后,解决