我这边在调试一个DSP的算法程序,程序现在都调试差不多了,但是有一个问题,想请教一下!
我的程序是通过CCS环境编译调试的,程序可以正常下载到DSP中,并且可以按照通信协议,对所需数据接收,计算结果进行发送,我这边是服务器,但是 进行TCP网络通信过程中,总是会莫明其妙的就网络断开了,经过调试发现是网络通信的问题,我们这边的处理流程是先接数据,再计算,然后再发送运算结果,这三个过程是在一个线程中进行的,由于计算的过程运算量比较大,所以计算时间要2-30秒,也可能更长要1分钟, 需要计算的数据是一次发3条,计算好第一条,再发第4条过来,计算好第二条再发第5条过来。。。前边计算是好用的,但是当发到某一条时,网络就会断开了,要么是我接不到数据,要么是发不出去,然后客户端重新连接还是可以连上的。这个问题,我试过了,数据量小的时候,运算时间短是不会发生这个问题的,我试着将计算过程去掉,只是接到数据,睡眠50S,再发回去,这样返复几次后也会出现此问题,但是每次出现的位置不同,有时是第7-8条就出错了,有时是70多条才出错。
此程序在VC下是可以正常调用的,没有任何问题的,但是在DSP上就会出一此问题,是我哪里配置的不对么,我要修改什么配置
哪位遇到过此问题么,请给个建议!!C6678 XDS560V2
Marvin Liang:
TCP是带连接的协议,平常没有数据包传输的时候,也会有维护连接的控制包传送。你的调度器设计有问题,都在一个任务中做轮询,则计算量大的时候会导致TCP得不到运行时间而断链。建议:
1. 如果可以的话,TCP改为UDP
2. 网络收包以中断方式处理,这样不至于因为算法计算而打断网络包的处理
3. 修改你的调度器,对于运算量大的时候也不能长时间独占CPU,比如将一个计算拆分为若干个小步骤,占用一段时间后就必须调度到网络处理,然后再继续上一次的处理。
hongli ma:
回复 Marvin Liang:
网络处理是心跳包么??有没有别的办法解决一下?
hongli ma:
回复 Marvin Liang:
请问,您说的调度器指的是什么?有没有类似的代码。类似的函数。
yuanwen dong:
回复 hongli ma:
您好,调度器就是RTOS的内核,就是我在你的另外一个贴子回复的内容。
RTOS就是实时操作系统的意思,我们Enea是TI白金合作伙伴,有问题可以邮件交流。
Best Regards
William.dong@enea.com
hongli ma:
回复 yuanwen dong:
不好意思,我们项目接近尾声了,不可能做这么大的改动,没有别的方法么。
zhihong li:
回复 hongli ma:
如果是系统调度的问题,楼主是否可以试一下把运算优先级调低,吧tcpip优先级调高试试。运算优先级比tcp优先级低试试。如果不掉,则是调度问题。如果还掉,应该是别的问题吧