在我的嵌入式系统中填充外部 ram 中的帧缓冲区非常慢 [关闭]

Posted

技术标签:

【中文标题】在我的嵌入式系统中填充外部 ram 中的帧缓冲区非常慢 [关闭]【英文标题】:Filling the frame buffer in external ram is very slow my embedded system [closed] 【发布时间】:2013-10-28 08:37:50 【问题描述】:

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

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

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

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

【问题讨论】:

如果您正在寻找代码解决方案,那么您应该在此处发布现有代码。如果您正在寻找硬件解决方案,那么您的问题与Stack Overflow 无关。 我正在寻找使用 SDRAM 控制器中的设置填充帧缓冲区的技术。不是硬件解决方案。 那么你应该在这里发布你现有的代码,或者我们可以花时间建议你已经做了什么。通过 UART 的数据速率是多少? 您是在写入整个缓冲区每个字符,而不是仅仅更新字符的帧缓冲区块? 要求“技术”有点过激,因为即使是最幼稚的内存复制方法,1.5 秒内 600kb 听起来也非常慢。更有可能是您的实施或硬件配置不佳。问题可能不是“我怎样才能让它更快”,因为它目前非常慢,你只能做一些可怕的错误。您是否配置了 SDRAM 控制器以匹配内存性能,以及同时运行的其他内容(中断、其他线程)? 【参考方案1】:

启用MMU/MPU并开启i-cached-cache,这样代码就不会与记忆运动。使用ldmiastmia 指令确保您爆破行。允许图形内存可写缓冲。这允许 ARM 将写入组合在一起。您可以使用 HSYNCVSYNC 中断来刷新缓冲区。

根据Clifford,您当前的算法可能不是最优的。确保 sourcedestination 至少对齐到 32 位。不清楚的是您只是在复制内存还是 source 是不同的 pixel 格式、stride 等。如果您正在做剧烈的 平面计算,然后neon可以加速一些像素解包操作。但是,确保您的 i-cache 处于开启状态将使任何算法都快很多倍。如果您可以对齐您的 glyphs,以便您不需要 read-modify-write 循环到 video ram,则可以加快速度.或者,您可以使用 shadow frame buffer 将整个比例复制到 VSYNCHSYNC 上的主 video ram strong> 打断。

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

【讨论】:

这篇文章的要点和主要收获是尽量减少写作和阅读量。您的算法是内存限制。有很多 ARM 功能可以减少这种情况,但是通过整理您的software blitter,您也可以获得不错的收益。

以上是关于在我的嵌入式系统中填充外部 ram 中的帧缓冲区非常慢 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

绕过操作系统并绘制到 GPU 的帧缓冲区

Linux如何在RAM缓冲区中录制声音并以自定义延迟播放音频

嵌入式中的CPU和外部存储器

20145225 《信息安全系统设计基础》第7周学习总结

通过我的 php.ini 中的数据填充嵌入在我的网站上的 Google 表单。

2017-2018-1 20155228 《信息安全系统设计基础》第九周学习总结