This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

请教关于DSPLink编程中MSGQ_locate的问题

TI专家和各位朋友:

最近在做DSPLink的编程,在运行过程中发现MSGQ_locate有时会出现错误(有时不会出现此错误),返回错误代码为[0x8000802d],在网上也查了一下,说是DSP端的MSGQ没有打开,而MSGQ没有打开,是因为MSGQ_transportOpen打开有问题,但是查看DSP端程序时,发现并没有调用MSGQ_transportOpen函数。不知道有哪位朋友了解其中原因,指教一二,甚为感谢。

  • MSGQ_transportOpen在DSP端不需要调用

    MSGQ_locate按照例子如果返回DSP_ENOTFOUND或者DSP_ENOTREADY是要等待的,而这个等待的函数是要求能挂起的,比如ARM端的usleep,DSP端就是TSK_sleep

    我试过死循环等待,写for(;;)之类的,是不行的


  • to gg weee :

    感谢您的回复。

    查询了一下错误代码,

    /* A specified entity was not found. */
    #define DSP_ENOTFOUND               (DSP_EBASE + 0x2Dl)

    即DSP_ENOTFOUND的值为0x8000802d,即指定的实体没有找到,似乎是指DSP端没有打开MSGQ。

    但是同样的代码,同样的执行,为何有时执行成功,有时执行出错,让人费解。

  • 按照例子来说不应该是这次找不到就继续等待下次查找吗?一直等到找到就可以了

    我认为你有的时候能找到有的时候找不到,是因为ARM查找的时候,DSP的MSGQ执行代码可能刚开始执行,有的时候跑得快点,ARM就能检测到,有的时候慢一点,ARM检测的时候DSP的MSGQ还没建立,所以就找不到。

    我觉得这个很正常,你ARM循环查找,这次找不到,等一点时间,下次查找就能查到了。

    或者你不想这样,你可以临时在ARM查找前加一段延迟,等待足够多DSP建立的时间,看还有没有DSP_ENOTFOUND这个错误,来验证这个猜想

  • to gg weee:

    有可能ARM检测的时候DSP的MSGQ还没有建立,在ARM侧这次找不到继续等待下次查找,一直等到找到即可,从程序上来看,一点问题都没有。

    问题是在目标板上运行的时候,ARM在执行到MSGQ_locate时,就停下来了,不再往下执行了。

  • 广州创龙将TI的DSPLINK的例子写成了中文例程,可以一看。
    13-OMAPL138的双核通信组件DSPLINK开发和双核通信演示教程.pdf