我看 RTEMS

本文回顾了作者初次接触RTEMS的经历,并对其配置管理、图形界面、多处理器支持等方面提出建议。同时指出了设备驱动、文件系统支持、总线支持等方面的不足。

接触 RTEMS 是 2008 年下半年的事情。当时在设计一些嵌入式系统的解决方案,寻找一个好的中间件,以满足系统多方面的要求。在查阅 ACE 时发现其支持 RTEMS 系统,不了解 rtems 是什么。于是,就用 google 搜索了 RTEMS 这个关键字,发现了新大陆。

最开始是从 www.rtems.net 上学习,发现资料陈旧且疏漏较多;于是就上官方网站 www.rtems.com 直接学习英文资料。官方的资料与最新的软件也有对不上的情况。但瑕不掩瑜,对一个开源的RTOS系统,能做到如此水平,实在是让人佩服。

当我深入 RTEMS 之后,除了感叹它的精巧设计外,也发现了一些问题。我把这些问题列出来,供大家讨论研究:

  • autoconf 的配置管理方式虽然方便,但进入门槛较高,远不如 ecos 那种图形化配置工具来得方便易用,进入门槛低;
  • 图形界面;RTEMS官方提供的方案是使用NanoX(micro window);这个方案对于x86或者一些系统级的嵌入式来说,是挺全面的解决方案。RTEMS提供了一套界面的开发工具“RTEMSGraphicsToolkit ”,看起来,越来越接近PC机了。目标可能就是把QT移植过来。 然而对于一个小小的ARM7来说或者一个黑白屏幕来说,这样的方案是不是太大了点?很多时候,嵌入式系统需要的仅仅是一些简单的交互和信息的显示。需要一个高度可配置、伸缩的方案。目标也和RTOS的初衷是相辅相成的:想办法发挥出嵌入式系统的最大性能。个人觉得x11并不适合嵌入式多变的需求;这方面还需要同仁们努力啊。
  • 多处理器的支持;RTEMS毫无疑问是支持多处理器系统的,松散耦合,紧耦合两种。RTEMS 支持的方式采用的是 ASMP 的方式,即每一个处理器上都跑一个RTEMS,相互之间采用总线通讯。这种方式有很多优点,不需要考虑调度的问题,同步的问题也被转化成单机的同步问题。对单处理器的代码可以做最大的保全。然而,处理器之间的任务划分,不再是透明的。应用者必须考虑一个任务放在A CPU 上或是 B CPU上运行。对于芯片多处理器(CMP),这种方式就有点不爽了,原本一个逻辑整体,因为ASMP的支持方式,却要每个CPU的可访问的内存划分开,中断划分开等等……任务也必须要安排到每一个CPU上。多处理器的支持需要改进改进,特别是x86、ARM、SPARC等CMP的运用,改进后会为开发者带来很大的便利。也比ASMP的方式利用资源的方式合理。
  • 设备驱动不丰富;只有少量的网卡,PCI、PCIe的设备支持,BSP虽然覆盖了主流的处理器类型,还是需要开发者做很多工作。当然,OAR的大牛们有更多的更重要的事情要去做,只希望开源界的朋友们站出来,为这方面多多加油努力。
  • 文件系统不丰富,缺乏一些优秀的文件系统的支持;jaffs、yaffs、ntfs、ext3等文件系统的支持还是比较重要的。嵌入式开发面临的存储设备也是多样化的,FAT格式不利于文件系统的长期稳定运行,nandflash这样的设备还是需要yaffs这样的文件系统。
  • 不支持IPv6;恩,这个是趋势,OAR的大牛们已经注意到这个问题了,相信不久的将来,这个会被支持的。
  • 缺乏一些总线的支持;这个是大问题,如CAN、USB、火线等,小一点的公司没有这样的技术力量去扩展,大一点的公司有力量去做但嫌维护成本高。RTEMS优良的性能会保证最终产品的性能。然而客户自己移植的协议,总线未能顾及到RTEMS系统的特点,甚至损害RTEMS的性能。难啊,这方面还希望官方多做做努力。
  • 使用gdb调试,使用起来多有不便。GDB虽然支持的芯片多,它只是个通用的调试器,用户可能还需要诸如调度次数、中断次数,以及开关中断的次数等信息。栈的用量、堆的用量等等,如果能在GDB的基础上再提供此类调试信息,必将进一步提高普通用户应用RTEMS产品的质量。

