首页 > 代码库 > 脚本与嵌入式系统

脚本与嵌入式系统

(原创文章,转载请注明出处)


脚本以前限于行业应用,一直给我低效、低能的印象,但凡事总有个例外,我工作中用到了脚本语言。于是让我思索到底这个脚本在嵌入式系统上,特别是工业系统上,能有多大的作为?到底能走多远。


脚本语言不是什么新鲜的东西,自打有了编译型的语言自然就有了解释型的语言。限于计算机硬件,解释型的语言初期没有编译型的语言强手。后来计算机硬件越来越强了,解释型语言,这种易于学习,编程简单的语言渐渐流行,代表的就是Basic。再后来,横空出世了Java。这种介于解释型和编译型语言之间的语言,代表了一个时期的技术走向。90年代前后诞生了许多有影响力的语言,如网站类的PHP,Ruby等,全能高效的Python;小巧灵动,在游戏界大显身手的Lua。Linux下的 Bash 脚本……太多了。


脚本语言特别像发展时间比较长的,如Python,其配合库众多庞大,已经涉及到各个行业领域。可以轻松的用Python做一个Windows、Linux下的应用程序;也可以用来写浏览器的Web界面,也可以写服务器的CGI甚至服务器本身。这都难不倒Python。类似的还有Ruby,Perl,PHP,在网站后台专业领域,都有独到的地方。


然而在嵌入式里,这些脚本语言好像都失去了踪影。特别是一些可靠性高,实时性好的领域,对脚本语言往往敬而远之。广大的嵌入式从业者,特别是单片机编程程序员们,对这个东西还是比较抗拒的。原因很简单,原生的Python集成到单片机上得接近900KB的代码空间,除此之外,还需要付出大量的内存开销。嵌入式系统,往往内存管理是简陋的,甚至是没有。这对脚本语言这种内存大户来说,实在难以接受。


有很多嵌入式的有志之士,干了很多有意思的尝试,比如说将Lua弄到单片机上。用Lua开发单片机程序。不失为一个有意思的创新。如Python的python-on-a-chip,micropython,这些项目都是非常有价值的探索。脚本和C语言比,到底能为我们带来什么?脚本的出现并不是偶然。程序实际上就是一套施加在一些数据上的一些算法,计算完成后,输出数据而已。没有输出数据的程序是无意义的。 脚本,如Python中的表、元表、字典等数据结构,很简单的几十行代码能构建出用C语言成百上千行才能写出来的复杂数据结构。简单的迭代方式遍历复杂数据结构的办法,也是C语言无法简单的模仿。就连用C++的迭代器,相比也是罗嗦麻烦。精巧的引用回收机制,使得脚本基本不考虑内存的泄漏问题。这些特点,决定了脚本适合复杂的数据处理。天生的不需要编译的特点,也使得在运行时刻也可以方便的改变代码。


嵌入式有几类应用,是非常适合脚本处理的:

1.复杂的数据结构实现,用C/C++写,真心的不好,还是用脚本去实现吧。比如说,uC/OS和FreeRTOS这种跑一个诸如sqlite的数据库,数据库的查询,插入等等,选择脚本是明智的。往往Linux太大,团队实施起来,需要较多的精力,而且,网上东找西找的Linux下的代码,稳定性可靠性难以保证。短时间搞出产品来实在是太难了。要是烂在了现场,更加是悔不当初。这时,小巧的脚本,如Lua就是个非常理想的选择。

2.灵活性的选择,系统规模没有上到Linux这种水平,但在系统里又想保留灵活性,希望能像加载可执行文件一样,迅速的让系统获得新的特性。脚本是这种小系统的不二之选。

3.测试,一般做嵌入式的公司,时间都非常的紧张,没时间做非常细致的白盒测试。在进度和质量的双重压力下,白盒测试往往成了走过场,大家都心照不宣,那就根本不走。导致后来的集成测试中问题扎堆。其实利用脚本语言可以很轻松的构建测试用例,测试代码,进行模块间的测试,和基本的单元测试。时间紧了,就多做些模块间的测试,控制一下测试的粒度。时间宽松了,用脚本可以测得再细些。特别对于嵌入式中需要的复杂数据,可能需要其他系统,诸如PC平台的软件配合。都可以在脚本里轻松的模拟出来。


可能有些朋友担心速度问题,Lua 有 LuaJIT,Python的PyPy,处理器的不断进步。我觉得这都不是问题,问题是你迈出了这步没有?脚本和C,就像当年的 C与ASM。完全替代不是目的,合理的在嵌入式中优化现有的实现框架,才是我们需要的。我坚信,脚本在嵌入式中一定会大放异彩。

(原创文章,转载请注明出处)