视频这块的工作都快一年多了。发现在自己还是那么多菜。继续努力。言归正传。
由于我们用的是三星的s5p6443芯片(其实就是阉割版的6440或者s5p6410),没有camera的接口,但我们公司的做的gps设备基本都需要AVIN功能,主要用来做倒车镜功能来用。所以我一们一直采用s5p6443+fpga+tvp5150的架构来做avin的功能。其实,基本工作原理就是,tvp5150将标准的模拟信号(NTSC/PAL/SECAM制式)转换为YCBCR数字信号后,送给fpga,fpga再将其转为RGB565的数据,然后再将数据打包,以sd协议,发给s5p6443。
由于cpu收到的数据是,打过包的数据,也就是有包头的。就像tcp/ip的数据,在网络上传输是有20个字节ip包头。呵呵。所以我们,avin的驱动,就需要在接受到数据后,将其解包,然后奇偶场数据合并成一帧,在再经过post放缩到合适的大小在送到framebuffer来显示。
这种架构,有一个很大的问题就是,cpuloading太高,对小的屏,基本还能接受,但是大屏就不行了。在我们4.3寸的屏上,avin的loading就将近55%。
最近老大们,一直让我们的avin的驱动,要把loading给将下来。这可头疼死我们了。
首先,为了降cpu的loading,我先分别测试了一下,avin整个功能模块上,各个模块所耗费的cpuloading。最后发现,整个cpuloading的主要耗费在数据解包和内存数据搬运中,特别是内存数据搬运。因为一阵数据,很大,而我们的数据包只能512byte大小(这个主要受sd协议所限制)。所以在原来解一帧数据的时候,每一帧数据,有1300多个数据包,那么就是一帧数据我们要调用1300多次memc

本文讲述了作者在工作中遇到的CPU负载过高问题,特别是在处理AVIN功能时,由于大量的memcpy调用导致CPU利用率居高不下。通过深入分析,作者发现了解包和内存搬运是主要瓶颈。为解决这个问题,作者尝试使用汇编实现了一个优化的内存复制函数,替代标准的memcpy。这一改变显著降低了CPU负载,将系统整体负载降至30%以下,验证了在关键地方使用汇编以提高效率的理论。
最低0.47元/天 解锁文章
8万+

被折叠的 条评论
为什么被折叠?



