在dvr_rdk中配置了MARn相应的寄存器,使能了L2 Cache,使用的大小为128K,另外128K当做RAM。目前在dsp上加了一些算法,看了一下dsp的效率不高,不能实时处理,所有打算用EDMA把数据一块一块的从DDR buf搬运到128K L2 ram 上做运算,运算完成后再用EDMA搬运回ddr buf,应该会快一些。 于是我就实验了一下,申请了两个L2 ram上的内存做实验,先从ddr中拷贝了8K的Y数据到s0Buf上,写了一个简单的二值化的函数,把s0Buf、s1Buf传入二值化函数,s1返回二值化的结果,再通过EDMA拷贝回原来的DDR buf内存。看显示的图像不对,处理的图像全变成黑的了。然后我把#pragma DATA_SECTION声明删掉,数据就正常了,希望前辈能够指点一下。
看了dsp生成的map文件里面内存使用了多少就减少多少,没有问题。然后查了几天资料说可能是cache一致性问题,但是加了一些cache操作的函数但是没有作用。希望大家能给指点一下谢谢了!!
#pragma DATA_SECTION(s0Buf, "DSP_L2_RAM")
static unsigned char s0Buf[8000];
#pragma DATA_SECTION(s1Buf, "DSP_L2_RAM")
static unsigned char s1Buf[8000];
pIn是ddr中实时的图像Y的首地址
for(i=0; i<240; i+=10){
Dat_copy(pIn+704*i, s0Buf, 704, 10);
IMG_thr_le2min_8_cn(s0Buf, s1Buf, 704, 10, 100);
Dat_copy(s1Buf, pIn+704*i, 704, 10);
Cache_wbInvAll();
Cache_wbInv(pIn+704*i, 7040, Cache_Type_ALL, TRUE);
}
非常谢谢给提示的前辈了!!!