【MicroPython】几个嵌入式操作系统介绍

suoma   2016-5-15 22:25 楼主
接前一篇帖子https://bbs.eeworld.com.cn/thread-489571-1-1.html
目前我所知道的嵌入式系统有Raw-os、Ucos、freeRTOS、MQX、trochili
Row-os介绍见论坛https://bbs.eeworld.com.cn/thread-418007-1-1.html
这里要说明Row-os和trochili为国产系统,先比较一下Row-os和ucos的区别,raw os 在中低端cpu 上速度和体积都是精心优化过的,特别是在cortex-m 系列的cpu 上具有很大的优势。
1.JPG
FreeRTOS是一个迷你的实时操作系统内核。作为一个轻量级的操作系统,功能包括:任务管理、时间管理、信号量、消息队列、内存管理、记录功能、软件定时器、协程等,可基本满足较小系统的需要。
由于RTOS需占用一定的系统资源(尤其是RAM资源),只有μC/OS-II、embOS、salvo、FreeRTOS等少数实时操作系统能在小RAM单片机上运行。相对μC/OS-II、embOS等商业操作系统,FreeRTOS操作系统是完全免费的操作系统,具有源码公开、可移植、可裁减、调度策略灵活的特点,可以方便地移植到各种单片机上运行,其最新版本为8.2.3版。不同于μC/OS-II,FreeRTOS对系统任务的数量没有限制,既支持优先级调度算法也支持轮换调度算法,因此FreeRTOS采用双向链表而不是采用查任务就绪表的方法来进行任务调度。
相对于常见的μC/OS—II操作系统,FreeRTOS操作系统既有优点也存在不足。其不足之处,一方面体现在系统的服务功能上,如FreeRTOS只提供了消息队列信号量的实现,无法以后进先出的顺序向消息队列发送消息;另一方面,FreeRTOS只是一个操作系统内核,需外扩第三方的GUI(图形用户界面)、TCP/IP协议栈、FS(文件系统)等才能实现一个较复杂的系统,不像μC/OS-II可以和μC/GUI、μC/FS、μC/TCP-IP等无缝结合。
MQX是freescale公司技术支持的操作系统,MQX 实时操作系统设计用于单一处理器、多处理器和分布式处理器等形式的嵌入式实时系统。        Freescale 半导体公司成功地搭载MQX 操作系统软件平台用于ColdFire 和PowerPC 系列微处        理器。相比于最初发布的MQX 软件,Freescale MQX 软件更易于配置和使用。现在单一发布版本        就包含了MQX 操作系统外加其它所有软件组件来支持特定的微处理器。 MQX 是一个运行时函数库,程序用它来实现实时多任务应用。其主要特征为:大小可裁剪、        面向组件的架构和便于使用。        MQX 支持多处理器应用,并且可用于灵活配置嵌入式输入/输出产品,如网络、数据通讯和        文档管理等。
MQX与linux相比,内核精简、实时性高、效率高,更适于医疗电子、工业控制等领域。与ucos相比,大小接近,但MQX维护团队更强大,提供了众多驱动。
   TROCHILI是一个开源的、高度可移植的R丁OS,采用C语言开发,可移植性非常好,支持多任务、多优先级、抢占式调度。对硬件的要求极低,适用于存储器资源受限的嵌入式单片机系统,典型的配置下((TROCHILI)只占用约2-5Kbytes的RAM以及10-15Kbytes的Flash存储器。TROCHILI是开源的RTOS,适用于APACHE2协议,即可以任意修改和发布,无需任何版权费用。英文名称TROCHILI取善鸣的小鸟之意,意味着体积小巧、动作灵敏。主要特点如下:
支持抢占式调度多任务模型
支持最多有32个任务优先级,多个任务可以拥有同优先级
不同优先级任务采用优先级调度,相同优先级任务问采用时间片调度
支持用户回调定时器和任务定时器。操作系统内置用户定时器守护线程
支持常见IPC机制,semaphore, mailbox, message, mutex, event
充分总结各种机制的共性和特性,基于通用IPC控制结构和操作流程,做了完整简洁的实现紧急消息操作优先普通消息操作
可配置的IPC调度机制,支持FIFO和LIFO两种方式的线程阻塞队列。
大量API支持在ISR中调用
开放源代码。代码规范简洁,注释完备,并提供十分详尽的中文注释
这些系统官网都有对相应cortex-M的支持的安装包



回复评论 (8)

FreeRTOS可以用于MicroPython吗?
点赞  2016-5-16 11:03
然后呢,和micropython有几毛钱关系?
强者为尊,弱者,死无葬身之地
点赞  2016-5-16 12:10
我会告诉你们github上的elua,其实已经和一个操作系统没啥不一样了么
强者为尊,弱者,死无葬身之地
点赞  2016-5-16 12:10
我觉得也是,MicroPython和os之间的关系,就目录来说没有半毛钱关系
os在flash或没有mmu的cpu来说没有太多意义。
我的理解MicroPython  = 裸CPU + FS + Py解释器
加个os可能可能实现pythread,但是。。。。
fs + py解释本身就很大了,加再一个os更是慢。
点赞  2016-5-16 21:57
引用: dcexpert 发表于 2016-5-16 11:03
FreeRTOS可以用于MicroPython吗?

TROCHILI官网有支持M4的安装包,freeRTOS不知道
点赞  2016-5-16 22:31
引用: Onsunsl 发表于 2016-5-16 21:57
我觉得也是,MicroPython和os之间的关系,就目录来说没有半毛钱关系
os在flash或没有mmu的cpu来说没有太多 ...

非常精辟,欣赏这种说法。

事实上,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?
强者为尊,弱者,死无葬身之地
点赞  2016-6-2 12:23
国内哪种操作系统用的多?
点赞  2016-6-3 23:08
要看uOS的话 国产的RT-Thread也不错 多线程 多任务
点赞  2016-8-1 13:49
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复