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

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

TI专家和各位朋友:

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

gg weee:

MSGQ_transportOpen在DSP端不需要调用

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

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

corez zhao:

回复 gg weee:

to gg weee :

感谢您的回复。

查询了一下错误代码,

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

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

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

gg weee:

回复 corez zhao:

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

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

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

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

corez zhao:

回复 gg weee:

to gg weee:

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

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

Jack Wu3:

回复 corez zhao:

广州创龙将TI的DSPLINK的例子写成了中文例程,可以一看。

赞(0)
未经允许不得转载:TI中文支持网 » 请教关于DSPLink编程中MSGQ_locate的问题
分享到: 更多 (0)