嵌入式GUI在低档嵌入式系统中的应用——序:层层包装,还是直接面对硬件?

前言:本文是一个系列文章的序篇,这个系列文章的主题是:通过在低档嵌入式系统中应用嵌入式GUI——TBsoft-GUI,有效地提高低档嵌入式系统软件的性能这一主题,引出低档嵌入式系统软件开发的一个重要发展方向——通过引入现代软件开发思想,实现低档系统的高档化。

 

32位,甚至64位高档嵌入式系统已经在消费类电子产品中广泛使用之时,当嵌入式LinuxWinCE大行其道之时,当不谈Linux好像就不是谈“嵌入式”之时,透过甚嚣尘上的商业炒作,我们惊奇地发现,在工业控制和仪器仪表领域,8位、16位和低档32位系统,并没有消失,反而更加活跃,大量的8MCU,仍然活跃在这些领域的市场上。

 

很多人看来,8MCU的软件开发,只能称为“单片机编程”,没资格叫做“嵌入式系统软件开发”,但是,目前在8MCU上进行的大部分软件开发,真的发挥出了8MCU的全部性能吗?答案可能是否定的,如果真的能够发挥出MCU的全部,甚至是大部分性能,就算是8MCU,能开发出的软件,其性能也会让很多人惊叹不已。

 

嵌入式GUI,这个在平常看来,只能在32位高档嵌入式系统上使用的东西,如果笔者说:有一种嵌入式GUI能在一片增强型8051单片机上运行,不用扩展ROMRAM,不仅能支持单色LCD和键盘,还能支持TFT LCD和触摸屏,能实现和Windows相似的窗口和控件,你相信吗?

 

也许,你会认为笔者是在信口开河。

 

别匆忙地下结论,我们还是先从正大行其道的嵌入式LinuxWinCE谈起吧。

 

嵌入式LinuxWinCE都是高档嵌入式系统中使用的嵌入式操作系统,虽然目前二者是市场上的竞争对手,但有一点二者是相同的——它们都来自PC操作系统——LinuxWindows

 

操作系统,提供了任务管理、内存管理、设备管理等基本功能,可以认为,操作系统是对计算机系统硬件的第一次“虚拟化”,有了操作系统以后,应用程序通常无需直接访问硬件,而是调用操作系统提供的API

 

嵌入式LinuxWinCE提供的API,可以说,是相应的PC操作系统LinuxWindows提供API的一个子集。因此,在其上进行的软件开发,与PC软件开发有很大的相似性,这是目前高档嵌入式系统软件开发越来越接近PC软件开发的根本原因。

 

但是,就是PC软件开发,直接调用操作系统提供的API,还显得比较复杂,例如很少见到程序员使用C语言,进行直接调用Windows API开发Windows应用程序的SDK开发。解决这种复杂性的方法,就是对操作系统提供的API进行二次包装简化。VC中的MFC类库,就是这类问题的一种二次包装简化解决方案,这种解决方案用到嵌入式系统中,就有了WinCE上的eVC,与之相似的还有Linux上的QT和嵌入式Linux上的QT/E

 

但是操作系统“虚拟化”的计算机系统硬件,以CPU之外的外设为主,应用程序的二进制代码通常仍然由CPU直接执行,不同CPU的二进制代码指令集是不同的,这样无法实现一次编译后生成的同一二进制代码在不同的CPU上执行。

 

于是,再进行进一步的虚拟化,在不同的CPU、外设和操作系统上,使用软件虚拟一台计算机,虚拟的计算机有着虚拟的CPU,这种虚拟的CPU有自己的指令集,执行一种通用的虚拟二进制代码指令,虚拟CPU执行指令时,指令被动态“翻译”成不同真实CPU的二进制代码指令。这样,就实现了不同CPU、外设和操作系统执行相同的虚拟二进制代码指令,“一次编译,到处运行”成为了现实,这就是能够实现“跨平台”的虚拟机,Java.NET Framework就是虚拟机的具体实现。

 

硬件上运行着操作系统,操作系统上运行着虚拟机,虚拟机本身也是一种软件,它调用操作系统提供的API,开发虚拟机软件还会使用API的二次包装简化,虚拟机当然也提供API给在虚拟机上运行的应用程序调用,这样一层层地包装,开发变得简化了,面向对象了,可视化了,跨平台了,软件也变得功能强大了,易用性好了,但付出的代价就是消耗大量资源和系统整体性能的下降。

 

Windows Vista很多人埋怨它对计算机硬件的要求为什么那么高?其实,Windows Vista相当于Windows NT 6.0Windows NT系列操作系统的内核是很优秀的,性能也较高。但是Windows Vista提供的API却经过了下列层层包装:Native APIWindows NT系列操作系统的原始API)—Windows API(包括COMCOM+)—.NET Framework 2.0.NET Framework 3.0的核心)—.NET Framework 3.0WPFWCF等),如此层层包装,对应用程序性能的影响可想而知,对计算机硬件的要求很高也就不足为奇了。

 

随着高档嵌入式系统硬件性能的进一步提高,现在高档嵌入式系统MCU的主频可达200MHz以上,RAM可达128MB以上,这样的硬件性能早已超过486586档次的PC,为了简化开发,更重要的是实现跨平台性,虚拟机也早已被引入这类嵌入式系统软件开发,嵌入式系统上的虚拟机,一般也是PC上虚拟机的子集,例如J2ME.NET Compact Framework。虚拟机甚至可以实现PC软件几乎不经修改就可以在嵌入式系统上运行。

 

