10

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

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

你知道任何库只需要一个指向视频内存的指针,也可以处理线条、图像和字体吗?

4

11 回答 11

6

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

在这里查看: http ://www.swellsoftware.com/

祝你好运,

于 2009-01-07T14:49:47.787 回答
3

当您合并一些第三方解决方案时,您可能只是自己编写了它。

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

有大量的免费代码用于绘制线条和弧线等。

杀手可能是字体,但我认为您会发现第三方应用程序只会在处理字体时占用您所有的内存,您的资源有限,因此您需要预先计算字体并复制位。

制作一个二维数据数组,首先在您喜欢的主机上完成所有工作,如果您想查看您正在绘制的内容,保存 .bmp 文件很简单,将一系列 .bmp 文件转换为 .bmp 文件也很简单视频,如果你想看一些动作。

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

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

或者只是购买为您完成所有这些工作的众多 lcd 解决方案中的一种,您只需向它发送命令,例如 draw "Hello World!" 在某些 (x,y) 处,使用蓝色作为前景,白色作为背景。

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

于 2009-01-16T22:19:16.897 回答
2

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

于 2008-12-14T08:39:06.787 回答
2

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

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

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

于 2008-12-19T13:59:17.973 回答
2

不是免费的,但在低资源系统上很好:http : //www.tat.se 及其产品 Kastor 和 Cascades。它只需要一个指向视频内存、malloc 和看起来像文件系统的东西的指针。最后两个要求也不是绝对必要的。不需要操作系统。

于 2009-02-08T14:25:17.147 回答
2

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

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

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

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

于 2010-03-25T23:13:48.840 回答
1

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

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

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

于 2009-02-09T09:40:24.673 回答
1

(老问题,但我想发表我关于这个主题的发现)

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

对于用户界面,Gwen 似乎是一个不错的选择。它很容易移植,可以定制为渲染位图皮肤控件或矩形/圆形/线条形式: https ://github.com/garrynewman/GWEN

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

于 2012-09-24T12:36:57.710 回答
0

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

但是这些东西是 x86 特定的(虽然 Allegro 不是)。

在 512k 内获取 Linux 内核和有用数量的用户空间软件是很棘手的(但可能会得到一些东西)

于 2009-01-05T22:01:39.867 回答
0

你应该试试easyGUI

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

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

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

此外,它真的很便宜(没有许可费,每个席位只需固定金额),并带有一个 PC 程序来设计屏幕和生成代码。PC 程序需要一段时间来适应,但最终在 PC 上尝试某些东西然后生成并观察它在您的目标上运行是非常好的。

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

于 2009-04-24T12:39:48.270 回答
-1

512kb 很小。祝你好运!

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

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

于 2008-12-14T08:14:13.997 回答