转自 https://blog.csdn.net/idea4good/article/details/94662557
嵌入式系统由于软硬件资源的差异性,往往在选择GUI库时,打伤脑筋;或许有些开发者认为,直接选择Qt就可以了,但实践证明,有些项目走到一半的时候,才发现系统的性能和资源完全喂不饱这个大鳄~~
个人认为嵌入式GUI库需要解决以下问题,才能有效降低嵌入式系统开发的风险:
可伸缩:
因为嵌入式系统的资源具有很强的不确定性,既可以富有的像PC一样,也可以有限到单片机的水平(cpu:60MHZ, ram < 32k),所以为了满足各种需要,GUI库也需要具有伸缩性:即可以用来制作很炫,很复杂的GUI效果,也可以作仅有几个按钮的简单GUI;即可以进行复杂的窗口管理、焦点管理、滑动/触控操作,也可以只进行一些简单的背景绘制、按钮响应。简而言之:小可以支持简单的单片机APP,大可以支持PC/手机APP
开源:
由于嵌入式的硬件复杂性,调试难度很高,因此几乎要求所有的软件必须开源(甚至操作系统都需要开源)。因为只有开源,才能在调试的过程中获得足够的信息。而作为跟业务有直接联系的GUI软件,更是调试的重中之重,所以GUI库的开源,很多时候是个必选项。
简单,依赖少:
GUI作为一个系统的表皮,本身并没有并不承载核心业务,相反是来支持核心业务的。如果GUI库过于复杂,很容易出现喧宾夺主的情况;而GUI又是直接呈现在用户面前的东西,一旦出现瑕疵,几乎无法忍耐,所以工程师花费大量的时间调试GUI代码是很常见的事情。因此简单的GUI库能帮助工程师省心不少。不过,目前看来,很多GUI库都是炫技般的存在,所用的语法和设计思路几乎各不相同,但总的来说很多都是:不走寻常路。有些结构设计起来,虽然很有巧妙,但不太符合直观思维;也常常因为这个原因,也常引来工程师和项目经理之间矛盾。比如,项目经理永远想不通:不就是加个按钮嘛,有那么难吗?
高度定制:
用过GUI库的同学,可能都有一个感受:“几乎没有什么GUI可以直接拿来使用”。是啊!任何GUI都不是为你我而生的 – 修改和扩展是必不可少的;另外,GUI风格有时就跟时装一样,每过段时间就需要更新,所以,很多程序员真不喜欢作GUI部分,还是作核心业务好,一旦搞定,可以吃好几年。
那么既然需要定制、扩展,那么GUI库最好是能够方便高度定制。个人认为,最简单的定制方法,就是直接修改GUI库里面的代码,这样随着时间的推移,对GUI核心的认识也会逐渐提高。如果不想动原始代码,自己独立的作一个控件,则需要GUI库充分放权,让开发者在扩展的过程中能够完全控制住最终GUI效果。
跨平台:
跨平台的原因有两个:一个是为了适应嵌入式软硬件的更新;另一个则是为了提高开发速度。因为,今天最理想、强大的开发平台是PC,最好的IDE是VS或VS Code,充分利用这些工具,才能大大提高开发效率。因此,嵌入式软件最好在烧写到硬件前,能在PC环境充分验证;尽量利用Windows,Linux强大的调试工具把问题在PC端解决。开发者不可能每修改一次代码,都下载到硬件上验证,这么作的时间成本过于昂贵。
总结一下上面的要点,除了跨平台以外,在下觉得“简单”是最重要的,如果不简单,上面所有的问题都很难解决。
在下认为目前能满足以上5个条件的GUI库很少,5千行的GuiLite值得大家检验一下。目前GuiLite在Github上已经有近3K star,通过联网统计到的编译次数超过了5千次,实例运行时间超过了1万分钟;文档齐全;实例生动有趣;100%可上编译、运行。好了,上些运行效果,交给大家判断好了: