没有Linux的嵌入式系统的图形库?

时间:2008-12-14 07:47:54

标签: user-interface graphics embedded microcontroller

似乎任何类型的图形库如DirectFBMiniGui都需要某种基础操作系统,如Linux或uClinux。

我面临的挑战是为微控制器编写一个只有512kb闪存的软件,一个LCD显示器和一个触摸屏来显示和处理一些图片和GUI部件。

你知道哪个库只需要一个指向视频内存的指针,它也可以处理行,图像和字体?

11 个答案:

答案 0 :(得分:6)

我们使用Swellsoftware的“PEG”(C ++版本)已有多年。它是商业软件,不是免费的,但底层屏幕驱动程序只能使用指向图形内存的指针,它们为不同类型的图形硬件提供了许多示例驱动程序。我们使用示例驱动程序作为参考,为我们的专有硬件编写了自己的自定义驱动程序。我们总是有某种RTOS,但我相信PEG +也可以在没有操作系统的情况下运行。

请在此处查看:http://www.swellsoftware.com/

祝你好运,

答案 1 :(得分:3)

当你加入一些第三方解决方案时,你可以自己编写它。

对于大多数(如果不是全部)环境,屏幕只是一个二维像素阵列。有时托盘化有时不会,但无关紧要,你可以随心所欲地写下你的。

有很多免费代码用于绘制线条和弧线等。

杀手可能是字体,但我认为你会发现第三方应用程序只会在做字体时咀嚼你所有的内存,你资源有限,所以你需要预先计算字体并只是复制这些字体。

创建一个二维数据数组,首先在你最喜欢的主机上完成所有工作,如果你想看到你正在绘制的内容,那么保存.bmp文件是微不足道的,并且可以轻松地转换一系列.bmp如果您想观看某些动作,请将文件转换为视频。

如果您使用通用C,并且没有libc调用(编写您自己的memcpy,memset等),则此代码将在主机上的任何位置运行以进行开发和目标。

字体将成为你的杀手,你必须预先计算它们,但设法将信息缩小到尽可能小,并在运行时提取数据并将每个字母的位快速复制到虚拟屏幕中你可以。

或者只是购买众多液晶显示器解决方案中的一个,为您完成所有这些,您只需发送命令,如绘制“Hello World!”在某些(x,y)使用蓝色作为前景,白色作为背景。

基本上我认为非操作系统解决方案仍然会使用太多的库,并且对于您的特定应用来说太大了。 2d字节或像素数组很容易管理自己。即使您正在为桌面平台编写应用程序,我也会这样做,并在最后一刻将完全重新编译的屏幕更新复制到某个操作系统依赖库(允许从一个操作系统最大程度地移植到另一个操作系统)。

答案 2 :(得分:2)

对于尽可能小的占地面积,您应该考虑RamTEX。我在8位PICS的两个项目中使用过它。在我的应用程序中,ROM空间约为35K,RAM约为1K(数量取决于您是否需要为显示器缓冲RAM)。 ROM空间取决于您想要或需要的图形功能。

他们提供完整的来源,一次性价格相当不错,低于1000美元(请注意,他们网站上列出的价格必须转换为美元,或任何您的货币)。没有版税或每个产品的限制。

它们提供了许多不同的大小和样式字体以及基本的绘图调用(线条,像素,方框等)。它没有任何已定义的“对象”,如按钮或菜单,但我能够实现弹出菜单而不会有太多麻烦。它支持“视口”,可用于定义文本框,菜单等,每个视口都有自己的属性。

它还附带一个在PC上运行的模拟器,因此您可以在移动到嵌入式系统之前在桌面上开发显示代码。

答案 3 :(得分:2)

您应该关注的重要事项是LCD和触摸屏的控制器。该任务有大量的C库(不是免费的)。快速谷歌给我这些结果:Simplify TechnologiesRamtex

如果你想找到一些开源的东西,那么从你的控制器类型开始并搜索嵌入式设备论坛(即使它不是ARM,你也可以轻松移植C代码)。一些建议:

