研究总是让人痛苦并快乐着,痛苦是因为研究的东西都是自己不熟悉的未知领域,一开始往往方向是不明确的,思路是不清晰的,就像破案一样,首先需要我们从蛛丝马迹中收集到尽可能多的资料,然后根据收集到的资料进行分类归纳总结并寻找下一步方向。快乐是因为研究有了一定成果之后,你总会感觉很有成就感。对于"STM32系统中应用的动态加载可行性研究过程"这个课题,今天终于有一些新的进展和更明确的方向了。在阐述我的研究成果之前,我先补充说明一下我这里的标题:我在这里研究的课题并不是一定要在STM32平台上才能实现,而是一个嵌入式平台的通用原理和机制,只是根据你选择的实现方式不同可能涉及到对硬件平台的资源的考虑。比如之前我抛出的问题,如果要实现系统支持JavaScript的程序运行,那么系统中必须要有JavaScript引擎(简称JS引擎),JS引擎有Google开发的成熟的V8 JS引擎,但是V8的代码量很大,据说有8M多,那么如果想在STM32没有外扩SRAM和FLASH的情况下,可能只有128KB SRAM和只有1MB内置ROM,那么是完全无法将V8移植到系统中的,也就无法实现对JavaScript的支持。所以考虑到这点,我的研究方向再次转到了对Pebble方案的研究上,因为Pebble使用的正式STM32平台,其资源也是有限的,而听到很多人说Pebble支持C应用、JAVA应用和JavaScript应用的安装,安装的方式是从手机端的Pebble Mobile应用传送到Pebble watch(传送方式是蓝牙无线传输)。
一开始听到别人(“别人”指的是领导包括老板,他们说你看Pebble都可以支持应用的安装,且可以使用流行的简单的设计语言JAVA和JavaScript语言进行应用的开发,那么我们是不是也可以实现,快研究一下Pebble是怎么实现的!!!)说这样的结论我感到很是惊讶,根据基本原理且Pebble使用的STM32平台是根本不可能支持JAVA和JavaScript应用的,只可能是支持C应用,这个也要在系统中实现动态加载和链接器之后。那么领导说的这个信息应该也不是无中生有,应该是我们对Pebble的应用安装实现的理解哪里有误。很自然会让我想到再次去研究Pebble。
Pebble是一个支持开放的平台,它开放的是SDK,但不是source,所以Pebble提供一个Pebble SDK,目前Pebble最新的SDK版本是2.0版本,我下载了Pebble的SDK(https://developer.getpebble.com/),Pebble的SDK是用来支持第三方开发者在其上面自行开发Pebble的应用, 开发者制作的应用通过Pebble的Pebble Mobile app才能传到Pebble watch。Pebble的应用开发可以在Linux系统、OS X系统或者Windows系统,但是需要搭建一些的环境配置,所以Pebble也提供了一个方便的在线开发平台CloudPebble,但是感觉方便的平台在我这里并没有得到“方便”,我可以打开在线平台的首页https://cloudpebble.net/却无法进入工作环境,不管我怎么点击“GET START”都是无反应的,我换了N个浏览器重新打开也是无法使用,包括Chrome、Firefox等,无奈我暂时放弃了尝试,我回到了Pebble开发指导的网页查看本地环境搭建的指导,看看还是比较复杂的,有点动摇了我对这一尝试的进行(往往很多程序员都有这中情况的时候,特别是当一个不太确定,而要用来做分析判断的方向或者方法比较麻烦的时候,总是纠结是否尝试,如果眼前有比较简单的方案或者其它方向,一定会考虑先尝试简单的,看能不能得到有用的信息)。我也不例外,我突然想到既然我下载了Pebble的SDK,看到Pebble的SDK说明中提到里头有Sample code,那么是否可以从Sample code中发现点什么呢?幸运的是当我看了多个sample demo code之后我发现我基本猜到了Pebble的应用安装的实现形式。
从Pebble的Sample Demo Code中我们可以看到其必须使用的一种语言就是C语言,也就是说一个Pebble应用中必须带有由C实现的一部分代码,然后结合其更多的功能你还可以用到JAVA和JavaScript,正好在前几天研究了一下JavaScript脚本语言的编程实现,因此我对JavaScript脚本语言实现的程序并没有感到“害怕”,我打开了其中一个对天气预报进行信息提示的Sample Demo Code,里面有C代码,有JavaScript代码,有图片资源,C代码中使用的API是Pebble SDK提供的API,我想这些API正是在Pebble watch系统中集成了的。而JavaScript代码实现的大致功能是通过JavaScript语句或者网络端的天气预报数据,然后通过Pebble SDK提供的Pebble.sendAppMessage接口将数据信息发送出去,看到这里不免让我想到一种实现的可能性,那就是:这个Sample Demo Code的C部分编程之后的代码将会通过Pebble Moblie App传到Pebble Watch,而JavaScript脚本语言部分还是通过Pebble Mobile App在移动终端如iphone手机上运行,获取的数据通过蓝牙无线传给Pebble Watch然后配合Pebble watch端的C代码显示天气预报的相关信息。正如这样的实现形式,可以解释为什么Pebble的应用可以支持Java和JavaScript而Pebble Watch又可以是用STM32平台的有限资源来实现,其实Pebble应用中的Java和JavaScript代码并没有在Peblle Watch中运行,而是在移动终端中运行,然后结合蓝牙无线的传输功能在运行时刻配合Pebble Watch端的C代码来实现。
研究到这里好像松了一口气,因为终于明确了实现方向,但是好像任务更加艰巨了,因为逃不过对嵌入式动态加载和链接器原理和机制的研究,这个又将是一个坎坷的路程。