TI中文支持网
TI专业的中文技术问题搜集分享网站

实时接收UDP数据问题,接收到一段数据后,就不能接收了

程序描述:ARM数据通过网口UDP给DSP核0,核1将对UDP包进行甄别并解析一部分数据,核2将各个数据进行相应的算法处理,就这样完成一次;然后核0继续接收UDP数据,但是经过单步调试,第一次完整的流程从核0接收数据,到核1解析数据,核2进行算法处理都能顺利完成,然后再将核1、核2先全力运行将进行下一次的的时候核0接收不了数据。

现象: (这是三个核全速跑起来之后变成这样)

可以看出核1是正常工作的,核0和核2直接跑飞了。最开始进行分步调试,是可以进行一次完成的流程的,但是运行一次后核0就接收不了数据。

请教一下各位,能给些建议么?还有就是我是第一次编写实时架构程序,所以肯定会有很多不足,希望大家能推荐一下我能看一下哪方面的资料呢?(基于sys/bios的工程的)谢谢了哦

Andy Yin1:

core0/2看不出来是否跑飞了,只是运行到了一个找不到对应symbol的地址,可以 确认这个地址段是否是合法的代码段,如果不是则说明跑飞了。

另外打印了很多非法报文,指示接收到的packet大小不对,check下接受报文的解析处理;另外分部执行是每个core单独执行么?如果单步执行ok,3个core同时执行有问题,可能是多核的程序中代码、数据、stack等存在共享资源冲突导致程序运行出错。

Gangping Li:

回复 Andy Yin1:

谢谢Andy的回复!

      将核1、核2全速运行,本人手动向网口助手填数据向核0发送;这一整个流程都没有问题。目前根据自己的检测、调试,发现运行在核2中的算法程序有内存泄漏和指针泄漏的嫌疑。我将算法屏蔽后发现核0是能够继续接收数据的。这可能说明是因为核2对于指针,内存操作不当,干扰了核0的程序导致核0无法接收数据,同时核2自己也跑飞了;(核1一直都是正常的,全速跑也是正常的;核2我用了很多动态分配,有时候运行free函数时候会出现free invalid)。

Gangping Li:

回复 Andy Yin1:

Andy,你好;

目前经过测试,发现如下问题:

1、单独让核0去接收UDP包是没有问题的;将核1、核2全速跑起来,核0接收程序,这个整个流程只能跑通一次,跑通一次后将核2单步不全速,再让核0接收UDP就不行了,就会出现这个问题

CCS console显示:00000.000 NIMUReceivePacket: Bad Size; Payload is -2147481472 bytes00000.000 PBM_free: Invalid Packet

核0的程序直接跳出接收程序显示

三个核的状态是这样的:

我通过在map文件中查找,发现0x0C064098这个地址对应的是0c064040    00000060: trgmsg.obj (.text:writemsg);我觉得核0并没有跑飞,而是接收到了无效Packet;我认为是因为运行了核2的算法程序之后就将关于NDK的某一块给修改了,所以误让核0错误的认为是接收到了无效Pakect,所以才会出现这个情况。

Andy,对于可能是NDK中的writemsg这个,我没有见过,那个应该是比较底层的东西,你能详细的说明一下么?

赞(0)
未经允许不得转载:TI中文支持网 » 实时接收UDP数据问题,接收到一段数据后,就不能接收了
分享到: 更多 (0)