||
电路设计漫谈之 76:新一代语言及嵌入式系统
似乎是天经地义的,一谈到嵌入式系统的开发,总是想到C/C++甚至汇编等语言。这些语言的实时性,可移植性(除了汇编),以及普及性,给了人们一个印象似乎嵌入式系统的语言除此之外别无其它。本人也是这么认为直到有一天玩了一个开源系统Beagle Bone。
Beagle bone是TI支持的在其ARM Cortex A8基础上推出的一个开源硬件项目。随机带Angstrom 系统但也可以加载为Ubuntu/Debian等主流桌面Linux 系统。最为新奇的是一般在Server或者网络编程中才出现的高级语言Python,JavaScript等,也可以用在嵌入式的系统中去了!JavaScript 原来是在客户端用来做Browser的一种语言,但Ryan Dahl创造了Node.JS把JavaScript应用到了Server端!据说在2009年JavaScript开发者大会上,Ryan Dahl 第一次发布Node.js后全场起立长久掌声。
多少年来以C为主的嵌入式开发,需要经过资深培训的软件工程师才能驾驭。嵌入式工程师既要懂C之类的软件,又要对硬件的机理有较深的认识,即使不懂硬件设计的话。这也造成了嵌入式工程师抢手价高的状况。
Node.js/JavaScripe在嵌入式系统上的实现可能会打破这种格局。本人初次在Beagle Bone尝试JavaScript,花了半天把Angstrom改为了Ubuntu 12.04. 又用了半天左右安装了Node.js和I/O Library。研究了几个JavaScript的例子后,前后总共不到两天时间就可以编写了实现以下几个功能的程序:检测按键开关按下之后,给自己发送email 通知,并点亮一个LED等。别小看这个程序,它基本上实现了家庭安全或者智能家居的基本功能!也就是热翻天的物联网之类的应用。这种语言更接近于实际的自然英文,编写以上程序并不只是照葫芦画瓢,每一个语句的意义很容易一目了然。
如果你去咨询资深的软件工程师或者专家,可否用Python和JavaScript做嵌入式的应用,大多会得到否定的答复。一般会以为这类语言是解释性的速度慢,二是不支持实时性的应用。但Node.js的出现不一样了,它所具有的Non-blocking I/O和异步事件支持,可以完美的满足实时控制的要求。比如其call back功能,当触发条件没出现时可以继续执行后边的程序,一旦触发条件出现就可以call back所需要的function,从而不会使得程序block在等待触发条件的状态。至于高级语言的效率在CPU动辄上GHz和32位的今天,更不应该是问题。早年嵌入式CPU几十MHz,16位甚至8位的系统,确实需要编译代码更为优化的C语言。现如今,高计算能力的ARM成本下降到完全可以支持更抽象更面向应用的语言。即使实时性非常苛刻的应用,也可以用C或者汇编来写少部分的执行机构,而Python/JavaScript实现数据处理和网络等高级应用。
至少不要非C不专业的想法,开阔一下思路,在可能的场合使用更高级的语言,把有限的时间放在开发产品的功能和应用上。尤其是在互联网应用是嵌入式一个重要部分的今天 ,Python/JavaScripe等更具有天然优势。时代变了,监控系统跟互联网结合是大趋势,这样开发的环境和语言也应该相应的改变。现在SDK厂家都提供了强有力的高级语言I/O库的支持,把设计者从硬件以及嵌入式的底层解放了出来,使得嵌入式软件设计不再是那些资深软件工程师的专利!