【原创】LWIP技术--->答网友问081208

网友jyx0928给我发邮件提出来的以下几个问题,我在这里做一个简单的回答。如果有不正确的地方,希望大家批评指教,谢谢!技术需要大家共同讨论提高!

问题1:
main函数中建立任务T_LwIPEntry,
T_LwIPEntry工作主要为初始化目标板,网卡,lwip(其中建立tcpip_thread,ethernetif_input这2个任务),然后建立任务tcpecho;
tcpecho任务为tcp客户端,连接指定服务器
现在共5个任务,优先级为:

main    
T_LwIPEntry   11
tcpip_thread  6
ethernetif_input 20
tcpecho    10

ethernetif_input任务中,数据也是按照小盒子你的查询方式来做的,之前将该任务优先级改为8,就是比T_LwIPEntry和tcpecho高,但是这样好像只要ethernetif_input任务一建立,T_LwIPEntry和tcpecho任务就不执行了,因为ethernetif_input任务中我用查询方式一直在查询网卡,一直在占用cpu;所以改用上面的优先级,将数据接收任务优先级改为最低。这样tcp任务就能正常运行;
所以我的问题就是,为什么你的移植里面将ethernetif_input任务的优先级设为第二高,应用层的任务怎么还能正常运行呢?

答:你说的ethernetif_input任务中我用查询方式一直在查询网卡,一直在占用cpu。我很想知道你的ethernetif_input()这个函数你是如何写的?

我把我的代码片段贴出来你参考一下

   ethernetif = netif->state;
   do{
    p = low_level_input(netif);
    if (p == NULL)
     OSTimeDlyHMSM(0,0,0,100);
   }while(p == NULL);
注意红色的部分。如果p==NULL这样就要把让CPU去执行其他别的任务,不要始终占用CPU,所以很肯能是这里导致你的不行。明白了吗?

问题2:
我用上面的优先级能正常运行tcp任务,但是:
现象1:我先运行程序,等待一段时间再打开服务器端,结果程序并没有马上连接,而是等待了几十秒(这时时间不定,最少30秒,长的几分钟)才连接上。为什么要等上一些时间才能连接呢?

答:应该不会出现你说的这个现象,你调试程序的时候是使用的仿真器吗?仿真器的话速度会慢一些,虽然慢但是不至于几分钟。会不会是你的网络问题?对于你的现象,我重新做了一次测试

我的环境是

CPU S3C2440   (400MHz)

以太网:DM9000

UCOS:V2.86

LWIP:1.2.0

板子为客户端,PC机为服务端,整个启动过程除掉uboot和初始化以太网,连接仅在1s内完成。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值