Embedded 在我的嵌入式系统中,在外部ram中填充帧缓冲区非常慢

Embedded 在我的嵌入式系统中,在外部ram中填充帧缓冲区非常慢,embedded,arm,framebuffer,neon,omap,Embedded,Arm,Framebuffer,Neon,Omap,当我通过引用字体数据库从UART获取字符代码时,我正在更新外部ram中的帧缓冲区 帧缓冲区大小约为600kb,在不使用DMA的情况下完全填充大约需要1.5秒。外部ram大小为8 MB。帧缓冲区位于数据段中,因此SDRAM控制器给予它第二优先级,而文本段具有最高优先级。SDRAM控制器配置为在突发模式下运行 我使用的处理器是OMAP 3515,工作频率为200 MHz,外部RAM为133 MHz 我试图找到一个最佳的解决方案,在40毫秒内填充600kb的帧缓冲区。请帮助我 启用MMU/MPU并打开

当我通过引用字体数据库从UART获取字符代码时,我正在更新外部ram中的帧缓冲区

帧缓冲区大小约为600kb,在不使用DMA的情况下完全填充大约需要1.5秒。外部ram大小为8 MB。帧缓冲区位于数据段中,因此SDRAM控制器给予它第二优先级,而文本段具有最高优先级。SDRAM控制器配置为在突发模式下运行

我使用的处理器是OMAP 3515,工作频率为200 MHz,外部RAM为133 MHz


我试图找到一个最佳的解决方案,在40毫秒内填充600kb的帧缓冲区。请帮助我

启用MMU/MPU并打开i-cache和d-cache,使代码不会与内存移动竞争。使用
ldmia
stmia
说明来确保您的线路是突发的。允许图形内存可写缓冲。这使手臂可以组合在一起书写。您可以使用HSYNCVSYNC中断来刷新缓冲区

根据,您当前的算法可能不是最优的。确保源和目标至少与32位对齐。不清楚的是,您只是在复制内存,或者源是不同的像素格式、步长等。如果您正在进行密集的平面计算,则可能会加速某些像素解包操作。但是,确保i-cache处于打开状态将使任何算法的速度提高很多倍。如果您可以对齐图示符,这样就不需要对视频ram执行读-修改-写周期,那么您可以获得一个加速。或者,您可以使用阴影帧缓冲区,该缓冲区通过VSYNCHSYNC中断将整个比例复制到主视频ram


有关允许ARM使总线饱和的提示,请参阅。

如果您正在寻找代码解决方案,则应在此处发布现有代码。如果您正在寻找一个硬件解决方案,那么您的问题就与主题无关了,因为我正在寻找使用SDRAM控制器中的设置填充帧缓冲区的技术。而不是硬件解决方案。那么您应该在此处发布现有代码,或者我们可以花时间建议您已经完成的工作。通过UART的数据速率是多少?您是在为每个字符写入整个缓冲区,而不是仅为该字符更新帧缓冲区块吗?要求“技术”是有点仓促的,因为即使是最简单的mem复制方法,在1.5秒内的600kb听起来也非常慢。更可能的情况是您的实现或硬件配置较差。问题也许不是“我怎样才能让它更快”,因为它目前非常缓慢,你只能做一些可怕的错误。您是否已将SDRAM控制器配置为与内存性能相匹配,以及还有什么正在同时运行(中断、其他线程)?本文的要点是将写入和读取的数量降至最低。你的算法内存有限。有很多ARM功能可以减少这种情况,但是通过组织您的应用程序,您也可以获得很好的收益。