c - lpc1788 上的双缓冲

标签 c embedded heap-memory double-buffering

我很担心。我目前正在参加三明治类(class),我正在自学如何在嵌入式系统上开发软件 - 碰巧是在 open1788 板上。

我计划实现双缓冲功能,因为我可以在 LCD 屏幕上看到闪烁。确实可以边画边看形状!

有了双缓冲,重绘整个屏幕就足够快了。也许我应该深入研究管理剪辑,这样我只需要重绘需要的屏幕部分?但这不是问题。

因此,我编写了几个函数来处理双缓冲选项的选择。如果我不想让软件使用双缓冲,那么我就不会为它分配内存;否则我会。

问题是为堆分配的默认空间高达 1024 字节。而我的临时缓冲区的长度为 261120 字节! (481 像素宽每 272 像素高,每一个 16bpp)。

因此,malloc 返回 NULL。

我采取的第一个解决方案是放置一个静态缓冲区,我的意思是:

static WORD s_double_buf[481*272];

但明显的缺点是,即使你不使用双缓冲,它仍然会被分配。

第二个解决方案是编辑配置文件使堆更大,每个替换 1024 字节,例如 1048576 字节 (0x100000)。我不喜欢这个解决方案,因为我应该专注于节省内存空间。

也许我非常怀念嵌入式编程技能?根据那个最好的解决方案是什么?我怎样才能进步?我不会告诉你我阅读和深入研究数据表的杂乱能力。

如果有人能为初学者提供引用资料,我将不胜感激,主要是适应我正在编程的电路板。

提前致谢!

最佳答案

在嵌入式领域,您通常会在编译时而不是运行时决定基本方面,例如是否使用双缓冲。因此,使用预处理器和条件编译是完全可以接受的:

#ifdef WITH_DOUBLEBUFFERING

    static WORD s_double_buf[481*272];
    #define SCREEN s_double_buf

#else

    #define SCREEN your_real_framebuffer

#endif

在您的 GUI 库的实现中,您将绘制到屏幕上。

关于c - lpc1788 上的双缓冲,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14216857/

相关文章:

编译输出代码

c - 嵌入式系统中的事件记录

c++ - 在堆上分配 shared_ptr 是否可能存在内存泄漏?

c - 尝试创建一个猜测我的字母代码。如何合并用户输入的字符等于我的字母的情况?

c - 将输入加载到 C 中的 vector 类型函数时遇到问题

c - 跨两个字节写入位

qt - 什么是 arm-linux-gcc 以及如何在 ubuntu 中安装它

.net - 委托(delegate)总是固定的吗?

elasticsearch - Elasticsearch堆被填充以进行简单搜索

C 字符串到 float 的转换