RTEMS

实时多处理器系统
授权协议 GPL
开发语言 C/C++
所属分类 其他开源、 嵌入式操作系统
软件类型 开源软件
地区 不详
投 递 者 袁宜民
操作系统 嵌入式
开源组织
适用人群 未知
 软件概览

本介绍摘录自RTEMS中文网

RTEMS, 即: 实时多处理器系统(Real Time Executive for Multiprocessor Systems),是一个开源的无版税实时嵌入操作系统RTOS。 它最早用于美国国防系统,早期的名称为实时导弹系统(Real Time Executive for Missile Systems),后来改名为实时军用系统(Real Time Executive for Military Systems),现在由OAR公司负责版本的升级与维护。目前无论是航空航天、军工,还是民用领域RTEMS都有着极为广泛的应用

从体系结构上来看,RTEMS是微内核抢占式的实时系统,他具有下面的优点:

  • 优秀的实时性能
    • 支持硬实时和软实时(可抢占内核)
    • 支持优先级继承,防止优先级反转
    • 支持单调周期调度
    • 支持优先级高度协议
  • 非常的稳定
  • 运行速度快
  • 支持多种CPU,无论是ARM, MIPS,PowerPC,i386还是DSP,AVR,Zilog,都可以找到对应的BSP。
  • 高度可剪裁内核(目标系统小只有30KB;大可上百兆)1,2,3
  • 占用系统资源小,在32位系统中最小的内核只有30Kb左右1,2
  • 支持多处理器(不同于SMP,RTEMS中多个处理器是协作关系)
  • 提供POSIX API,Linux/UNIX下的程序可以方便移植
  • 提供完整的BSD的TCP/IP协议栈以及FTP、WebServer、NFS等服务
  • 使用面向对象思想设计,可以大大缩短开发周期
  • 核心代码使用C/C++写作,可移植性好
  • 支持ISO/ANSI C库
  • 支持ISO/ANSI C++库以及STL库
  • 支持精简的可重入glibc库
  • 支持图形用户界面(Microwindows/Nano-X)
  • 支持文件系统(FAT,IMFS等)
  • 支持多种调试模式(包括GDB,DDD,串口调试,以太网调试)
  • 支持32位处理器,Tiny RTEMS项目将对8位和16位处理器进行支持2
  • 支持JAVA虚拟机

(注1:最小内核指的是只包含BSP、任务调度、内存模块这些功能的内核。它的大小和CPU指令集、外设多 少、二进制代码格式等相关。CPU是ARM7时,产生的ELF格式标准ARM目标可以减少到46kb。通常来说如果只需要最主要的功能,未压缩目标目标可 以控制在60kb(内核+BSP+简单应用),这比起Linux2.4 压缩后还有700K的庞大体积来说,更适合成本体积敏感的应用)

(注2:现在也有hacker主持Tiny RTEMS项目,该项目中,未压缩的最小的RTEMS bin镜像(内核+BSP)只有20kb。该项目将RTEMS id变成了16bit了,此外该项目将BSD TCP/IP换成了LWIP。这样RTEMS变成了能给8bit和16bit用户使用的小型RTOS,COOL!!。)

(注3:如果只是RTEMS可管理的存储空间,rtems.com公布的应用中,基于RTEMS的飞行记录仪提供多达8G的存储空间。)

RTEMS在性能上丝毫不输于VxWorks,他和VxWorks以及RtLinux的性能比较可以参考《RTEMS简介》。他在全球有不少的用户,尤其是在通信、航空航天、工业控制、军事等领域有着非常广泛的应用,在系统实现上,RTEMS和VxWorks以及NucleusPlus的实现基本相同。

RTEMS的官方网站是www.rtems.com,当前最新的稳定版本是4.7.1,开发版是4.9。在国内,RTEMS主要用在航空航天和军工领域。 我们希望这个网站能普及RTEMS知识,帮助RTEMS在民用领域发挥更大的作用。

