传统上,工业应用需要模拟按钮、开关和拨号来与用户交互。时代在变化,工业应用程序用户现在需要丰富的图形用户界面(GUI)。在嵌入式开发中,许多接口都构建在功能强大的嵌入式系统之上,但它们仍然是资源受限的系统,它们可能在处理能力、内存或电池寿命方面受到资源限制。
在今天的文章中,我们将研究几个在工业应用程序中优化GUI的技巧。
技巧1——直接从闪光灯绘制图像
GUI图像通常以PNG的形式存储在闪存中。PNG文件格式是一种压缩图像格式,旨在节省空间。这听起来不错,但如果图像被压缩,这意味着处理器需要先解压缩图像,然后才能将其写入帧缓冲区。解压缩图像不仅需要内部RAM,还将浪费宝贵的时钟周期来解压缩图像。
嵌入式开发人员可以利用的优化是解压缩PNG并以TGA格式将其存储在闪存中。此格式是一种未压缩的文件格式,支持每像素8、16、24或32位,具有8位alpha通道。虽然每个图像都将大于PNG,但可以直接从闪存写入帧缓冲区,而无需浪费CPU周期和RAM进行解压缩。值得庆幸的是,闪存通常非常便宜,而且许多系统设计师无论如何都会加大闪存的尺寸,所以这种优化不仅会提高系统性能,而且对系统成本的影响也应该是最小的。
技巧2——优化图像存储格式
有几种不同的图像格式可用于与显示器交互,但它们并非都是平等创建的,具有各种优缺点。例如,RGB888格式为开发人员提供了每像素24位的颜色深度,这意味着8位用于每个红色、绿色和蓝色颜色控件。虽然这确实提供了丰富的颜色,但存储图像除了需要更复杂的硬件和利用要求外,还需要额外的存储空间。
工业应用的一个很好的折衷方案是使用RGB565格式。RGB565格式为嵌入式开发人员提供了每像素16位的颜色深度,其中5位用于表示红色,6位用于表示绿色,5位用于代表蓝色。显然,颜色保真度不会像RGB888格式那样丰富,因为我们使用的是16位而不是24位表示。为了恢复由于可用比特数较少而丢失的部分色彩保真度,我们可以对图像添加抖动,结果是一个美观的图像,节省了存储和计算能力。
技巧3——仔细优化动画
一般来说,动画可以大大改善GUI。无论是创建一个漂亮的闪屏还是在屏幕上显示实时数据。然而,动画的问题在于,它们通常需要大量的处理能力。在播放动画时,CPU使用率在长时间内飙升至100%并不罕见。这可能并不理想,特别是如果有其他实时活动正在进行。幸运的是,有一些很好的优化可以使用。
首先,限制动画空间的大小。动画通常只占屏幕的一小部分。然而,嵌入式开发人员经常一遍又一遍地重写整个屏幕。开发人员可以缩小尺寸,这样就不会使用整个屏幕。通过这样做,他们可以只更新屏幕的一小部分。这会导致图像存储大小、使用的内存和处理动画所需的时钟周期减少。
另一个建议是使用快速RAM优化像素写入。大多数基于微控制器的系统都有一定数量的快速、零等待RAM,甚至RAM设计用于图形加速器和帧缓冲区。使用此RAM可以最小化执行周期,并在屏幕动画时将CPU负载保持在100%以下。
技巧4——利用DMA
嵌入式开发人员经常忽略的另一个简单技术是利用微控制器(MCU)直接内存访问(DMA)控制器。DMA控制器由多个通道组成,可用于执行以下类型的内存传输:
l 外围设备到RAM
l RAM到外围设备
l RAM到RAM
这对于在应用程序中移动大量数据而不需要CPU干预非常有用!这意味着当CPU忙于处理模数转换时,可以在后台更新帧缓冲区。
一些MCU还可以执行以下类型的DMA传输:
l 闪存至RAM
l 闪存到外围设备
这对于直接从闪光灯中读取图像并将其推送到帧缓冲区非常有用。基于闪存的DMA频道往往不太常见,尽管它们正在寻找进入高性能MCU的途径。
技巧5——预渲染字体
GUI通常会显示文本,而文本又使用一些字体。嵌入式开发人员可以通过预先渲染字体,再次以较少的CPU周期换取存储空间,从而提高图形系统的效率。当字体已经呈现后,可以直接写入屏幕。如果它们还没有被渲染,那么,这意味着CPU必须使用一些周期和时间来渲染字体,然后才能将其推入帧缓冲区。
结论
工业应用程序越来越多地利用GUI为客户和用户提供直观、易于使用的界面。虽然工业GUI设计师起初可能对利用基于嵌入式系统的解决方案犹豫不决,但有许多优化技术可以用来显著简化和优化这些应用程序。这些技术包括调整图像格式、如何存储图像以及减少CPU周期。最后,嵌入式开发人员需要仔细检查显示系统中的每个链接,并确定可以采取什么措施来最小化所需的处理能力。
发表评论 取消回复