世俱杯 2025

登录 免费注册 世俱杯 2025 | 行业黑名单 | 帮助
维库电子市场网
技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统
驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe

Show一下我写的RockOS,相同之外,还有一些不同

作者:rockos 栏目:嵌入式系统
Show一下我写的RockOS,相同之外,还有一些不同
RockOS是在ARM上开发的,最初使用的是上海勤旺的ARM学习板,后来得到ITSN社区的资助,获得了一块功能比较完备的44b0学习板。

下面是启动界面:


启动输出很简单:
显示一组版权信息,系统的Tick频率,当前RTC时间,然后就开始测试CPU的基准性能,这个过程需要4秒种的时间。


2楼: >>参与讨论
rockos
Show一下我写的RockOS (二)
RockOS包含一个简单的Shell,在shell上输入help命令可以显示所有可用的命令。命令是由应用代码注册的,为了简化实现,命令没有进行分组,只是根据命令名进行排序:


这个是显示当前任务的命令输出:


RockOS带有经典IPC算法的理发师问题和哲学家问题,在这个例子中,共有5个理发师任务(待理发的客户任务由Shell命令创建),5个哲学家任务。还有就是播放wave格式声音的tWavSound,和用于按键测试的tKeyTest任务。tTick, tShell, tSecPeriod和tIdle是系统任务,除tTick是必须的之外,其它三个系统任务都是可选的(是否可剔除tIdle任务还依赖于系统是否可以实现Halt功能)。

spy命令显示的当前的CPU占用率,这个版本中增加了每秒对所有“消息”的状态防挂死检查,CPU占用率在空转时上升为5%,如果去掉这部分检查,则CPU占用率为2%(实际上是1.7%,非常准确)。


3楼: >>参与讨论
rockos
Show一下我写的RockOS (三)
按照help的命令例表,命令c可以创建一个等待理发的customer任务:

把这个图和上面的图对比一下,可以看出增加了第16号任务customer,同时6号任务barbor0也被激活,由pending态转为delay(转为delay只是为了模拟理发过程)。
理发结束后第16号任务退出,6号任务也回到pend态。这个图是接着上面那个图抓取的:


罗嗦这个例子只是为了表明RockOS完全支持返回式任务和动态的任务创建与删除,这两个功能有不少嵌入式OS不支持(包括知名的uC-OS II)。


4楼: >>参与讨论
rockos
Show一下我写的RockOS (四)
贴一小段代码,这段代码对应RockOS的Shell命令fsm,用来显示系统中状态机的数量或详细信息,后面是这条命令的运行截图:
/******************************************************************************
Function    : int fsmShow(int argc, CHAR * argv[])
Params      : argc - the argument count (including command NAME).
            : argv - the arguments (argv[0] is the command NAME)
            :
            :
Return      : always 0
DESCRIPTION : DISPLAY a special fsm's detail or all fsms' ADAPT information.
            :
******************************************************************************/
int fsmShow(int argc, CHAR * argv[])
{
    int i;
    HFSM hfsm;

    if (argc == 1)
    {
        fsmShowAll();
    }
    else
    {
        for (i = 1; i < argc; i++)
        {
            hfsm = str2int(argv[i]);
            fsmShowSingle(hfsm);
        }
    }

    return 0;
}
执行结果,三次分别是不带参数执行,带错误参数执行和带正确参数执行的结果:


这个状态机是RockOS系统的任务状态迁移图,在这个例子中我没有将各种值转换为可读的文本串。实际上,这个功能在RockOS中是提供的,只需要简单地向NAMETbl模块注册一下value-NAME对即可。


5楼: >>参与讨论
rockos
Show一下我写的RockOS (四)
下面这幅图显示了RockOS中对消息状态的扫描功能,它允许系统强制性回收长时间处于ALLOCATED, Received两个状态的消息,并将其内容转储出来。如果消息长时间处于Sent状态,OS并不回收,因为有可能接收任务优先级较低,而在系统负荷过重时还来不及处理。


(1) 这个功能只适用于系统消息对象, 使用其它内容作为消息发送不受这个功能保护。使用系统消息可以避免在发送消息时进行内存复制,从而有效地提高系统的负荷能力(vxworks的消息就需要内存复制,所以如果消息的内容比较长时,系统效率会明显下降,解决的办法就是在消息中传递指针——这种做法在嵌入式系统中被认为是不太安全的)。