此外,一些套件制造商提供了一个SDK(有和没有Linux)和他们的板。购买董事会通常会授予您使用代码的许可。使用相同的LCD控制器搜索开发板。

答案 4 :(得分:2)

不自由,但对资源不足的系统很好:http://www.tat.se及其产品Kastor和Cascades。它只需要一个指向视频内存,malloc和类似文件系统的东西的指针。最后两个要求也不是绝对必要的。不需要操作系统。

答案 5 :(得分:2)

如果您对交互性和GUI小部件的要求非常适度(或者您可以设计自己的小部件),请查看LibGD。使用库的函数绘制要在屏幕上显示的图像,然后使用gdImagePngToSink()将其写入帧缓冲区。

答案 6 :(得分:1)

(老问题,但我想在这个问题上发表我的发现)

对于高质量的图形,Anti-Grain Geometry是一个不错的选择。它可以编译为大约50kB,并且可以自定义以写入各种帧缓冲区和渲染设备: http://www.antigrain.com/

对于用户界面,Gwen似乎是个不错的选择。它易于携带,可以自定义以呈现位图蒙皮控件或仅呈现矩形/圆形/线形: https://github.com/garrynewman/GWEN

然后,如果您还在选择RTOS,NuttX拥有自己的图形子系统和小部件工具包: http://nuttx.sourceforge.net/

答案 7 :(得分:1)

您可能需要使用运行长度编码(RLE)压缩字体。有关示例,请参阅.pcx文件格式,尽管最好设计自定义RLE。您没有指定LCD的位深度,但如果不需要抗锯齿,则字体需要每像素一位,或者最多需要三次带抗锯齿的BPP。每个角色都必须拥有自己的宽度,因为等宽文本并不好看。您应该使用优化的例程直接从RLE压缩字体渲染到屏幕。

SDL是一个非常便携的图形库。它用于嵌入式Linux系统,但我认为它可以在没有操作系统的情况下使用。 SDL的优点在于您可以使用Windows / Linux开发和测试UI,然后将目标锁定在嵌入式系统上。无需更改应用程序代码!

您还可以在SDL之上使用Anti-Grain Geometry库(http://www.antigrain.com/about/index.html)。使用16或24位LCD,可以产生令人惊叹的图形。它可能对您的环境来说有点过大,因为我在ARM / Linux系统上的可执行文件大约是1兆字节。它包含用于字体渲染的SDL,AGG和libfreetype2。 AGG也有点慢,但会产生漂亮的效果。

答案 8 :(得分:0)

我的猜测是像FreeDOS这样的东西,结合DJGPP作为工具链,而Allegro作为图形库可能会适合512k的闪存并且仍能做一个合理的工作(我假设你有一个x86,它有几个Mb这里的公羊)

但是这些东西非常具有x86(Allegro不是)。

在512k内部获得Linux内核和有用数量的用户空间软件是很棘手的(但可能会进入SOMETHING)

答案 9 :(得分:0)

您应该尝试easyGUI

easyGUI是一个GUI图形软件/库,专门用于小型(嵌入式)嵌入式系统。

无需操作系统。一个基本的循环执行就足够了。 512kb的Flash应该比OK好。 easyGUI提供的库非常灵活,可以帮助您最大限度地减少所需的Flash数量。

支持开箱即用的字体,图形,位图,触摸屏和一堆视频控制器。

另外它非常便宜(没有许可费,每个座位只有一笔数额),并附带一个PC程序来设计屏幕和生成代码。 PC程序需要一段时间才能习惯,但最终在PC上尝试某些东西非常好,然后生成并观察它在你的目标上运行。

他们的网站上有一个演示应用程序。值得一试。

答案 10 :(得分:-1)

512kb很小。祝你好运!

您可能想要dslmplayer结合使用。后者不需要GUI来显示电影。我想它也可以显示图像。

尽管如此,我担心你的闪光会太多了。也许这些链接的来源会有所帮助。