·上一文章:三态门逻辑功能的Multisim仿真方案
·下一文章:FlexRay在高速汽车网络系统中的应用
基于DaVinci技术的DM644x器件上ARM926的MMU(存储器管理单元)具有虚拟/物理寻址能力。然而,C64x+DSP内核只能够处理物理地址。因此,用于DSP处理的输入和输出缓冲器必须驻存在物理上连续的存储器中。
虚拟到物理地址的转换由编解码引擎处理。通过复用(指针指向)某些由驱动器分配的缓冲器,可获得物理上连续的存储器,这里使用了Linux中的一些技术,比如DMA_alLOC_coherent(),来在内核空间中分配这类存储器。由TI开发的库/内核模块CMEM,允许从用户空间应用来分配物理上连续的存储器。
例如,我们利用前面提到的CMEM驱动器来分配物理上连续的“输出”缓冲器。编解码引擎对帧进行解码,并把解码后的帧放在输出缓冲器中。
接下来,指向输出缓冲器的指针被传递给fbvideosink(通过 GstBuffer)。这个videosink必须把解码后的数据mEMCpy(复制)到帧缓存中,然后才能显示。由于mEMCpy操作是一种成本很高的GPP使用,这种方法使得ARM 和DDR接口的负载很重,因而增加了功耗,且效率极低。
这种技术对非常小的缓冲器是可行的,但在开发人员使用D1(和更高)大小的缓冲器时,将开始降低系统性能。一种更有效的方案是复用已经驱动器分配了的物理连续缓冲器,并在编解码器引擎和videosink插件之间把指向这些缓冲器的指针来回传递。