【RealtekRTL8722DM物联网开发套件】Arduino的编程范式 1) 非常感谢面包板社区给予我这个评测的机会!感谢 REALTEK公司!收到这个 Ameba RTL8722DM MINI ,小巧可爱,真的非常喜欢。 阿米巴原虫--这个名字,寄托着厂家希望其具备强大变形能力和生存能力的愿望,型号是 乘法口诀 3721 变形为 8722,本文以下都简称其为 “阿米巴87” 首先第一个问题:Ameba RTL8722DM MINI 板子 和 Arduino是什么关系? 答案: 1)板子硬件不是 Arduino. 最主要的原因是:Arduino 是基于AVR单片机开发的。而 阿米巴87 基于ARM核。 这个故事讲起来稍微有点长:不是荷兰光刻机 ASML,名字有些相像,是1984年成立的 美国 ATMEL 公司,在1997年ATMEL的A先生与V先生共同研发了RISC的8位单片机,简称AVR。后来又扩展到16位,32位。有低档Tiny,中档AT90,高档ATmega三大系列,在单片机世界大杀特杀。 2005年,意呆利一所院校的师生用 AVR设计了一款控制主板,意大利语“Arduino”是“强大”的意思,还有说,这是1000年前意大利国王的名字。反正式意呆利语准没错。由于Arduino充分利用了AVR芯片的能力,设计思想超前,功能强大,成本还便宜,最重要的是 Arduino的创造者们决定硬件和软件同时开源,人们生产Arduino的仿制品不用支付任何费用,甚至不用取得Arduino团队的许可。设计硬件设计图和软件程序代码,第一次变成了公共品,吸引了很多人加入,甚至连Intel这样的大公司也跟风发布Arduino产品。 不幸的是,据说在2008年左右,Atmel发生了一次全球级的超级大断货,正好这时候STM32崛起了。然后呢,大家做新设计时就基本不考虑AVR了。而ATMEL也在2016年被微芯科技(Microchip )收购了,这是后话。 ST 意法半导体 (ST Microelectronics) 是由意呆利的公司和法国的公司合并成立,所以叫意法。意法擅长分立器件、手机相机模块和车用集成电路,是世界第一大专用模拟芯片和电源转换芯片制造商。因为有后发优势,它基于超低功耗的 ARM核,踩准步调,恰到好处地推出了 STM8,STM32等单片机系列芯片,基本型、增强型、USB型、互补型,价格简直是令人发指!尤其在中国大陆,stm32实在是太流行了,特别是增强型STM32F103系列,以致于很多人觉得世界只有一种单片机,就叫 STM32 。STM32崛起以后,基本也没有AVR什么事情了。虽然 ATMEL后续也推出了基于ARM核的单片机,性价比并不比STM32差,但已经于事无补了。只有在特别特别低端的场景,才有一些怀旧的人继续用AVR,其中就包括Arduino。 因为 Arduino实在是已经到达便宜的最下限了,切换到STM32的收益不足呀。况且STM32芯片的管脚不兼容,ARM指令系统也不同; 费劲巴力的改硬件,改软件,图什么呀?因此 Arduino官方版本也一直遵循传统,使用曾经式主流但现在已经不是主流的 AVR芯片。 答案:2) 阿米巴87 可以基于 Arduino IDE进行开发 Arduino 电路板的设计编程语言是有一个学生开发的,据说仅用了两天。早期 Arduino核心库使用C语言编写,后来采用C与C++混合编写而成,即AVR-Libc(基于GCC的AVR支持库)。Arduino对这个核心库进行了二次封装,提供了各种语言的调用API。Arduino IDE是一个开发环境,用类似Java、C语言等在IDE中编写程序代码,支持将程序上传到Arduino电路板去执行 阿米巴87 虽然不是Arduino,但是可以利用这套机制,来进行代码开发。类似借用高速公路做跑道起降喷气式战机,算是一种借道而行,生物学里算是拟态。 上面啰嗦了半天,下面进入正题吧(关于单片机相爱相杀的历史,或许很多意思还没有写完,如果大家点赞超过20,我就写续篇) 2) Arduino IDE Arduino IDE 需要配合Arduino硬件:Arduino IDE用来编写程序并编译成二进制文件,通过USB连接线烧录进Arduino硬件单板。然后Arduino就要可以根据这些程序控制指令,知道自己该干什么了:驱动单板的各种传感器,Wi-Fi接口,蓝牙接口,进行各种操作和控制等等。 我刚开始看到 Arduino 的开发界面,有一种类似真气逆行的感觉: 1) main() 函数在哪里? 2) setup(), loop()什么鬼? 3) 我脑子里那个伟大的设计,用这样一个区区的 loop(),能表达出来吗? -------------------------------------------------------------------- 通过查找和研究各种资料,我终于明白了:Arduino 的这种编程方式,是另外一种编程范式。所以一个学生才可能在 3天之内完成Arduino的设计语言。如果基于冯诺依曼的串行计算机从头开始,是绝对不可能在3天之内完成的。 1)为了说明这个范式,我们先从 PLC (可编程逻辑控制器 Programmable Logic Controller) 说起: PLC出现在1969年,比IBM PC还要古早。而且人家一开始就叫PC (可编程控制器 Programmable Controller),后来PC风头太盛,为了和这个著名的老弟在名字上做个区别,只好在自己名字里加了一个L,表示自己能力稍差,仅在继电器层面进行逻辑颗编程控制。PLC还发明了著名的梯形图编程语言,在工业控制领域鼎鼎大名。 PLC专门为在工业环境下应用而设计,它结构上可以分为:模拟/数字输入单元、输入存储器、处理单元、输出存储器、模拟/数字输出单元。 执行过程非常简洁:(1)输入单元取样到输入存储器(2)处理单元执行用户设定程序,处理输入存储器的数据,并输出到输出存储器;(3)输出存储器输出刷新到输出单元。(4)反复循环步骤1,2,3,直到永远。就这。没错,你没有看错,就这。 心急的同学可能已经看出来了:setup()过程和loop()过程的对应关系。所谓loop()就是上述步骤2。而这个反复调度死循环,隐藏在Arduino的核心库里。 这是一种完全不同的运行方式。当然是针对特定场合的一种范式。无论如何,它工作得很好。 现在PLC颗是一门大产业,世界上有PLC厂商200多家,各种型号产品几千种。可分成三个流派:美国(AB,GE公司)、欧洲(西门子,TE)、日本(三菱,欧姆龙);还有韩国、台湾等弱势厂商;国产更是可以忽略不计。2019 年全球 PLC 市场规模已达95亿美元左右。2020 年我国 PLC 市场规模为 130亿元左右。说大不大,说小不小,确是工业4.0的关键一环。 2)如果大家理解了PLC的运行范式,我们再说一下 processing语言。从PLC硬件跳到一门语言。跨度虽大,但是却遵循着相同的范式:这个知乎连接,比较全面了 https://zhuanlan.zhihu.com/p/20225132 Processing 是专为艺术性+科学性而设计,使用对象是艺术家。是数学+计算机图形学+可视化编程的融合。在网站http://www.processing.org 上有很多processing范例,真是美轮美奂,令人难以置信。笔者看得入了迷,差点耽误了本次测评。Processing在Java语言的基础上简化语法,适应媒体艺术设计师的低代码水平。还有专门的社区和书籍 ,中译本名为《processing编程学习指南》,机械工业出版社。如果大家有兴趣,可以继续研究。我们这里只讲它的设计范式:看这里:processing的demo框架: 相同的 setup(); 这里的 draw()就是Arduino的 loop()。 大家看出什么门道了吗? 这里我再啰嗦一句:processing语言的执行逻辑,和 PLC的执行,用数学术语来说,属于“同构”。即:遵循同一个范式。 3)基于processing ,有很多的变种,比如:writing (大家别着急,马上就到Arduino了) 关于 Wiring 的资料比较少,大家可以参考这个链接: https://codingdict.com/os/software/89935 它建立在 Processing 基础上,是用 Java语言开发的,遵循 GPLv2,是一款开源电子开发平台,包括软件(Wiring IDE)和硬件(微控制器)。Wiring允许编写跨平台软件来控制连接在微控制器上的设备。学生,艺术家,设计师,研究人员和爱好者学习,原型设计和生产。 4)到Arduino了,Arduino是建立在 Writing 基础上的,为了Arduino 做了一些调整,所以,一个学生,可以在3天之内完成。 这就是范式的巨大威力。