各位大牛,
我在做基于NDK的C6678的 的UDP的通信,网络调试助手连续发64Byte数据过来, 然后通过SRIO发送FPGA,回环, 最后又返回给网络调试助手。
当我发送到5000多包数据后, 下位机不再接收了,此时ping不通网络。
找了好多资料, 尝试一些解决方法
1.之前是用那个recvncfrom接收, 现在改成recvfrom接收, 这个需要从网络接收缓冲池赋值一份。结果最多能就收5700多包, 未改之前,只能接收200包
2.修改UD缓冲池大小为65500 ,仍然一样
3.网上找资料,说是应为,主线程一直占用CPU, 而基于NDK的守护线程的执行函数, 无法调用,导致无发刷新数据队列,导致堵塞
博客在此:
blog.csdn.net/…/48751999
博客中说:
.NDK的守护任务在完成初始化后即会自动降低Task优先级至最低的IDLE Task级,若用户Task执行在高于IDLE的优先级,且一直不通过阻塞来主动放弃执行时间的话,则NDK的数据报队列状态将一直得不到更新,从而导致用户Task的socket函数无法正常接收和发送数据报
我按他给的方法,试验过,还是不能解决, 望各位大牛指导,谢谢!!!!
fendou yang:
自己顶下
Denny%20Yang99373:
建议先把其他无关任务都关掉,做一个最简单的任务,就是UDP数据收发,看看是否稳定。
或者直接用NDK的DEMO看看是否稳定
如果不稳定,可能需要考虑是不是硬件有点问题了
如果稳定,再考虑任务优先级划分的问题
fendou yang:
回复 Denny%20Yang99373:
首先,谢谢您。
这种方法,我试过了,就是网络初始化完成后,网络守护任务优先级降到最低,之后的另一个主任务,只做UDP的回环。 一点问题都没有。 所以可以排除硬件的问题。
Shine:
回复 fendou yang:
请参考下面的NDK FAQ。
processors.wiki.ti.com/…/Network_Developers_Kit_FAQ