Geo*_* R. 1 c embedded heap double-buffering
我面临着极大的担忧.我目前正参与三明治课程,我正在学习如何在嵌入式系统上开发软件 - 就像在open1788板上一样.
我计划实现双缓冲功能,因为我可以在液晶屏上看到闪烁.确实可以在绘制时查看形状!
通过双缓冲,重绘整个屏幕的速度足够快.也许我应该深入研究管理裁剪,所以我只需要重新绘制需要的部分屏幕?但那不是问题.
所以,我写了几个函数来处理双缓冲选项.如果我不希望软件使用双缓冲,那么我不会为它分配内存; 否则我会.
问题是为堆分配的默认空间最多为1024字节.我的临时缓冲区长度为261120字节!(每272像素高481像素宽,每一个16bpp).
因此,malloc返回NULL.
我采取的第一个解决方案是放置静态缓冲区,我的意思是:
static WORD s_double_buf[481*272];
Run Code Online (Sandbox Code Playgroud)
但明显的缺点是,即使您不使用双缓冲,它仍然会被分配.
第二种解决方案是编辑配置文件以使堆更大,每个替换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
Run Code Online (Sandbox Code Playgroud)
在GUI库的实现中,您将绘制到SCREEN.