嵌入式开发工具
1. 脚本语言
在嵌入式应用中,程序员常常会忽视脚本语言。一般情况下,它们无法达到C语言的速度并且它们的运行时框架很大。对于具有强大处理能力、大容量内存及硬盘的PC来说,这些问题都不会造成影响。但在嵌入式环境中,上述问题却将有可能产生制约。尽管该环境中的处理能力和存储器容量仍在不断增长,尤其是低成本32位MCU也开始出现。
对大部分脚本系统来说,基本代码的规模是一个典型问题,因为该类系统通常被赋予丰富的特性。在某些情况下,可以将系统简化为其最小的组件集,这样,开发者就只需为他们所需要的特性承担空间成本。这与开发者如何在C语言应用中去除实时操作系统和运行时间库的状况类似。此外,由于一般在运行时处理繁重任务,因此最终生成的应用程序通常较小。
脚本语言具有许多优势,例如,更灵活的类型系统和更好的文本处理功能,这些都将使某些应用获益。用它快速编写简单应用的代码也很容易,并且可能比C语言代码更易移植。由于某些语言支持运行时编译,代码也往往更具动态特性。这不仅便于调试,而且还有助于设备实现更大的灵活性或更易定制化。
此外,脚本语言易于获取且能得到很好的支持。Perl、PHP、Python、Ruby、TCL和Javascript被用于从网络服务到服务器管理等一系列应用中。当然,对嵌入式应用来说,基于Web的解决方案会导致一些有趣的折衷。
例如,许多嵌入式网络设备可实现一个Web服务器并生成HTML页面,可利用一个运行在高处理性能PC上的Web浏览器来浏览这些页面。如果该PC可用来处理通常由嵌入式设备负责的事务,那么会出现哪些情况呢?
2. AJAX技术
这可以通过多种途径来解决。一种正日益通用的方法是采用AJAX(异步JavaScript和XML)技术。在这种情况下,一台嵌入式设备将通过其Web服务器提供信息和可能的Javascript代码。这些代码运行在PC上,然后该PC与采用XML格式消息的嵌入式设备进行交互,以取代让嵌入式设备生成完整HTML页面的方法。
该方法不仅更具动态性,而且由于是采用PC而非嵌入式设备(通常嵌入式设备的处理能力较低)来处理用户间的交互,因此也显著提高了响应性能。与不采用该方法时类似,数据源是嵌入式设备,但Javascript程序可来自任何地方:服务器、网关或PC本身都有可能。对负载进行分配和简化嵌入式设备是个有趣的过程。无需修改嵌入式设备就可以构造一个全新的用户接口。
考虑是选择脚本语言还是选择AJAX是重要的一步。幸运地是,许多脚本系统是以开放源码的形式提供,从而可方便地实施评估。而诸如Javascript这样的语言,在类似Web浏览器和服务器等应用中已经成为标准语言。
那些更大胆的开发者也许会考虑采用非主流语言(例如Lisp的变种Scheme语言)。许多Scheme平台(例如Per Bothner公司的Kawa Scheme)可生成Java字节码,从而使它们成为可与Java应用共存的脚本系统。
嵌入式编程语言的最新动向
Cremains是目前最流行的嵌入式编程语言,并且数年来一直独占鳌头。尽管如此,程序员的工具包还应该更丰富一些,尤其是在处理诸如最新和改进的互联网以及异构和多核系统的时候。工具包内的选项可能是脚本语言、并行编程及图形编程。
脚本语言源于PC和服务器,但它们同样可应用于嵌入式系统。对具有处理脚本系统所需存储能力的32位系统来说尤其如此。
此外,脚本语言通常比C语言更具灵活性,这使其可以更加容易地用于一个应用的各个部分。而像Perl、PHP、 Python和Javascript这样的脚本语言通常可作为C语言的补充,并且它们常常互相影响,所以对两类语言都有所了解是有好处的。
而且,脚本语言已经被用于大型企业应用的服务器端。这些应用常常被分散在多个服务器中完成,但每个部分往往都相对独立,因此,可将它们随意地分散到各个服务器中。
为充分利用不断增长的处理器核数量,需要程序员在编写并行算法时发挥更大的作用,以便各个核能相互协作。目前的编程语言可采用类似消息传递接口(MPI)这样的框架,但使用该方法需要占用大量设计时间。该方法可以升级,虽然有时并不是必需的,但当系统设计做得不好的时候,程序员大多希望升级该方法。这也是人们对并行编程语言的兴趣日益增长的原因之一。
带MPI的高级单线程语言(例如C语言)和并行编程理论之间的主要区别是,并行编程理论通常假设存在隐式并行执行。在工具包中增加这类语言有些为时过早,但跟踪并关注它们何时真正起作用是值得的。
诸如美国国家仪器(NI)的LabVIEW、MatLab的Simulink以及对象管理组织(Object Management Group)的UML(统一建模语言)等图形编程语言和环境往往会针对新手和专家开发不同的设计。新手可从降低了复杂性的封装中受益,而专家则获得一种以任何人都能明白的方式表述复杂算法的途径。任何使用过IAR Systems的visualState的人都了解,与内嵌的C代码相比,采用图形化状态图做开发是多么容易。
这些面向基于文本的程序员的图形编程环境已取得稳步进展。程序开发者也许仍然会更偏爱文本编程方法或图形编程方法,但将两者严格划分(all-or-nothing)的方法似乎已过时了。
UML和C语言不再泾渭分明
许多UML 2.0产品已经能够针对Ada、C、C++和Java等语言从UML(统一建模语言)模型中生成代码。尽管这样,通常还是希望C语言开发者能学会UML。虽然以前的代码可以继续使用,但开发者应该将学习UML作为新的目标。
在Telelogic的最新版(V7)Rhapsody中,对C语言的最新支持通过允许C语言开发者在建模的同时保留文件和目录层次(开发者已将文件和目录层次与Eclipse IDE(集成开发环境)等工具一道使用)而实现了突破。
这不仅是对现有资源文件的利用,而且可利用这些文件的关联关系来展示并构建图形模型。Rhapsody的反向工程特性可扫描源文件并生成这些C语言类型的模型,从而使得启动模型几乎不费什么力气。
更重要的是,Rhapsody具有可在Eclipse CDT(C/C++开发工具)和UML模型之间来回变换的能力。变换朝两个方向进行,这使得设计师可以完成高层次的UML设计并在代码中反映该变换。同样,随着UML中的功能逐渐可用,添加到C源代码中的新功能也将显示出来。只需点几下鼠标就可在C源代码和与之匹配的UML定义之间反复变换。
当然,如果并没有采用合适的代码管理工具,变换可能会让程序员和管理者晕头转向。这就是新的图形差异化特性十分重要的原因。它以图形化方式凸显了UML模型中的变化。
V7版Rhapsody中的另一项新功能是对Mathworks的Simulink R2006b的支持。它在UML和Simulink的代码之间提供了相似的链接,从而允许将等式和Simulink建模代码整合到Rhapsody中。该整合可提供协同执行的能力。
并行编程语言的挑战
并行编程语言仍处于研究开发阶段。Sun的Fortress解决了大量应用和编程问题,但它基于有大量内核且内核间通讯良好或内核间共享存储器的系统。线程与基本代码模块同步。
并行编程语言面临许多挑战,包括技术问题以及针对社会问题的优化。对于大多数编程人员来说,转换编程语言是件很不寻常的事情,而学习一种新的编程语言一般需要投入大量的时间和精力。
并行编程语言没有沿用传统串行编程语义,因此默认值是执行并行操作,而不是串行操作。编译器和运行时间环境必须对并行操作进行优化,使编程人员免于处理这些零碎工作。还必须明确定义串行操作,因为这时串行操作属于例外而不是常规操作。
作者:William Wong, 嵌入式/系统/软件编辑, 《Electronic Design》
文章评论(0条评论)
登录后参与讨论