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的例子写成了中文例程,可以一看。