DSP

DM8168,System_linkControl()改变参数信息之后,送到AlgLink_tskM

2019-07-13 16:19发布

写在问题之前:2010年,TI推出的最新媒体处理器TMS320DM8168作为一款多通道高清SOC系统芯片,集成了1GHz主频Cortex-A8 ARM核与lGHz主频C674x的DSP核,并且集成了3个新版本的HDVICP子系统,还有新一代的VPSS。
HI:大家好!DM8168,DVR RDK ,DVRRDK_03.00.00.00版本。问题:System_linkControl()改变参数信息之后,送到algLink_tsk.c文件中AlgLink_tskMain()接收,如果case中处理时间过长,使得数据拥堵,不能接收新的link发来的数据,case SYSTEM_CMD_NEW_DATA不再执行,该如何解决?例如:1、chains_singleChCapOsdDis.c中,执行System_linkControl(osdid,  ALG_LINK_OSD_CMD_SET_CHANNEL_WIN_PRM,  NULL,  0,  TRUE);2、algLink_tsk.c文件中AlgLink_tskMain()函数中,执行到case ALG_LINK_OSD_CMD_SET_CHANNEL_WIN_PRM:                  case ALG_LINK_OSD_CMD_SET_CHANNEL_WIN_PRM:
                 {
                   AlgLink_OsdChWinParams *params;                   params = (AlgLink_OsdChWinParams *) Utils_msgGetPrm(pMsg);
                   AlgLink_OsdalgSetChOsdWinPrm(&pObj->osdAlg, params);
                   Utils_tskAckOrFreeMsg(pMsg, status);
                 }
                break;   【原函数】 变为:            case ALG_LINK_OSD_CMD_SET_CHANNEL_WIN_PRM:
                 {
                   AlgLink_OsdChWinParams *params;                   sleep(60); /* 用意:给这个处理一个延时*/                   params = (AlgLink_OsdChWinParams *) Utils_msgGetPrm(pMsg);
                   AlgLink_OsdalgSetChOsdWinPrm(&pObj->osdAlg, params);
                   Utils_tskAckOrFreeMsg(pMsg, status);
                 }
                break;   【原函数】3、之后运行不正常,在case SYSTEM_CMD_NEW_DATA:中,AlgLink_algProcessData(pObj);函数,frameList.numFrames值变为10,上游link发送过来的帧数据堵塞,运行完for(frameId=0; frameId谢谢您看了这么多描述,不知道有没有描述清楚,感谢您的答复!
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
HI:问题已经得到解决,希望给碰到相同问题的好友一个思路。借此抛砖引玉,希望得到更好的解决办法!解决方法:把link改成定时器模式(每个link定时从前一个link取数据,而不是前一个link告诉下一个link来新数据了,通知模式是前一个link主动告诉后一个link来新数据了,主动轮询):【将chains_singleChCapOsdDis.c函数中,这句改为ipcFramesOutVpssPrm.baseCreateParams.noNotifyMode = TRUE;】谢谢!
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

你可以试试有timeout的System_linkControlWithTimeout 这个可以设置超时时间,第三个问题可以做一个应答么,或者delay一下再发么
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
你好,感谢您的耐心指导,上一个link传送过来的帧数据给下一个link,这里系统运行起来之后不能控制。delay一下该段代码我试过,还是数据堵塞。System_linkControlWithTimeout ,我试过了,很不错的延时处理函数。再次感谢!