MCU上的脚本语言,以及智能硬件的未来


在过去的一年里我比较关注MCU上的Scripting项目。

目前成熟度最高的应该是micropython,是kickstart上的著名项目;另外有两个知名的项目是在mcu上实现了Javascript VM,一个是原生的JSVM,编译和运行Javascript Bytecode,另一个是先编译成Bytecode,然后用Lua脚本执行;Lua可能是最适合嵌入C的脚本语言,也是MCU上最容易实现的;最后是我最近才接触到的Tcl,是曾经广泛使用但目前比较没落的一种嵌入式(指的是嵌入到大型程序框架中,不是指硬件的嵌入式系统)脚本语言,Tcl有个很紧凑的实现,项目名称叫Jim,在硬件工具领域用的比较多。

选择哪种语言更多的是考虑市场情况和开发者口味,而不是脚本语言技术本身的优劣;充分优化的脚本引擎都可以达到很低的内存需求;可能从语言设计本身而言Lua有一些优势,但是整体考虑程序员的数量分布,python会是更为可行的选择,js VM对内存的需求相对较高,虽然最流行。

但是我一直问自己的问题是:在MCU上使用脚本的目的是什么?有脚本就够了吗?如果只是象众多的项目示例代码中,能拉高一个GPIO,跑个LED驱动程序,C的欠缺又在哪里呢?还有,更为重要的是,Scripting MCU的市场机会在哪里呢?

这篇长微博尝试回答这些问题。

如果仅仅是有一个脚本引擎,但是开发者没有其他的好处,这个脚本引擎的意义不大;脚本引擎对于MCU而言,它的高级语言特性、易于书写和调试,相对C语言而言,至少对长年在MCU领域耕耘的工程师来说,优势趋近于0。

脚本语言的优势可以体现在另外两个地方:

  1. 它让一个设备可以Reprogrammable,远比C更为容易,或者说,更容易部署;

脚本程序本身是一个文本,在环境中运行,如果引擎够健壮,脚本程序不会Crash整个系统,你可以有远程出错报警的能力,可以有错误处理机制和fallback机制,甚至可以远程调试;这些对C而言是实现相对困难甚至是不可能的;

2. 脚本的另一个优势是它对环境依赖性很低;

可能跨MCU构架和指令集的执行并不是很多设备厂商需要的能力,但是能剥离对底层MCU硬件型号和固件版本的依赖性,是巨大的收益;这是任何设备厂商,只要它希望持续向市场提供产品,都会需要的能力;而且在C上,这实现起来困难得多;

以上陈述的是脚本相对于C开发的优势,优势不在开发上,在部署和持续交付的兼容性上;

然后,仅仅有脚本是不够的;脚本环境需要提供一些类似OS的高级工具,让高级语言真正有高级感受;

编程方面一般会需要的有:

上海优质密码锁批发大家推选,智能密码锁充分利用了51系统单片机软、硬件资源,引入了智能化分析功能,提高了系统的可靠性和安全性。通过在某型号保险柜安装使用,受到用户的欢迎。另外,智能密码锁在软、硬件方面稍加改动,便可构成智能化的分布式监控网络,实现某一范围内的集中式监控管理,在、保险、军事重地及其它安全防范领域具有广泛的应用前景

  1. 基础数据结构,list之类,一般脚本语言都有;
    2. 事件驱动框架,伪线程,或者coroutine,一般都能做到;
    3. 持久性存储或文件i/o,不算复杂;
    4. 小型数据库,例如sqlite,但比较消耗内存;

除了这些基础工具之外,在设备和连接性方面,仅仅支持GPIO,PWM,I2C,SPI等等驱动,那和C语言开发比优势并不显著;

在面向互联网的应用中,在脚本环境中能直接提供TCP/IP berkeley socket i/o,是非常重要的;这使得应用的开发大大简化,开发者可以专注在应用逻辑上而不是捉襟见肘的系统资源和稳定性上。

MCU上的LwIP是一个选择但可能不是好选择;市场上已经开始有很多带TCP/IP协议栈的WiFi模块(例如TI的CC3x00)和Modem模块(一些GPRS模块价格已经杀入5美金),虽然通常有连接数的限制,但强壮性和易开发方面好太多。

这样看起来的开发环境相对丰满了,有连接性,有可部署性和持续兼容能力;剩下的问题是它的市场在哪儿。

***

网络计算的数学本质,不是Centralized,因为随着节点数量的线性增长,连接性(带宽和延迟)永远不如计算节点的总算力发展的快;网络计算的合理架构必然是并发的、分布式的、和局域性的(Locality),算法的局域性等同于算法的性能。

我说一些例子,比如CS结构也好BS结构也好,B/C端虽然计算很轻,但是它对性能是至关重要的,如果把所有B/C都扔到S一端,S的算力根本承受不住,B/C的反应会很迟钝;另一个例子,我们的大脑,神经处理单元是在很底层的神经网络里处理掉绝大多数信号然后把高级事件路由给大脑的,就像你触碰到火焰先缩手再反应过来一样,如果是相反的计算构架,手可能保不住了。

理解了这个问题之后,你会明白为什么现在的几种可穿戴设备可以流行,例如一些手环,还有Pebble手表,还有谷歌和苹果的智能手表为什么要变得FAT,而坚持LEAN AND THIN的一些媒体播放器、数码相框失去生存空间;

再推广开来,你会发现现在很多智能家居的设计是荒谬的,大家都傻逼一样的去抢所谓的网关路由器,仿佛它是总司令一样,如果这个逻辑真的能成立,那么我们今天就应该没有谷歌苹果,只有中移动傲视天下。

事实不是如此,未来也不会如此。

未来是所有的智能硬件,都是满足可二次部署应用的要求,可接入互联网,局部计算而不是受控,包括,你的手表,手环,饮水机,冰箱,监控摄像头,灯具,床头音箱等等等等,你都可以下载一个app或者script进去。

他们中一部分昂贵和高能的硬件,可以跑一个高大上的os,例如Android Wear,但是另外的大多数计算界的屌丝设备,将是Scriptable / VM over Bare Metal的。

是有一个司令部在网上,类似美国总统和美国公民的关系,非常虚幻和稀薄的联系着。

> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >

但是为了不使电机出现震动和噪音,本设计在单片机资源允许的前提下使速度阶跃尽可能的小。具体的做法是:单片机上电工作后首先对速度进行比较,以200转/分为基准,如果速度小于200转/分则完全可以直接启动,不需要加速曲线;当速度高于200转/分时,首先把速度差求出来,让定时器首先以200转/分的速度产生脉冲,在定时器中断函数中根据速度差把速速逐渐提高,直到速度差为零。具体的流程图如图8。

生成海报
点赞 0

Abin

我还没有学会写个人说明!

相关推荐

ra8873 ST7789区别

看了一上午,终于明白了这2个芯片的本质区别,RA8873的输出LCD的接口是标准的RGB接口,所以这个芯片一般都是在LCD外边的,而ST7789是直接可以驱动LCD的原始接口&#xff0c

STM32的串口中断详解

目录 中断配置 中断服务函数 1. 中断服务函数名称查找 2. 中断服务函数  ​3. 可以选择的串口中断类型  extern u8 USART_RX_BUF[USART_REC_LEN] extern u16 USART_RX_

BMP280详解

前言 本文着重介绍bmp280(GY-BM E/P 280模块)的原理、功能、使用方法、不同公司的型号以及提供适用于不同单片机的代码 一、bmp280大气压传感器外观 二、原理图 三、相关参数讲解 1.引脚 六个引脚,名称