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

c6678l 上ipc和edma3之间是否有干扰

我在evmc6678l上单独测试edma3lld,拷贝1920*360大小的数据(ddr3拷贝到ddr3)时间大概是0.8个毫秒左右,但是如果加入了ipc的messageQ应用之后,同样的拷贝过程,需要5.6毫秒,这和之间内存拷贝时间差不多了,这是什么原因呢?请各位专家帮忙分析分析

Thomas Yang1:

这和之间内存拷贝时间差不多了 

[TY]请问这个 拷贝时间差不多了 怎么理解。用message Q 的话,您是用哪种copy方式,源地址和目的地址是否和edma3重合呢?

cheng paulson:

回复 Thomas Yang1:

你好,我测了一下,内存间直接赋值,时间相差只有1毫秒。另外:源地址和目的地址是否和edma3重合呢?这是什么意思,能否详细解释一下,谢谢!

这个copy就是将yuv420格式的uv转换成yuv420sp格式的uv

简单的内存之间的赋值:

static void convertData(XDAS_Int8* outData,XDAS_Int32 yuvW,XDAS_Int32 yuvH){ int n=0; XDAS_Int8 *dest,*pu,*pv; pu=outData+yuvW*yuvH*3/2; pv=pu+yuvW*yuvH/4; dest=outData+yuvW*yuvH; memcpy(pu,dest,yuvW*yuvH/2); for(n=0;n<yuvW*yuvH/2;n+=2) { *(dest+n)=*pu; *(dest+n+1)=*pv; pu+=1; pv+=1; } Cache_wbInv(dest,yuvW*yuvH/2, Cache_Type_ALL, TRUE);}

edma3://edma3的代码间附件,和sample差不多

static void convertData(XDAS_Int8* jpgData,XDM1_BufDesc * outputBufDesc,XDAS_Int32 w,XDAS_Int32 h){ PROF_CLOCK begin; XDAS_Int8* start=jpgData+w*h; int i,n=1; if(outputBufDesc->numBufs<3) { printf("converData desc buf is smaller than 3\n"); return; } for(i=1;i<12;i++) { if(w*i*2<32767 && h%(4*i)==0) n=i; } printf("@@@@@@@@@@@ src:0x%08x,0x%08x\n",outputBufDesc->descs[1].buf,start); begin=PROF_clock(); edma3_copy(hEdma,(unsigned char*)outputBufDesc->descs[1].buf,(unsigned char*)start,1,w*n,h/(4*n),1,w*n,2,w*n*2,EDMA3_DRV_SYNC_AB); printf("%d decode frame 1:%f\n",MultiProc_self(),((float)(PROF_clock() – begin) / PROF_CLOCKS_PER_SEC)); edma3_copy(hEdma,(unsigned char*)outputBufDesc->descs[2].buf,(unsigned char*)start+1,1,w*n,h/(4*n),1,w*n,2,w*n*2,EDMA3_DRV_SYNC_AB); Cache_wbInv(start,w*h/2, Cache_Type_ALL, TRUE);}

赞(0)
未经允许不得转载:TI中文支持网 » c6678l 上ipc和edma3之间是否有干扰
分享到: 更多 (0)