RTOS姊妹花——Small RTOS与STOS++简介
2013-01-08 21:09
141 查看
转自:http://blog.sina.com.cn/s/blog_7faddd2d0100uu37.html
本文是本人(陈眀计)很久以前撰写的,当前源码可在http://www.zlgmcu.com/philips/philips-embedsys.asp下载。因为种种原因,这两个操作系统均不再更新,读者可以自行修改和升级。
1 简介
在详细说明之前,我们先看图1、图2这两幅图。从两幅图中可以看出,图1是Small RTOS的一个例子的运行界面,而图1的最下方的“045.3%”为CPU的占有率。图2是STOS++的一个例子的运行界面,图2的最下方的“044.5%”也是CPU的占有率。这两幅图很相似,事实上这两个例子的代码也很相似只是图1所示的例子是用c语言编写,其基于的操作系统为Small RTOS V1.51,而图2所示的例子是用c++语言编写,其基于的操作系统为STOS++ V1.51。而Small RTOS使用标准c编写,而STOS++用c++编写,他们的代码也是极其相似的。
图1 Small RTOS 范例运行界面
大家仔细看一下两者的CPU占有率:基于Small RTOS是45.3%,而基于STOS++是44.5% !很意外吧,用c++语言编写的程序的执行效率居然更高!事实上,这个结果对于笔者来说也很意外,笔者本以为STOS++的效率会稍微低一点。笔者可以保证其应用程序对执行效率的影响很小(可以参考源代码),而两个RTOS的代码相似,又都是使用ADS1.2,编译参数也没有区别,唯一的解释是编译器对c++的this指针优化得很好。当然,换一个编译器其效果可能不一样。
至于占用存储的的比较,从编译结果来看,STOS++的代码会大一点,但则没有普遍意义:作例子的程序并没有发挥c++的优势。而STOS++的ram占用小一点,但这已没有意义:C++的对象会占用一些堆空间,在实际运行时其占用的空间可能不比Small RTOS小。
图2 STOS++ 范例运行界面
Small RTOS v1.50在32位CPU上可以说支持无限的任务(仅受内存限制),任务优先级暂定为32级,任务切换基于优先级,同级任务基于轮询。同时,任务之间可以直接放送消息和回馈消息。而等待事件支持可以选择基于FIFO或基于优先级。
STOS++是Small RTOS对应版本的孪生姐妹。Small RTOS是用标准C语言实现的,而STOS++是用标准C++语言实现的。当然,STOS++也使用了少量的汇编语言(移植代码)。为了支持中断处理,一部分代码实际上是C语言代码。虽然STOS++使用C++编写而Small RTOS使用C编写,但两者的算法一致。事实上,STOS++是在同版本的Small RTOS编写完成后用C++改写的。因此她们的代码很相似,其功能也相似,性能也相近。与Small RTOS v1.50.0一样,STOS++支持无限的任务(仅受内存限制),任务优先级暂定为32级,任务切换基于优先级,同级任务基于轮询。同时,任务之间可以直接放送消息和回馈消息。而等待事件支持可以选择基于FIFO或基于优先级。
这个版本的Small RTOS和STOS++是不完善版本,很多事件如消息邮箱等还没有支持但事件公共部分代码已完成,其它事件代码如以添加。debug也还没有支持,目前仅支持ARM7。
2 特点
2.1 共同特点
l公开源代码
对于当前版本,只要遵循许可协议,任何人可以免费获得源代码。
l支持任务数“无限制”。
Small RTOS实际最大支持(2^32 – 1)个任务,一般的32位机只2^32字节存储空间,不可能有足够的存储空间让这么多任务运行。事实上,目前即使64位机也不需要这么多任务同时运行。而STOS++的支持的任务数仅受内存限制。
l任务支持优先级,暂定支持32个优先级。
l不同优先级的任务之间完全基于优先级调度。
高优先级的任务在运行则低优先级的任务不能得到运行。事实上,如果所有任务的优先级均不同,则可认为她们是完全基于优先级的。
l同优先级的任务之间基于时间片轮询调度。
同优先级的任务之间基于时间片调度。目前分配给同一优先级的任务的时间片相同,但不同优先级可以由不同大小的时间片。
l任务之间可以直接发送消息。
不需要事件的支持,任务间可以直接发送消息,而收到消息的任务也可返回一个消息给发送者。一个任务同一个时刻只可以给一个任务发一个消息。如果接收消息的任务还没有把消息收走,又发消息则自身被挂起直至消息被收走。发给同一个任务的消息以FIFO或LIFO方式接收。
l事件(信号量、消息队列等)可基于FIFO方式调度也可基于优先级方式调度。
目前仅支持信号量和消息队列,但事件底层公共代码已完成,添加事件支持很容易。
lmain()函数就是优先级最低的任务。
l可固化
她们为嵌入式系统设计,如果您有固化手段,它可以嵌入到您的产品中成为产品的一部分。
l中断管理
中断可以使正在执行的任务挂起。如果优先级更高的任务被中断唤醒,则高优先级的任务在中断嵌套全部退出后立即执行。中断嵌套层数可达255层。
lRAM需求小
代码考虑了小RAM的应用,在RTOS中对RAM的需求是比较少的。
2.2 Small RTOS独特特点
l基于标准C语言编写。
l可移植
作者尽量使用把与CPU相关部分压缩到最小,与CPU无关部分用ANSI C编写。
2.3 STOS++独特特点
l基于标准C++编写,使用更方便。
每个任务(优先级最低的除外)都是一个对象,都有共同的祖先OS_TASK。通过OS_TASK的方法访问RTOS。
l与CPU管部分代码与同版本的Small RTOS相同。
这样,如果CPU既支持C又支持C++,只需移植一次,Small RTOS和RTOS++均可使用。
2.4 未来的版本
未来的版本除了增加事件支持外,最主要的是增加调试支持。
本文是本人(陈眀计)很久以前撰写的,当前源码可在http://www.zlgmcu.com/philips/philips-embedsys.asp下载。因为种种原因,这两个操作系统均不再更新,读者可以自行修改和升级。
1 简介
在详细说明之前,我们先看图1、图2这两幅图。从两幅图中可以看出,图1是Small RTOS的一个例子的运行界面,而图1的最下方的“045.3%”为CPU的占有率。图2是STOS++的一个例子的运行界面,图2的最下方的“044.5%”也是CPU的占有率。这两幅图很相似,事实上这两个例子的代码也很相似只是图1所示的例子是用c语言编写,其基于的操作系统为Small RTOS V1.51,而图2所示的例子是用c++语言编写,其基于的操作系统为STOS++ V1.51。而Small RTOS使用标准c编写,而STOS++用c++编写,他们的代码也是极其相似的。
图1 Small RTOS 范例运行界面
大家仔细看一下两者的CPU占有率:基于Small RTOS是45.3%,而基于STOS++是44.5% !很意外吧,用c++语言编写的程序的执行效率居然更高!事实上,这个结果对于笔者来说也很意外,笔者本以为STOS++的效率会稍微低一点。笔者可以保证其应用程序对执行效率的影响很小(可以参考源代码),而两个RTOS的代码相似,又都是使用ADS1.2,编译参数也没有区别,唯一的解释是编译器对c++的this指针优化得很好。当然,换一个编译器其效果可能不一样。
至于占用存储的的比较,从编译结果来看,STOS++的代码会大一点,但则没有普遍意义:作例子的程序并没有发挥c++的优势。而STOS++的ram占用小一点,但这已没有意义:C++的对象会占用一些堆空间,在实际运行时其占用的空间可能不比Small RTOS小。
图2 STOS++ 范例运行界面
Small RTOS v1.50在32位CPU上可以说支持无限的任务(仅受内存限制),任务优先级暂定为32级,任务切换基于优先级,同级任务基于轮询。同时,任务之间可以直接放送消息和回馈消息。而等待事件支持可以选择基于FIFO或基于优先级。
STOS++是Small RTOS对应版本的孪生姐妹。Small RTOS是用标准C语言实现的,而STOS++是用标准C++语言实现的。当然,STOS++也使用了少量的汇编语言(移植代码)。为了支持中断处理,一部分代码实际上是C语言代码。虽然STOS++使用C++编写而Small RTOS使用C编写,但两者的算法一致。事实上,STOS++是在同版本的Small RTOS编写完成后用C++改写的。因此她们的代码很相似,其功能也相似,性能也相近。与Small RTOS v1.50.0一样,STOS++支持无限的任务(仅受内存限制),任务优先级暂定为32级,任务切换基于优先级,同级任务基于轮询。同时,任务之间可以直接放送消息和回馈消息。而等待事件支持可以选择基于FIFO或基于优先级。
这个版本的Small RTOS和STOS++是不完善版本,很多事件如消息邮箱等还没有支持但事件公共部分代码已完成,其它事件代码如以添加。debug也还没有支持,目前仅支持ARM7。
2 特点
2.1 共同特点
l公开源代码
对于当前版本,只要遵循许可协议,任何人可以免费获得源代码。
l支持任务数“无限制”。
Small RTOS实际最大支持(2^32 – 1)个任务,一般的32位机只2^32字节存储空间,不可能有足够的存储空间让这么多任务运行。事实上,目前即使64位机也不需要这么多任务同时运行。而STOS++的支持的任务数仅受内存限制。
l任务支持优先级,暂定支持32个优先级。
l不同优先级的任务之间完全基于优先级调度。
高优先级的任务在运行则低优先级的任务不能得到运行。事实上,如果所有任务的优先级均不同,则可认为她们是完全基于优先级的。
l同优先级的任务之间基于时间片轮询调度。
同优先级的任务之间基于时间片调度。目前分配给同一优先级的任务的时间片相同,但不同优先级可以由不同大小的时间片。
l任务之间可以直接发送消息。
不需要事件的支持,任务间可以直接发送消息,而收到消息的任务也可返回一个消息给发送者。一个任务同一个时刻只可以给一个任务发一个消息。如果接收消息的任务还没有把消息收走,又发消息则自身被挂起直至消息被收走。发给同一个任务的消息以FIFO或LIFO方式接收。
l事件(信号量、消息队列等)可基于FIFO方式调度也可基于优先级方式调度。
目前仅支持信号量和消息队列,但事件底层公共代码已完成,添加事件支持很容易。
lmain()函数就是优先级最低的任务。
l可固化
她们为嵌入式系统设计,如果您有固化手段,它可以嵌入到您的产品中成为产品的一部分。
l中断管理
中断可以使正在执行的任务挂起。如果优先级更高的任务被中断唤醒,则高优先级的任务在中断嵌套全部退出后立即执行。中断嵌套层数可达255层。
lRAM需求小
代码考虑了小RAM的应用,在RTOS中对RAM的需求是比较少的。
2.2 Small RTOS独特特点
l基于标准C语言编写。
l可移植
作者尽量使用把与CPU相关部分压缩到最小,与CPU无关部分用ANSI C编写。
2.3 STOS++独特特点
l基于标准C++编写,使用更方便。
每个任务(优先级最低的除外)都是一个对象,都有共同的祖先OS_TASK。通过OS_TASK的方法访问RTOS。
l与CPU管部分代码与同版本的Small RTOS相同。
这样,如果CPU既支持C又支持C++,只需移植一次,Small RTOS和RTOS++均可使用。
2.4 未来的版本
未来的版本除了增加事件支持外,最主要的是增加调试支持。
相关文章推荐
- 微型嵌入式操作系统SmallRTOS简介
- small rtos自己使用的心得(2)
- c51上跑smallrtos 之4x4 矩阵键盘任务
- c51上跑smallrtos 之lcd1602任务
- 实验1:small rtos51-------led控制
- RTX:RTX实时操作系统(RTOS)简介学习笔记
- silverlight超小游戏开发包SmallGameLib(一)—— 技术简介
- c51上跑smallrtos 之ds1302 存取日期
- small rtos1.20.3的一点小问题
- [TIRTOS--Introduction]TI RTOS简介与初步了解
- [Small RTOS] __ 0.资料分享
- Boosting 简介--A (small) introduction to Boosting
- Rtems简介—挑战VxWorks的RTOS
- 网络负载平衡转发技术简介(转载)
- 中断服务程序简介(转载)
- JavaSE基础小结--2---Java框架简介
- LINUX帐号管理命令简介
- pthread相关简介
- MySQLdb 使用简介
- Windows Azure 网站上的 WebSocket 简介