编程指导
前面已经介绍了盒子的编程步骤,这里介绍的是一些相关盒子编程的知识。
程序框架
盒子使用javascript作为编程脚本语言,因为盒子底层资源限制,主要实现一些基本语法,一些标准对象并没有加入进来,而String,Array对象则只提供了几个常用接口。因为这里js只有一个线程,没有多任务的概念,而我们的应用逻辑往往是包含多个任务的,所以我们使用消息机制来组织代码。即在一个大循环中不断获取消息,一收到消息就进行处理。
while(true)
{
var m = Event.get();
process(m);
}
当然,底层操作系统还是多线程的,只是把各线程中各类消息打包发到js线程来。
字节流
在物联网编程中,字节流是一种常用的数据格式,不管是盒子和仪表通讯,还是盒子和服务器通讯,一般都会用到。但js脚本并没提供字节流的对像,所以这里增加了个自定义数据类型——字节流(Bytes)。字节流对象除了存取操作以外,还提供了一些复制、截取以及转换等操作。
内存与文件
盒子底层初始化了44k的动态内存,除了操作系统和驱动使用的约8k内存外,js还有约36k的动态内容可以使用,增强版配了比较大的内存,有100k左右可以用,具体的详见各产品说明。
盒子有一个简易的文件系统,里面有32个文件,每个文件最大为2K字节,文件名固定为"1"到"32"。
增强版配有额外16M的FAT文件系统。
硬件信息
每个盒子都有一个序列号,该序号是全产品唯一的,可作为识别ID,可以通过
Box.sn()
获得。另外,Box库可以获取固件版本、型号、IMSI、ccid等信息。
算法库
用js写算法效率比较低,所以盒子提供了一些常用算法的库函数。目前提供了crc16、md5、sha、sm4等算法,其他库函数在不断增加中。