在多核导航中,当压入一个描述符到发送队列,就会对某一个核产生中断,同时在被中断的核中,观察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的断点。