【概述】在SensorTile的开发过程中,面对众多的开发工具和开发环境,很容易使人进入选择困局,到底哪个工具更适合,更容易,更可靠呢。在面对众多代码的文档的分析过程中,自然就会产生一个问题,就是是否可以使用操作系统。围绕SensorTile的核心L476YG,讨论ARM-M4内核的开发过程。
1、ARM内核
在目前广泛应用的嵌入式芯片中,ARM是被广泛应用和熟知的。在不同的系列中分为A,R,M系列。其中的R系列是一种安全芯片,在汽车,工业中用得多。因此更多的是A系列和M系列。A系列以树莓派为代表的中坚是A8系列,其共同特征就是支持Linux系统,因此在这个级别上,使用python,node.js,java编程显得更容易。而对应于M系列,就不是那么容易选择了,由于可用资源的限制,linux系统并不能在M系列中应用,而更多的嵌入式操作系统出现在了开发者的面前,当然,也有ucLinux这样的Linux-like操作系统,从严格的意义上,因为最重要的虚拟内存管理没有应用,所以即使可以扩展SD flash,也是不能够支持的。
在选择开发方式的情况下,就需要了解ARM内核的架构architecture,这个架构中,可以发现独有的计算体系结构,还有arm指令集以及特有的性能,如trustZone技术等。虽然我们在开发的过程中,往往不需要涉及这样的架构和汇编代码,但是如果要读各种开源工具的源码时,总会发现有一小段汇编代码嵌入其中,因此还是需要了解的。
2、可选的嵌入式操作系统
2.1 操作系统一类,因此,其种类是超乎想象的丰富,理解也是非常的困难。同样可知,这样的操作系统具有不同的定向功能和面向的开发者。这里以Arduino开发板为例,所有的Arduino开发板都使用类似的语法和IDE工具,那么支持这一切的就是在开发板出厂前刷写的一个firmware,直接提供一个中间层次以识别和筛选IDE所提供的源代码,不过,其结果也是生成了一个hex文件,需要写入内存。
2.2 被称为RTOS的实时操作系统如FreeRTOS和MQX,还有基于无线的Contiki等,其实都不具备单独运行的能力,都是作为一种中间件出现,为更简便的编程提供了一款简洁高效的接口。但是,这样不同的操作系统给了开发者巨大的学习难度和技术迁移成本。
2.3 需要重点指出的是mbed项目,虽然大家都很熟悉的是基于web的网页开发界面,但是,mbed还有一个可以下载到本地的CLI界面,可以用命令行来实现编译编程的任务(应该是基于yotta项目)。
这个项目有一个核心,其实是mbedOS,这个项目的本质是一种定制的操作系统,就是为了近百个厂家的不同的arm芯片可以共享开发资源,降低开发者的学习困境。不过,我们可以从大家使用mbed开发SensorTile的过程中发现,这个学习的过程虽然可行,但是仍然是非常痛苦的。
因为即使同时L476芯片,nucleo是L476RG,在SensorTile上是L476YG,两种不同的封装,使得直接专注于开发是不可能的,必须核对两种芯片的引脚是否兼容,以及在硬件定义中portG是否都完整,正确地定义。
另外,还有一个潜在的风险,就是mbed本身也在不断地升级进步,可惜所有的进步非常低调,以致于我们都不知道。如上所述的MBED OS的命令行工具软件,现在已经没有很快捷的方法可以直接找到和下载的。另外mbed Cloud也是一个让人期待的项目,可惜同样在无限期的等待中,无法被大多人所接触。
我们可以说mbed OS是开源的,因为很多源码是在git上可以获得的,但是更准确的是mbed是部分开源的,其内核部分和路径图大家都是不知道的。我们可以理解软银入主的ARM具有更大的一统河山的愿景,不过,在现阶段我们遇到的是更多的困惑。
2.4 到目前为止,主观认为最优的嵌入式操作系统是Intel旗下的windriver操作系统,从设计理念和执行效率来看,都得到了其他版本操作系统的借鉴和认可。不过,需要注意的是这个应该是唯一的逆潮流的嵌入式操作系统,风河是闭源的。
对于这个问题,很容易使人想起来微软的一句名言:“Linux就是一个Cancer”。不过,大家一定要记住,正是拜MicroSoft巨大的阴影投放能力之赐,才促使一个16岁的孩子率先放弃了所有通过软件谋利的机会,点燃了开源操作系统的火花,并让更多优秀的程序员响应这个号召,用实际行动支持这个行动,试图螳臂当车,以蚂蚁雄兵的力量成为当下一种不可忽视的力量。 从长远来看,不能让优秀的程序员通过努力赢得成比例的回报,开源是非常难以持续的。幸好Linus发明了不亚于Linux的许可协议,从制度上保证了Linux的开发,有很多人可以有所收获。
在感谢Linux的巨大贡献时,我们需要反思,是否开源就真的是不可阻挡的潮流,是否有必要在一定程度上闭源。
我们可以通过观察谷歌旗下的Android项目如何逐步封闭起来,以及FreeRTOS如何推出了很多收费的FreeRTOS分支上获得答案。
2.5 其实现在的平静之下,更多的嵌入式操作系统正在涌现,而且当下流行的操作系统也在不停地进行快速迭代升级。以Zephyr最为典型,新出的2.0版本几乎是革命性的,在性能,实时性上实现了非常好的综合。不过,正如所有的开源系统所能遇到的困难相似,这样的优秀的产品,几乎很难吸引更多的注意。
mbed OS 5.0也直接在5.0中引入了thread线程的定义,最直观的是blink例程中,不再用wait(n)这个函数了。
3. 一枝独秀的microPython
3.1 对于SensorTile,一个非常特别的选择,就是microPython,这个是一种Python-like语言,而不是真的python。可能有人不大同意这个观点,但是从开发者的设计思路和实际的代码编写过程中,都是采用了独特的方法和手段,其中自动补足的RETL功能应该是借鉴了Linux的这个深受喜爱的功能的。在grammer.h和compile.c中,严谨地表述了独有的编译手段,这个要是还用标准编译的手段,一定超过SoC的RAM承受能力。编程技巧是非常高的。
3.2 对于MicroPython是一个非常优秀的开放平台,尽可能地减少了开发者对于硬件知识的依赖,能够快速上手,快速开发。这里面,其实就是一个完整的包括UI,编译器的操作系统。
Python之普及,更大程度上是因为其背后的巨大的可以引用的库和函数,甚至很多人工智能AI开发平台,以及繁复的区块链技术都可以在python上轻松支持。不过,可以想象,在资源受限的条件下,引用这些庞大的库及工具是不可能的,因此,最大的优势没有之后,就剩下易读易写的特点了,当然这个特点也很好,但是要看开发的应用程序是否值得付出的那么多内存。
3.3 引入microPython是F4xxx原生的,在同样是ARM-M4内核的L476上,非常值得一试。而且,也可以启发大家再次基础上提出并实现更好的创意。
4 并不能使用的Debian和OpenWRT
4.1 Linux家族谱系图巨大,而且每个都有有趣的故事。不过,最看好的应该是Debian,这个名字是用一对**朋友的名字组合起来的,而版本命名又是一个动画片中人物的名字,如weezy,jessy等,其他更流行的都是Linux-Debian-xxx的衍生产品,而且内核随着Debian升级也需要不断升级。大家最熟悉的应该是基于树莓派的Raspbian,以及火热的Ubuntu。Debian8.7单是影像文件就要1.8G,估计L476吃不了的。
4.2 OpenWRT是一个略微有些混乱的Linux成员,不过,他是乱了敌人,清楚了自己,只需要数十M就可以跑起来,OpenWRT是基于厂家支持的,版本升级非常慢。这个好处是,非常稳定的性能。而且,和其他的linux build不同的是没有提供任何源码,而是一堆严格组织的script文件,从网络上获得不同源码,然后在本地逐个拼起来的。非常轻型,对于Debian,绝对是嵌入式的首选。不过,初步分析SensorTile的资源,应该是差一点点跑步起来,因为要2M Ram,L476最大1M,这样就一票否决。以后是否可以,就要看OpenWRT的发展和L476的后续定位了
5. 被忘掉的Keil,IAR,DS5,CubeMX等
5.1 这些工具,其实是ST主推的开发工具和开发平台,而且也费了很大的资源去维护和开发。对于一直使用ST产品线的开发者来说,是最好的选择。因为,ST提供了绝对可靠的原生库,函数,开发工具,在兼容性和性能上应该是首选,从APP的demo到各种传感器信号的调用都是非常完美。
虽然在此好像被忘掉,但是在这个过程中是最后要推荐在开发过程中的工具。
5.2 同样是大厂,另外一个芯片巨人在产品线和开发工具上有不同的选择。提供了一个巨大而不好用的原厂万能工具,但是,开放了全部资源给第三方工具,使得其产品能用几乎所有市面上可以找到的工具开发,以致于我们都不会玩了。从实际上放弃了原厂IDE的道路。
5.3 但是这样的工具是否就不用操作系统了呢。按照此处的定义,在出厂的时候,L476其实定制了一个bootloader,这段在rom中的代码虽然很小,不过,也可以算是一个极简的引导工具,而不是直接把机器代码写入,上来就用的。具体的实现,在下一步对L476的分析中再详细说。
6 小结
总之,对于SoC来说,bootloader-操作系统或类操作系统中间件-开发者代码,这个过程是所以开发的基本逻辑过程。随后,就在对比Linux的情况下,分析L476的架构和ARM-M4的体系。
说明:因为在短时间内评测了众多的操作系统,内容太丰富,所以,在没有很好的总结也没有更深入的研习的基础上,本内容不是那么令人信服,也表述的不是很准确,希望能在后面的重点拆解中,能更细致地说明,在此只能蜻蜓点水了。
|