高档嵌入式系统软件开发最终将走上和PC软件开发趋同的道路,也就是层层包装,以简化软件开发,增强软件功能,层层包装带来的资源消耗和性能下降通过硬件性能的提升来弥补。

 

下面我们回过头来,谈谈低档嵌入式系统。

 

8位、16位和低档32位系统,特别是8位系统,目前在工业控制和仪器仪表领域应用面极广,其原因很简单,在这些领域,并不需要嵌入式系统有很高的性能,降低成本往往是第一位的。8位系统,特别是基于8051系列单片机的系统,以其成本低,外围器件极其丰富,硬件设计容易等特点,仍然在这些领域中大行其道。

 

低档嵌入式系统开发的共同特点是:硬件能提供的资源少,ROMRAM有限,早期的8051系列单片机甚至只能提供4KB ROM128Byte RAM;电路千变万化,程序设计缺乏统一性等。

 

这些特点得低档嵌入式系统软件开发容易走入另一个极端:硬件工程师把低档嵌入式系统开发看作单片机及其外设硬件的编程,直接面对硬件,只考虑使用C语言甚至汇编语言编程直接访问硬件,编写程序主要依靠硬件工程师的经验,由于程序代码量小,又要求尽量少使用硬件资源,提高性能,通常很少考虑代码质量。

 

但是,低档嵌入式系统的硬件,并非已经停止了发展,反而随着高档嵌入式系统硬件的发展,低档嵌入式系统硬件也在快速发展中。早期的8051单片机主频仅612MHz,目前增强型8051单片机主频可以轻易地做到33MHz以上,如果使用内部倍频,实际主频做到90MHz也不少见,使用了单周期指令的增强型8051单片机,例如C8051F系列单片机,其性能可相当于100MHz以上主频的传统8051单片机,AVRRISC体系结构单片机可以有更高的性能。增强型8051单片机可以轻易提供3264KBFlash14KBRAM,有的甚至可以提供128KB Flash8KB RAM。目前随着低档32MCU,例如NXPLuminary的低档ARM价格急剧下降,低档32MCU将更多地进入低档嵌入式系统,而低档32MCU可以轻易地提供66MHz以上的主频、128KB以上的Flash16KB以上的RAM

 

低档嵌入式系统硬件,特别是MCU的快速发展,使得低档嵌入式系统软件开发的硬件资源占用和性能问题开始变得不是首要问题,而软件程序规模却迅速扩大,提高代码质量、简化软件开发和增强软件功能变得重要起来。

 

低档嵌入式系统软件开发,目前主要使用C语言,C语言是一种有很强可移植性的编程语言,适应于多种平台。随着C语言编译器的发展,C语言编译器生成的代码质量已经与汇编语言相差无几,特别是AVRRISC体系结构单片机很适合C语言编译器的代码优化。使用结构化的C语言代替非结构化的汇编语言,在几乎不损失性能的情况下,非常有利于代码质量的提高。

 

目前的增强型低档嵌入式系统硬件,其软件开发如果还看作单片机及其外设硬件的编程,直接面对硬件,那么只能发挥出MCU的一小部分性能,大量的MCU运行时间可能会消耗在延时上。

 

目前用户对于工业控制和仪器仪表领域的软件功能要求,特别是操作方便程度的要求却越来越高。提升操作方便程度的重要手段就是改进用户界面,在不大幅度提高成本的情况下,使用液晶屏甚至TFT彩屏实现较复杂的图形用户界面(GUI),使用键盘甚至触摸屏交互是提高低档嵌入式系统软件操作方便程度的有效手段,这对低档嵌入式系统软件开发提出了新的要求。

 

高档嵌入式系统软件开发的层层包装会消耗大量资源,显然不太可能用于低档嵌入式系统;以前直接面对硬件的单片机编程又无法发挥增强型MCU性能,不利于提高代码质量、简化软件开发和增强软件功能的目标,这两个极端对于目前的低档嵌入式系统软件开发都是不可取的。

 

为低档嵌入式系统开发合适的中间件,包括专用嵌入式GUI,并在需要时使用低档嵌入式系统适合的轻量级操作系统,例如μCOS—Ⅱ等专用嵌入式操作系统,这样既不会消耗大量资源,又可以充分发挥增强型MCU性能,还可以将现代软件开发的某些重要思想,例如分层设计体系结构等引入低档嵌入式软件开发,有效地达到提高代码质量、简化软件开发和增强软件功能的目标。

 

TBsoft-GUI就是这一思想的产物,它是一种专用于8位、16位和低档32位系统的嵌入式GUI,可以在一片增强型8051单片机上运行,不用扩展ROMRAM,不仅能支持单色LCD和键盘,还能支持TFT LCD和触摸屏,能实现和Windows相似的窗口和控件,支持事件驱动程序设计。

 

为此,笔者准备写一个系列文章,介绍在低档嵌入式系统中如何使用TBsoft-GUI实现图形用户界面,有效提升低档嵌入式系统用户界面的友好程度和操作方便性。

 

让你的8051告别LED和数码管,实现和ARM一样的液晶图形用户界面。

 

低档系统,高档化;硬件不足,软件补。

 

TBsoft-GUI V1.00 8051评估版(功能相对专业版稍有限制),使用Keil C51 V7.06A作为编译器,可用于MCS-51系列单片机和单色LCD,支持键盘设备,支持使用小汉字库,允许用户程序外挂LCD和键盘驱动程序。

 

下载地址:http://www.qian-tbsoft.com/download/TBGUI_100_8051_Eval.rar

 

投 票

觉得本文不错,投一票   

评 论


验证码: 看不清?换一张