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<frameList.numFrames; frameId++)之后,程序卡死,接收不到新的SYSTEM_CMD_NEW_DATA,此处该如何处理?
谢谢您看了这么多描述,不知道有没有描述清楚,感谢您的答复!
tao chai:
你可以试试有timeout的System_linkControlWithTimeout 这个可以设置超时时间,第三个问题可以做一个应答么,或者delay一下再发么
yoyo only:
回复 tao chai:
你好,
感谢您的耐心指导,上一个link传送过来的帧数据给下一个link,这里系统运行起来之后不能控制。delay一下该段代码我试过,还是数据堵塞。
System_linkControlWithTimeout ,我试过了,很不错的延时处理函数。
再次感谢!
shupeng hu:
你好,在AlgLink_init中Utils_tskCreate创建AlgLink_tskMain为什么识别,好像卡在Utils_mbxRecvMsg,请问这个该怎么解决呢
shupeng hu:
回复 shupeng hu:
在AlgLink_init中Utils_tskCreate创建AlgLink_tskMain为什么失败