引言
近年来嵌入式领域得到了迅猛发展,嵌入式系统已经无处不在,嵌入式系统的开发也变得越来越复杂,软硬件的复杂度都大幅度增加。而市场对于嵌入式系统的开发周期要求也越来越高,这对于嵌入式开发工具提出了新的挑战。
1嵌入式开发工具面临的挑战
嵌入式开发过程相对PC应用程序开发而言,具有其特殊的复杂性,涉及更多的硬件以及操作系统底层的知识,缺乏统一的软硬件平台,系统建模、工程管理和项目管理的工具也非常缺乏。随着32位嵌入式处理器的应用越来越广泛,市场对于嵌入式系统的性能要求不断提高。当前嵌入式系统的复杂程度已不是过去8位单片机系统所能比拟的了,这对项目的开发、测试、管理都提出了新的要求,过去的嵌入式开发工具已经越来越无法适应新的需求。总体上讲,当前的嵌入式开发对工具提出了以下新需求:
(1) 如何从4/8/16位处理器过渡到32位处理器?
中国很多嵌入式工程师都具有8位处理器的开发经验,多数高校毕业生在学校也是接受8位处理器的培训。目前,8位处理器在微控制器领域仍具有重要的地位,但是2008年32位微控制器的全球出货量第一次超过了8位。引起这一市场变化的原因有两个:其一是市场需要性能更高、功能更复杂的产品,8位处理器在功能上已经无法满足要求;其二是32位RISC微处理器价格已经非常便宜了,例如ST公司基于CortexM3的STM32处理器[1],最便宜的仅仅1美元。
32位处理器与8位处理器在体系结构上还是有着很大区别的,如何让熟悉8位处理器的工程师迅速熟悉并能进行32位处理器的开发非常重要。这就需要为那些熟悉8位处理器开发的工程师提供一种界面、接口他们都熟悉的32位处理器开发工具。ARM公司推出的RealView MDK[2]是一个典型范例: MDK的IDE采用了中国工程师非常熟悉的μVision(Keil),内部则使用了ARM公司的专业编译工具RVCT,这样熟悉8位处理器的工程师可以非常平滑地过渡到32位处理器开发中。
(2) 如何加快开发周期?
嵌入式系统现在越来越复杂,硬件复杂性和软件复杂性大大增加。由于很多硬件已经高度集成,这导致在目前的嵌入式系统开发中,软件开发占80%以上的工作量。因此现在某些嵌入式软件开发已经逐步达到中型软件项目的程度,而随着软件规模的增大,软件按时交付率将会下降。但是市场对嵌入式系统开发周期要求却越来越短。
嵌入式开发中软件和硬件的依赖性非常高,软件开发和硬件开发需要协同进行。如果能减少两者之间的依赖性,尤其是软件开发对硬件开发的依赖,那么将可以大大加快开发周期。
(3) 各类工具之间如何配合?
嵌入式开发过程中会使用到各种工具,包括IDE环境、编译工具、软硬件调试工具、操作系统等。根据项目的需求,往往会选择来自不同厂商的工具进行组合。如果能非常方便地将这些不同厂商的工具无缝地配合起来,则可以大大减少不必要的工作,这对于开发人员而言很重要。
(4) 如何调试复杂的系统?
嵌入式系统越来越复杂,很多嵌入式系统都开始使用各种操作系统,并使用多核结构。但是传统的JTAG调试方法能力非常有限,尤其是当目标设备实时运行的时候,开发人员通常只能使用串口打印输出的方法来做调试。当需要分析内存错误、多任务之间关系、异常或中断处理、睡眠模式等情况时,目前的调试方法基本无效,系统实时运行时基本是黑箱运行。这就需要更加强大的调试工具和手段来为开发复杂的嵌入式应用提供支持。
(5) 如何提高编译性能?
新的商业应用嵌入式系统中,多处理器系统和各种多核处理器已经成为趋势,这些新的硬件架构会带来非常可观的效益。但是这种多核和多处理器的结构给编译系统提出了非常高的要求。例如一个ARM+DSP的系统,如何将工作合理地分配给ARM处理器和DSP处理器,这非常重要。优秀的编译工具,应该能使它们能实现“1+1>2”。
(6) 如何实现图形化开发?
图形化开发在计算机软硬件开发中已不是新问题了。图形化的开发方法能大大减少开发工作量和复杂程度。
2基于Eclipse平台的开发工具
2001年11月 IBM将新一代开发工具项目Eclipse开源,并建立了Eclipse社区。Eclipse是替代IBM Visual Age for Java的下一代IDE开发环境[3],但其目标不仅是成为专门开发Java程序的IDE环境,而是用户可以根据Eclipse的体系结构,通过开发插件,扩展到任何语言的开发,甚至成为图片绘制的工具。
Eclipse最有魅力的地方就是其插件体系结构[4]。Eclipse平台类似PC机的主板,插件类似于PC机的扩展卡。由于Eclipse这种开发的积木式体系结构,使其发展得非常迅猛。很多行业软件提供商,例如IBM、Intel、Sybase、Borland、BEA、WindRiver等公司都成为了Eclipse会员;Eclipse下载量已经超过3 000万人次,遍布120个国家;50个著名IT企业已经提供了超过600个各种插件,有了C、Java、COBOL、Perl、Python、XML等语言开发插件,还有建模、数据库、GUI等开发插件,甚至图形编辑的插件;在J2EE开发方面,Eclipse更是以90%的速度增长。
嵌入式系统开发往往需要多种工具配合,如果采用Eclipse平台,各种工具都以插件的方式出现,则开发人员非常容易定制自己的开发工具集。从编辑、建模、编译、仿真、调试、测试工具到操作系统定制、版本管理、项目管理工具都可以无缝集成,构建成一个界面风格完全统一的开发工具集合。
目前,嵌入式工具提供商已经开始提供大量的嵌入式开发Eclipse插件 。例如,ARM公司的RVDS 3.2模块就有很大部分是Eclipse插件;MIPS公司的开发环境Sourcery G++基于GNU工具链和Eclipse IDE;WindRiver公司的WindRiver Workbench 2.0则完全基于Eclipse平台[6],该IDE同时支持VxWorks、Linux和其他专用操作系统;很多芯片厂商例如ADI、TI、Xilinx等公司都开始提供各种针对自已芯片的Eclipse插件工具;著名的CPLD/FPGA开发工具商Altera推出的Nios II IDE也是基于Eclipse平台的;而Nokia也推出了称为Nokia Widget的Eclipse插件,用于开发Nokia手机上的应用程序。另外,国内嵌入式工具公司Embest也推出了完全基于Eclipse的ADI处理器开发工具BDT。总之,在整个嵌入式系统开发的领域中,从硬件FPGA的设计工具到软件的编译工具、应用层开发工具已经都有了相应的Eclipse插件,而且这一趋势正在迅猛扩展。预计,在未来的2~3年内中国的嵌入式开发工程师也将开始普遍使用基于Eclipse平台的开发工具,定制适合自身的开发工具,进行更加复杂的嵌入式系统开发。
3CoreSight调试体系结构
2004年ARM公司推出了一种新的调试体系结构CoreSight[7],以获得更为强大的调试能力。CoreSight体系结构支持多核系统的调试,能对全系统进行高带宽的实时跟踪,包括对系统总线的跟踪与监视。CoreSight体系结构非常灵活,其中各个部件可以根据处理器厂商的需要进行组合。图1是一个典型的CoreSight调试结构,其组成部分很多,主要分为4类。
(1) 控制访问部件
用于配置和控制跟踪数据流的产生、获取跟踪数据流,但不产生也不处理跟踪数据流,典型的有:
① DAP(Debug Access Port),可以实时访问AMBA总线上的系统内存、外设寄存器,以及所有调试配置寄存器,而无需挂起系统;
② ECT(Embedded Cross Trigger),包含CTI(Cross Trigger Interface)和CTM(Cross Trigger Matrix),为ETM(Embedded Trace Macrocell)提供一个接口,用于将一个处理器的调试事件传递到另一个处理器。
(2) 源部件
用于产生向ATB(AMBA Trace Bus)发送的跟踪数据,典型的有:
① HTM (AHB Trace Macrocell),用于获取AHB总线跟踪信息,包括总线的层次、存储结构、时序、数据流和控制流等;
② ETM(Embedded Trace Macrocell),用于获取处理器核的跟踪信息;
③ ITM(Instrumentation Trace Macrocell),是一个由软件驱动跟踪源,其输出的跟踪信息可以由软件设置,包括Printf类型的调试信息、操作系统以及应用程序的事件信息等。
(3) 连接部件
用于实现跟踪数据的连接、触发和传输,典型的有:
① ATB 1∶1 bridge,具有2个ATB接口,用于传递跟踪源发出的控制信号;
② Replicator,可以让来自同一跟踪源的数据同时写到2个不同的汇集点去;
③ Trace Funnel,用于将多个跟踪数据流组合起来,在ATB总线上传输。
(4) 汇集点
是芯片上跟踪数据的终点,典型的有:
① TPIU (Trace Port Interface Unit),将片内各种跟踪源获取的信息按照TPIU帧的格式进行组装,然后通过Trace Port传送到片外;
② ETB(Embedded Trace Buffer),一个32位的RAM,作为片内跟踪信息缓冲区;
③ SWO(Serial Wire Output),类似TPIU,但仅输出ITM单元的跟踪信息,只需要一个引脚来实现。
对于带有CoreSight调试体系结构的处理器,工程师可以实现实时调试,当应用程序在处理器上全速运行时,可以透明地观察并记录处理器中的各种事件,包括内存单元读写、中断异常的发生与处理、操作系统任务之间的触发关系与运行过程等等。这一新的调试体系结构将嵌入式系统调试从黑盒变成了白盒,使工程师有能力应付更复杂系统的设计与调试。
使用Trace Port接口进行调试还需要专用的跟踪器(Tracer)。如图2所示,ARM公司的开发工具RVDS中RVT(RealView Tracer)就是这种跟踪器,其价格较为昂贵,因此RVDS更适合SoC的设计和开发。如图3所示,为了提供廉价的实时调试工具,ARM公司在其针对MCU的开发工具RealView MDK中,增加了图1中的SWO接口完成实时跟踪的功能[2];使用仿真器ULINK 2的JTAG接口中的2根引脚作为SWO接口,可以对CortexM3处理器实时调试分析,能从ITM单元中实时获取内存单元读写信息、Printf打印信息、操作系统任务信息等。
4软件仿真技术
通过软件仿真的方式来进行嵌入式系统的设计一直是嵌入式开发工具的重点发展方向。软件仿真可以加快软件开发进度,使得软件工程师对硬件工程师的依赖减弱,同时还减少了对硬件损伤的机会。另外给学习者提供了廉价的学习方法,降低了学习门槛。目前,软件仿真技术在嵌入式的各个层面都取得了长足的发展。
(1) CPLD/FPGA设计的仿真
CPLD/FPGA的设计是嵌入式系统硬件设计的重要部分,而且随着SoC系统设计的增长,EDA在硬件设计中所占的比例将越来越大,也越来越复杂。目前的商用EDA设计软件已普遍具有功能强大的逻辑仿真工具,能进行完备的电路功能仿真和时序逻辑仿真,对时序和关键路径延时分析已经非常精确。
例如,Altera公司的设计工具Quartus II就具备以下强大的仿真及验证工具:TimeQuest时序分析器、PowerPlay功耗分析器、芯片规划器、SignalTap II嵌入式逻辑分析器、RTL查看器/技术映射查看器,还能对第三方验证工具提供支持。
(2) 单元模块设计的仿真
单元模块的驱动设计是嵌入式系统软件设计的最底层,是嵌入式系统软硬件结合处。过去的嵌入式开发工具所具备的仿真功能都只是局限于对处理器内和指令集的仿真。而近年来出现的一些仿真工具,已经大大扩大了仿真范围,能仿真各种处理器片上单元模块,支持各种外部输入信号的仿真,并可以根据仿真的结果对应用程序进行性能分析,帮助程序员优化软件设计。
例如ARM公司的RealView MDK,充分发挥了Keil公司μVision的模块仿真优势,支持外部信号仿真、快速指令集仿真、中断仿真、片上外设(ADC、DAC、EBI、Timers、UART、CAN、I2C等)仿真等功能,并可将仿真结果以图形化的方式呈现出来,例如逻辑分析仪、通信终端等。
(3) 操作系统设计的仿真
操作系统在嵌入式系统软件中占有重要地位,操作系统之上的应用层软件设计往往与PC机上的应用软件设计区别不大。嵌入式系统的操作系统通常需要根据处理器以及硬件来进行定制。目前,嵌入式操作系统的移植工作都需要在对硬件细节充分了解的情况下才能进行,这使研发工作常常会陷入具体硬件细节中不能自拔,硬件不稳定的情况,所花费的时间更是无法预计。
如果能建立一个嵌入式操作系统仿真平台,使嵌入式操作系统的设计和移植工作不用过于考虑底层硬件的细节,只需要知道处理器的体系结构即可开始工作,这将大大加快嵌入式操作系统设计移植和应用层软件开发的进度,也可以为初学者提供一个良好的平台。在x86结构的PC机上,已经出现了一些商业的操作系统仿真软件,例如VmWare和virtualPC等,能完全仿真一个真实的PC,用户可以在其上安装各种操作系统。目前,在嵌入式领域还没有出现商业的操作系统仿真平台,但已经出现了一些嵌入式操作系统仿真平台的自由软件。
例如,清华大学陈渝博士于2002年底开始组建的开源项目SkyEye[8],已经可以模拟基于ARM内核的CPU,包括ARM7TDMI、ARM720T、ARM9TDMI、ARM9xx、ARM10xx、StrongARM、XScale等,并扩展了一些处理器的内存控制和各种I/O控制器,μClinux、μC/OSII等多种嵌入式操作系统和各种系统软件(如TCP/IP、图形子系统、文件子系统等)可以在该平台上进行仿真运行,并能对它们进行源码级的分析和测试。SkyEye项目组,近期已经开始了加入MIPS处理器内核的工作。
5图形化设计方法
图形化开发在嵌入式领域已经越来越多,从硬件设计到软件编程的各个环节都已经有了非常多的优秀工具。例如RealView MDK的启动代码生成器[2],通过图形对话框可以非常容易地生成上百行的汇编代码,大大提高了效率,尤其是对于新手而言。但是这些图形化设计工具都是针对嵌入式系统设计的某个环节而言的。
将整个嵌入式系统的设计图形化是未来嵌入式系统设计的另一个新趋势。加州大学伯克利分校的Edward Lee提出,现在嵌入式系统的开发手段——如基于文本编程和面向对象的工具——都难以用来构建嵌入式实时系统,因为面向对象很难直观地表达时间和并行性,而时间和并行性在现在的嵌入式系统中是必不可少的。Edward Lee因此提出了面向角色的图形化方法[910],它能够更好地表达整个系统,减少与特定硬件以及操作系统的相关性,这使更多的软件设计和算法易于理解并被重复使用,更适合嵌入式系统设计。
结语
综上所述,可以预计在未来2~3年内,Eclipse将成为嵌入式工具的通用平台,多种嵌入式工具将在其上无缝结合,用户可以定制自己的开发工具、管理工具;CoreSight调试体系结构带来的实时调试分析手段,将成为开发更复杂嵌入式系统的技术保障;软件仿真技术和图形化开发方法目前尽管还只是在部分层面和部分环节上有效,但是它们已经开始改变嵌入式设计的过程,而这一趋势终将带来嵌入式系统设计方法及过程的重大变革。