非常精辟,欣赏这种说法。
事实上,os也不是非要MMU。MMU一般是对于linux这类大型通用os才需要。但说实在的,别说uclinux这种不需要mmu的裁剪linux已经不再更新,当然也有人把它移植到普通stm32f103上。
但是这里有个必要性的问题。
对于资源紧缺的stm32这类单片机,当然你别跟我说M4 M7这种即将跨范围的变态神器。
就一般几十K ram的小片子,你搞个linux干嘛?
为了使用它的usb驱动?还是pci总线,要么是 网卡驱动?
使用linux基本上,要么为了大量驱动,要么为了一些高级的程序库或者工具,如qt之类的。
问题是,你在stm32上面搞个usb我还能接受,搞个pci 搞个网卡?还是在tft上跑个qt?
至于么?
有这闲心,不如搞个arm9,11实在不行arm7也行啊,何必在这里折腾 cortex m?
所以,在单片机上跑linux,其实是个很蛋疼的事情。
然后说回其他的小os,这里主要指那几个最主流的RTOS.如 x-cos 或者 freertos之类的
这个其实还是比较靠谱的。开销不算太大。
M0的片子跑起来都不累。
但是有多少人跑这些OS为的是得到一个 真正的多线程编程环境?
而根本不在意其他的,有几个人真正大胆的使用 heap 自动分配函数?
而说了半天的实时性,他奶奶的,它动不动给我delay个几十ms,还实时性个鸡蛋。
所以说,其实大多数人玩这个,就为了一个 多线程。
于是又回到多线程这个问题。
其实多线程和多任务是两码事,当然很多人可能不太在意这种区别。
比如说如果你只是想要多任务,而不需要考虑存储空间的独立使用,你大可不必上ucos freertos, 随随便便上protothread(即 Contiki里首创的pt thread)多好?
反正人家除了不能使用独立堆栈以外,抢占,多任务轮转洋洋精通。
最后说说python啥的,其实python我没玩多少,lua我相对熟悉点。
但从资料来看,这两者其实挺像的。
其实他们本身都是 脚本语言,说白了,就是跟 缩水版的 cmd shell之类的差不多。
至于后来它们具体应用了,多了很多东西那是另一码事。
比如说,elua,这货加了很多其他的私货,多到我都突然看不懂不知道从何下手移植。
至于它提供的多任务,它资料里都说明了,那不是真正意义上的多线程,说白了估计就是个类似pt的多任务。
然后,python也好,lua也好,它们不管是独立运行,还是嵌入其他语言,基本都是通过一个 解释器 和 其他语言组合使用。
在某种意义上来说,其实这种解释器有时候看起来很像一个OS。
至于它到底需不需要配合另一个OS来用,怎么用,这其实都是没意义的问题。
就好像你在linux上跑shell,你不跑行不行啊?基本不行。因为是shell提供了和系统直接交互的通道。
但是在单片机上事情不太一样。
因为我们习惯了直接操作底层,所以,只要给我一个C编译器,直接上就行。
对于RTOS也是,是不是一定要让RTOS掌握MCU的分配权,还是仍然被你抓在MAIN函数里,在需要的时候你才加载OS然后卸载掉,这都看你想怎么玩,想象力丰富不丰富,对相应的组件了解深入不深入。
回应最后层主那句话:
python解释器本身就够大了,既然如前面所说,它加上其他第三方库很多时候就可以满足我们对一个系统的需求
多任务啊,动态内存分配啊,那你干嘛还要没事上一个RTOS啊?
如果你觉得这样麻烦,你直接上RTOS啊,干嘛要上py?