在dm3730 的arm端,我采用摄像头采集回来的视频码流存在在A_buf,但是A_buf 的内容我想传给dsp端进行算法处理,所以我采用Memory_contigAlloc 函数分配了B_buf。
程序中,我单纯地将A_buf的内容通过memcpy拷贝到B_buf中, 发现arm端cpu占用率达到60%左右;
但是如果B_buf是通过new出来的话,同样的memcpy操作,arm端cpu占用率基本在10%左右。
(ps:采集回来的视频图像分辨率为720×576 格式为UYVY)
请问问题出在哪里呢?Memory_contigAlloc函数分配的内存中,我是有调节MAR寄存器进行cache的。
Chris Meng:
Eric,
一定需要复制数据么?能否仅仅传递buffer的指针首地址给DSP?
eric eric3:
回复 Chris Meng:
不行的吧,arm和dsp共用的那块内容不是特定的一块空间,由cmem管理的吗
Chris Meng:
回复 eric eric3:
Eric,
能否从cmem里面申请buffer作为采集的输出buffer?
eric eric3:
回复 Chris Meng:
你好,
我看到它摄像头采集的分配和管理内存使用mmap的,管理的一般是连续内存,但也可能是非连续的,这一块应该是在划分为linux空间的内存的,而arm和dsp共用的内存在cmem空间,我理解你的意思应该是将mmap指定的内存空间指定在cmem中?这一块我之前尝试过,但是无法正常映射这块内容的内容。
Chris Meng:
回复 eric eric3:
Eric,
DM36x是一个纯ARM9的系统,也使用了CMEM,ARM9是可以使用CMEM分配出的空间的。所以我觉得在DM37xx上应该是类似的。你能再试试么?
TI中文支持网