(2) 千万别小看这个功能,对于有HA要求的嵌入式系统来讲,“自愈”是一个十分优秀的能力,它可以使系统真正在无人值守的情况下运行,自动修复不太经常发生的错误。
顺便提一下,上面的截图是RockOS提供的哲学家就餐问题的DEMO过程,命令p使某个哲学家变得饥饿,但一个哲学家不能连续吃三次(哲学家任务使用只能容纳一条消息的消息队列,第一次收到消息开始饥饿,还在吃时,再发第二条消息,此时消息队列满,如果再发第三条消息,会因为消息队列溢出而失败。因为要演示消息包自动回收功能,所以我特意在这里留了一个错误。

* - 本贴最后修改时间:2006-7-24 1:18:16 修改者:rockos

6楼: >>参与讨论
rockos
Show一下我写的RockOS (五)
信号量是所有OS中最具有共同点的内容了,RockOS支持互斥信号量和同步信号量。互斥信号量又称为二进制信息量, 同步信号量就是传统的信号量, 这些OS的基础理论在这里就不罗嗦了,有兴趣的自己翻书回忆一下。
下面是RockOS的Shell中有关信号量的截图:




* - 本贴最后修改时间:2006-7-24 1:02:41 修改者:rockos

7楼: >>参与讨论
rockos
最后列一下RockOS的Feature List
RockOS的Feature List:

    * 真正的多任务环境
    * 基于优先级的抢占式调度
    * 任务可以在系统初始化后的任何时刻由任何任务创建(但不能由ISR创建)
    * 任务可以在创建时指定可抢占,不可抢占属性
    * 可抢占任务在执行敏感代码时,可以使用任务锁,使任务暂时不可抢占,任务锁可以嵌套调用,只对单一的任务有效,不会对其它任务造成任何影响
    * 任务优先级可以显式调整(留有自动优先级翻转的接口,但没有实现)
    * 任务入口函数可以返回(隐式删除,也就是自己删除自己)
    * 任务运行轨迹的转储接口,并提供简单转储DEMO
    * 自动侦测死锁环(deadlock loop)
    * 三种大小、数量均可配置的消息包
    * 消息队列通信,消息可以从ISR向任务发送,也可以在任务间相互发送

    * 互斥信号量(二进制信号量)
    * 同步信号量(计数型信号量)
    * 人机接口,提供简易的命令行Shell,提供命令注册和取消注册功能
    * 通用状态机算法实现
    * 软件运行安全指示(绝非类PWM驱动,纯软件实现,可指定为闪LED灯,清Watchdog等)
    * 设备轮循(tick周期和秒周期轮循)
    * 设备FIFO



8楼: >>参与讨论
hqgboy
和UCOUS-II有那些不同?
 
9楼: >>参与讨论
rockos
最起码有如下几点不同
(1) 动态创建/删除任务, 伴随地申请和释放内存
(2) 任务的优先级可以相同
(3) 任务数量从2~65535可以自己定义, 只要有足够的内存资源(RockOS的调度机是一个基于优先级的队列)
(4) 任务入口函数可以返回
(5) 任务运行轨迹可以转储出来, 使用这个feature可以非常容易地实现系统的"临终遗言"功能 ^_^
(6) 自动侦测deadlock
(7) 可以从中断服务例程中发送消息出来
(8) Shell功能
(9) 设备管理功能, 尽管RockOS的设备管理功能非常简单, 对于嵌入式应用而言还是够用的
......

楼上的, 试试在ucos-ii上实现哲学家就餐问题或理发师问题就会明白,由于ucos无法支持同一优先级的多个任务, 你被迫对问题的描述进行修改,从而失去了原问题的本来面目.


10楼: >>参与讨论
hqgboy
谢谢.在用UCOS-II.
您应该在有影响的杂志上发表啊...
学习UCOS-II的发迹史.呵呵.
人家UCOS-II全套好多大洋呢.

自己学习,可否提高源码看看.
hqgboy@126.com

11楼: >>参与讨论
Likeos
恭喜恭喜啊,Rockos的功能越来越完善了啊
支持

12楼: >>参与讨论
yos
内存管理
请教一下rockos是如何实现内存管理的,动态地删除和创建任务时间是否确定。在支持mmu和不支持mmu的机器上实现时有什么不同?请不吝赐教,我现在对这个问题比较头大,希望得到先知指点。

13楼: >>参与讨论
rockos
to yos朋友
RockOS使用块状内存管理, 比较简单, 省去了使用内存链带来的内存碎片和潜在的内存链断裂危险.

动态删除和创建任务的执行时间是可确定的, 但是, 何时创建任务, 何时删除任务或任务退出, 则完全是应用本身的事情. RockOS在运行后对新建任务只做一个限制, 就是不能在中断服务程序中创建新的任务.

RockOS是一种单地址空间OS, 任务不具有自己的内存空间, 所以在OS级不支持mmu. 如果在带有MMU支持的系统中运行, 则需要采用BootLoader + RockOS的方式运行. 在BootLoader准备向RockOS交权前, 配置并激活MMU, 然后一条跳转指令跳向RockOS的初始化地址就可以了.


14楼: >>参与讨论
平常芯
嘿嘿
挺帅的

参与讨论
昵称:
讨论内容:
 
 
相关帖子
求教ARM bootloader中堆栈分配的问题
LED点阵显示屏群号29121769  欢迎大家的加入
ucosII 读写锁实现
请教关于在线刷ON-chip Rom的问题
如何用预处理得到常数的后缀0数目


Copyright © 1998-2006 tgdrjb.cn 浙ICP证030469号