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

关于TMS320C6670多核导航 怎么利用pingpong模式接收描述符

在多核导航中,当压入一个描述符到发送队列,就会对某一个核产生中断,同时在被中断的核中,观察uiaDescriptorPingPongBuffer的地址可以看到描述符写入。。

现在遇到的问题就是,

1:当压入多个描述符的时候,如果是对自己产生中断,则能看到uiaDescriptorPingPongBuffer地址的ping和pong都能写值,但是想通过其他核压入描述符产生中断,却只能给ping区域写,不能写到pong里面。。请问这是什么问题?这个pingpong操作怎么才能利用起来。

2:如果多个核同时向某一个核压描述符发中断的话,这个核应该怎么接收?

YUCHAO WANG:

你好,你说的这个功能我在C6678上已经开发实现了,没有什么问题。

我不知道你为什么会有错,在这儿提醒你几个关键点注意一下:

1、你需要正确地设置ping pong buffer的大小。如果你设置的积累数是4,那么一个ping buffer的大小应当是5个32bit。

2、仍然假设积累数是4。那么队列每收到4个描述符就会产生一个中断,并把所有描述符一次性写到ping buffer中去。接下来再收到4个描述符,又一次性写到pong buffer里去。 这和描述符来自哪个核没什么关系。

3、第2个问题,队列是能够处理同时来自多个核的多个描述符的。接收的核只要在收到中断后到buffer里去把描述符地址读出来就可以了。

如果我说的不能解决问题的话,你可以把你的代码发上来给我看看是怎么回事

xueyao:

回复 YUCHAO WANG:

       你好,谢谢,其实pingpong应该来说是实现了的,要在被中断的核running的时候,其他核压描述符才会写到那个缓存区域 。  

     1:  现在在调试的时候出现了一个问题,核2压描述符,往核1发中断可以写到ping,然后再用核0给核1发中断的时候,第一次压描述符的时候表示pingpong没有变化,但是当核0压第二次描述符的时候,就能看到核1的pong区域写值了,然后后面的都正确。这是什么问题造成的哦?

    :2:还有就是现在很多时候,调试过程中,时不时就会出现断点打了没有用,程序直接跑完了。  

     3 : 那现在多个核同时压描述符的时候,队列是怎么区分描述符具体来自哪一个核?

 

       

YUCHAO WANG:

回复 xueyao:

1、在程序流程里打断点一定要考虑断点本身对程序造成的影响,这种影响有时是很难掌握的,特别是涉及到多核和中断的时候;

2、队列没有办法区分描述符是谁发的,唯一的办法是在发送描述符时,在描述符发送的信息里说明。接收方可以通过解析描述符内容得知消息来自哪个核。

调试时断点打了没用说明程序没走到那一步去。特别是调多核,很可能你在核0的代码上打的是属于核1的断点。

赞(0)
未经允许不得转载:TI中文支持网 » 关于TMS320C6670多核导航 怎么利用pingpong模式接收描述符
分享到: 更多 (0)