本站开设的目的主要是在国内推广嵌入式系统知识(主要介绍RTEMS,此外也不排除其他优秀的嵌入式系统比如 eCos、Linux等)。

  • RTEMS是以线程为基本调度单位的,调度算法基于优先级的抢占式线程调度,支持256个线程优先级。当然RTEMS值hi创建同等优先级线程,相同优先级的线程采用时间片轮转调度。调度器寻找下一个最高优先级就绪线程的时间是o(1),这是实时性得到保障的一个关键机制。 为了增强对用户应用需求的可扩展性,rtems实现了基于线程的任务扩展机制,可在创建任务、上下文切换或者删除任务等系统事件发生时插入用户指定的

  • 最早用于美国国防系统,早期的名称为实时导弹系统(Real Time Executive for Missile Systems),后来改名为实时军用系统(Real Time Executive for Military Systems) 1、RTEMS(多处理系统实时可执行体)是一个为嵌入式系统而设计的自由的开源实时操作系统。 在缩写词RTEMS取其现在的含义之前,初始时代表导弹系统实时可执行体,

  • RTEMS 移植指南 porting.RTEMS移植指南.双语.V20131224.pdf RTEMS 的porting文档的原创翻译。 目录 前言 11 1  开发工具 13 2 源代码组织 15 2.1  简介 15 3  CPU型号变种 17 3.1  RTEMS可移植性概述 17 3.1.1  处理器家族 17 3.1.2  主板 20 3.1.3  应用程序 20 3.2  编码问题 2

  • Rtems简介 RTEMS,a rivail of VxWorks 作者 Ray RTEMS版权所有,转载请注明:来源http://www.rtems.net,作者Ray RTEMS可谓嵌入式系统鼻祖,经过专家的评测,其性能毫不逊色于VxWorks, 远远把RtLinux甩在后面。 正文 RTEMS是前美国军方研制的嵌入式系统, 最早用于美国国防系统,早期的名称为实时导弹系统(Real Time

  • 接触 RTEMS 是 2008 年下半年的事情。当时在设计一些嵌入式系统的解决方案,寻找一个好的中间件,以满足系统多方面的要求。在查阅 ACE 时发现其支持 RTEMS 系统,不了解 rtems 是什么。于是,就用 google 搜索了 RTEMS 这个关键字,发现了新大陆。 最开始是从 www.rtems.net 上学习,发现资料陈旧且疏漏较多;于是就上官方网站 www.rtems.com 直接

  • RTEMS, 即: 实时多处理器系统(Real Time Executive for Multiprocessor Systems),是一个开源的无版税实时嵌入操作系统RTOS。 它最早用于美国国防系统,早期的名称为实时导弹系统(Real Time Executive for Missile Systems),后来改名为实时军用系统(Real Time Executive for Military

  • 很久没写过关于RTEMS的文章了。很多朋友最近问我,为什么选择RTEMS,不选择VxWorks,你自己学习就算了,为什么也要拉着别人搞RTEMS。 这些问题略微的有一些复杂,我就专门写篇文章来作答。以前,我做商业项目都是使用FreeRTOS和uC/OS-II的, FreeRTOS和uC/OS-II都差不多,核心代码不过几千行。突出的特点是,好掌握,易上手,在较短的时间内就能上手开发。但是同时带来一

  • RTEMS的编译 作者 Ray RTEMS版权所有,转载请注明:来源http://www.rtems.net,作者ray@rtems.net 摘要     本节主要介绍RTEMS编译的步骤。 交叉编译环境建立好以后,编译就很简单了,解压rtems的文件夹 $tar xjvf rtems4.6.2.tar.bz2 建立rtems的编译路径: $ mkdir rtems_i386     这里将以38

  • #include <stdlib.h> #include <stdio.h> #include <bsp.h> #include <rtems/shell.h> static rtems_task user_task (rtems_task_argument ignored) { printf("In User tASK\n"); printf("starting shell

  • 注意,以下博客为我个人目前的理解,不代表正确,仅作参考。 rtems 4.10.2 Device Driver相关的函数   rtems_configuration_table Configuration = {     ....     CONFIGURE_MAXIMUM_DRIVERS,                /* maximum device drivers */     ....

  • 最近看到 OurRTEMS 朋友在博客上留言,希望建一个交流群。原先我以为交流群的作用远不如RTEMS的官方邮件列表来得实在,后来加入了其他的技术群后才发现,群里集中了热爱RTOS的人,热心的网友以及渴望帮助别人或得到别人帮助的人。是个非常不错的交流平台。 RTEMS这款操作系统是一个相对完善的RTOS。国内应用 RTEMS的企业和项目不在少数。对RTEMS本身还是有一定的要求的。从世界的范围来看

  • 已经写了Cygwin下的RTEMS方式的建立,但是思前想后,还是把Linux的也写了吧。 先对比一下cygwin和linux的开发环境的优缺点。 1.cygwin 方式 – 下载相关的 GNU Tools 的 压缩 包并安装; – 编译速度慢,但开发界面友好。 2.纯 linux 方式 – 下载相关的 GNU Tools 的 RPM 包并安装; – 编译速度快,但 Linux 下较难找到合适的编辑

  • Rtems简介—挑战VxWorks的RTOS RTEMS,a rivail of VxWorks 来源 www.rtems.net 作者 ray@rtems.net         RTEMS是前美国军方研制的嵌入式系统, 最早用于美国国防系统,早期的名称为实时导弹系统(Real Time Executive for Missile Systems),后来改名为实时军用系统(Real Time E

  • 分析一: /*  *  Simple test program -- simplified version of sample test hello.  *  *  $Id: test.c,v 1.1.1.1 2009/08/06 20:25:58 joel Exp $  */ #include <bsp.h> #include <stdlib.h> #include <stdio.h> rtem

  • rtems 历史背景及现状 常用的api 和参数介绍 rtems_interrupt_enable rtems_interrupt_is_in_progress rtems_cache_flush_range_l2 rtems_semaphore_create rtems_task_wake_after rtems_fsmount rtems_bdpart_register_from_disk r

  • 开发环境是进行 RTEMS 开发的基础。RTEMS 为开发人员准备了基于Windows和Linux两大操作系统的工具链。 两条工具链都是GNU工具链在不同平台上的移植。本质上都是相同的。 在Windows操作系统下,建立Cygwin的开发环境,在cygwin上编译RTEMS的应用程序, 使用Windows的编辑工具编辑RTEMS的代码。 由于Cygwin是一个Windows下类Linux的环境。所

  • #include <stdlib.h> #include <stdio.h> #include <bsp.h> static rtems_task user_task (rtems_task_argument ignored) { printf("In User tASK\n"); while (1) { } } rtems_task Init(rtems_

  • RTEMS版权所有,转载请注明来源www.rtems.net,作者ray@rtems   第 1 节: 介绍     本章介绍了RTEMS开发环境,包括         *         RTEMS的目录结构,       *         GNU Make在 RTEMS 开发环境中的用法       *         示例应用       *         RTEMS特性工具     R

 相关资料
  • 问题内容: 如果在多处理器或多处理器计算机上运行,​​而jvm可能绝对同时运行多个线程(不只是同时出现),那么api方法返回什么?…在​​上述情况下,它是否会返回当前线程之一是随机的吗? 问题答案: 它返回您当前正在其中运行的线程。如果你有两个核心和两个线程和完全并行运行,要求在同一时间这个方法,它将返回和适当的。 您的理解是正确的-此方法返回的线程始终处于运行状态-因为必须从某个线程调用该线程,

  • 我正在尝试使用多个处理器类在处理器步骤中处理记录。这些类可以并行工作。目前我已经编写了一个多线程步骤,其中我 设置处理器类的输入和输出行 提交给遗嘱执行人服务 获取所有未来对象并收集最终输出

  • 11.3 协处理器的指令系统 协处理器共有68条不同的指令,汇编程序在遇到协处理器指令助忆时,都会将其转换成机器语言的ESC指令,ESC指令代表了协处理器的操作码。 在协处理器指令在执行过程中,需要访问内存单元时,CPU会为其形成内存地址。协处理器在协处理器指令期间内利用数据总线来传递数据。80287协处理器利用I/O地址00FAH~00FFH来实现其与CPU之间的数据交换,而80387~Pent

  • 问题内容: 我想使用multiprocessing.Pool,但是multiprocessing.Pool不能在超时后中止任务。我找到了解决方案,并对其进行了一些修改。 主要修改-使用 sys.exit(1) 退出工作进程。它杀死了工作进程并杀死了工作线程,但是我不确定这个解决方案是否很好。当进程因正在运行的作业而终止时,我会遇到哪些潜在的问题? 问题答案: 停止正在运行的作业没有隐含的风险,操作

  • 但是我不能在一个计时器中处理不同的“计时器任务”。我试图将计时器任务对象添加到构造函数中,但是当我将新的计时器任务(RemindTask1)对象作为参数(内部类的实例)传递时,出现编译错误。 以下是它如何处理一项任务: 但是我完全被多个任务应该如何创建然后运行所困扰。 但是这不起作用,我不知道出了什么问题。当我将新的RemindTask2()作为参数传递时,我遇到了编译错误。

  • 我对MongoDB中的多对多关系实现有一个特定的问题。 我收集了歌曲和艺术家的作品(数百万份文档)。在这里,这首歌可以被许多艺术家演唱,一个艺术家可以唱许多首歌。所以我在两个集合中都遵循了文档引用的方法。像这样... 1.歌曲集:- 2.艺术家收藏:- 但这里的问题是,在删除艺术家的同时,我必须从歌曲所有文档中的艺术家数组中删除一个艺术家,如果该文档中有艺术家,反之亦然。这会导致原子性问题。我如何