简单的聊聊,欢迎朋友们拍砖。

 

RTEMS 是一个开源的实时操作系统(RTOS),具有高度的可靠性、可移植性和灵活性,在各种嵌入式系统中得到了广泛的应用。其设计目标与 VxWorks 类似,但在实现方式和生态系统方面具有自身特色。 ### RTEMS 的特点 RTEMS 的显著特性使其在众多实时操作系统中脱颖而出。首先,它具备高性能特性,通过优化的调度算法和高效的中断处理机制,确保系统的高性能表现。这一特点使得 RTEMS 能够胜任对实时性要求较高的任务,例如工业控制、航空航天和通信设备等应用[^2]。 其次,RTEMS 提供了高可靠性支持。系统支持优先级继承和多种同步机制,有效减少了死锁和优先级反转的风险。这种机制对于构建复杂、多任务并发的实时系统至关重要,确保系统在高负载情况下依然能够稳定运行[^2]。 此外,RTEMS 具备灵活配置的能力。用户可以根据具体需求灵活配置内核功能,满足不同应用场景的需求。这种模块化设计允许开发者根据目标硬件平台裁剪或扩展功能组件,从而实现更高效的资源利用和系统优化。 最后,作为开源项目,RTEMS 拥有活跃的社区支持和丰富的文档资源,方便开发者学习和使用。开源特性使得 RTEMS嵌入式领域具有较强的适应性和可扩展性,降低了开发成本并加快了产品上市时间[^2]。 ### 应用场景 RTEMS 的设计使其适用于多种嵌入式实时应用场景。例如,在航空航天领域,RTEMS 可作为飞行控制系统的核心操作系统,提供高可靠性和实时响应能力。其在工业自动化中的应用也非常广泛,可用于构建实时监控系统、机器人控制平台等[^1]。 RTEMS 还可以作为应用代码与目标硬件之间的缓冲区,提供统一的 I/O 接口管理,使开发者能够将硬件依赖部分有效融合到系统中,同时为用户的应用提供一种通用的机制。这种设计有助于建立丰富的标准应用库,提高代码的可重用性[^3]。 在嵌入式教育和研究领域,RTEMS 也得到了广泛应用。其开源特性和模块化架构使其成为学习实时操作系统原理和开发实践的理想平台。 ### 与其他 RTOS 的比较 与 VxWorks 类似,RTEMS 同样具备高性能和高可靠性,但 RTEMS 的开源特性使其在成本控制和社区支持方面更具优势。相比之下,VxWorks 作为商业产品,提供了更完善的商业支持和工具链,但其许可费用较高。在处理器支持方面,RTEMS 支持包括 PowerPC、ARM、MIPS、x86 等多种架构,与 VxWorks 的硬件兼容性相当。 对于国内开发者而言,RT-Thread 和 RTEMS 都是开源 RTOS 的代表,但 RTEMS 更专注于高可靠性、硬实时性能,适用于对安全性要求更高的工业和航空航天领域,而 RT-Thread 则在物联网和消费电子领域有更广泛的应用[^4]。 ### 示例代码 以下是一个简单的 RTEMS 应用程序示例,展示了如何创建一个任务并循环执行: ```c #include <rtems.h> #include <stdio.h> rtems_task Init(rtems_task_argument argument) { while (1) { printf("Hello from RTEMS task!\n"); rtems_task_wake_after(100); // 延迟100个时钟滴答 } } #define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER #define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER #define CONFIGURE_MAXIMUM_TASKS 1 #define CONFIGURE_RTEMS_INIT_TASKS_TABLE #define CONFIGURE_INIT #include <rtems/confdefs.h> ``` 该代码定义了一个简单的任务,并在主任务中循环打印信息,展示了 RTEMS 的基本任务调度机制。 --- ###
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值