接着上一篇zynq ucos下移植lwip,ucos下lwip的echo server测试基于microzed硬件平台,例程使用standalone中echo server代码。将standalone中main函数中的内容,作为一个任务tcptest_task创建,这个任务的优先级必须低于tcpip_thread的优先级,否则创建任务失败。在ucos的void MainTask (void *p_arg)中调用创建。创建任务前需要Xil_DCacheDisable();关闭dcache。
为了简化测试程序,并且使ARM private timer不与ucos冲突,没有再定义定时器,只使用ucos中的定时器。
由于本地测试没有DHCP服务器,所以DHCP肯定超时,所以需要在MainTask任务中增加监测dhcp_timoutcntr大于0时,将其置0,从而跳过dhcp配置,后面的tcpip建立服务。
运行echo server程序,显示ucos系统中的cpu使用率为100%,因为在tcptest_task任务中一直查询网络输入状态,占用cpu。
这里只要将tcptest_task的任务优先级设置为最低,就不会影响主任务的运行。但这样还是没有体现出ucos的实时系统特性,相当于还是查询工作模式。加一个OSTimeDlyHMSM(0, 0, 10, 0, OS_OPT_TIME_HMSM_STRICT, &os_err);函数,固定延时的查询,会将cpu使用率降下来,但由于关闭了dcache,似乎运行速度并不快。
测试过程中,使用多个网络助手软件连接echo server,客户端使用不同的端口号,echo测试均能正常工作。
注意:关闭Dcache,ucos初始化配置时,默认开启cache。