编程指导

前面已经介绍了盒子的编程步骤,这里介绍的是一些相关盒子编程的知识。

程序框架

盒子使用javascript作为编程脚本语言,因为盒子底层资源限制,主要实现一些基本语法,一些标准对象并没有加入进来,而String,Array对象则只提供了几个常用接口。因为这里js只有一个线程,没有多任务的概念,而我们的应用逻辑往往是包含多个任务的,所以我们使用消息机制来组织代码。即在一个大循环中不断获取消息,一收到消息就进行处理。

while(true)
{
    var m = Event.get();
    process(m);
}

当然,底层操作系统还是多线程的,只是把各线程中各类消息打包发到js线程来。

字节流

在物联网编程中,字节流是一种常用的数据格式,不管是盒子和仪表通讯,还是盒子和服务器通讯,一般都会用到。但js脚本并没提供字节流的对像,所以这里增加了个自定义数据类型——字节流(Bytes)。字节流对象除了存取操作以外,还提供了一些复制、截取以及转换等操作。

内存与文件

盒子底层初始化了44k的动态内存,除了操作系统和驱动使用的约8k内存外,js还有约36k的动态内容可以使用。

盒子有一个简易的文件系统,里面有32个文件,每个文件最大为2K字节,文件名固定为"1"到"32"。

硬件信息

每个盒子都有一个序列号,该序号是全产品唯一的,可作为识别ID,可以通过Box.sn()获得。另外,Box库可以获取固件版本、型号、IMSI、ccid等信息。

算法库

用js写算法效率比较低,所以盒子提供了一些常用算法的库函数。目前提供了crc16、md5等算法,其他库函数在不断增加中。