【问题标题】:Multitasking RTOS on AVR [closed]AVR 上的多任务 RTOS [关闭]
【发布时间】:2011-10-25 03:27:17
【问题描述】:

我有一个 AT90USB162 AVR 芯片,我想运行一个多任务 RTOS,所以我正在评估可能的 RTOS 与我的 AVR 芯片一起使用。 AVR 支持哪些多任务 RTOS?也许是 QNX? (是否可以在 AVR 微芯片上运行 QNX 内核?)。

提前致谢。

【问题讨论】:

  • 您的意思是“实时...”中的“RTOS”吗? - 或者您只是在寻找抢占式调度?
  • 我的意思是实时操作系统。
  • @Hanno:是否有非实时的 AVR 抢先调度程序!?
  • 好吧,我曾经写过一个 :) - 但我似乎记得有相当多的 AVR 抢先调度程序,其中许多缺乏任何 RT 功能,以简化和/或资源使用。大多数都可以在各种 AVR 论坛中轻松找到。
  • 由于我对所谓的“实时操作系统”有很多困惑,我认为应该注意该术语的实际含义:实时操作系统与-simpler-形成对比抢先调度操作系统;实时和有保证的确定性完成/响应时间是实时部分的组成部分,可以在任何有关该主题的书籍以及Wikipedia 中找到。

标签: real-time avr rtos avr-gcc qnx


【解决方案1】:

Atmel AT90USB162 是一款基于 RISC 的 8 位 AVR 微控制器——QNX 将是一个延伸,而 AVR 不在他们的BSP directory 中

Micrium支持带有uC/OS-II的AVR

FreeRTOS也支持AVR

【讨论】:

  • Doug,你知道 uC/OS-II 是不是开源的吗? (我认为 FreeRTOS 是开源的,不是吗?)
  • 我不是 Doug,但 uC/OS-II 是开源许可软件:micrium.com/page/downloads/source_code(如果您想在商业应用。)
  • 下载源代码的能力与“开源”不同,请仔细阅读产品的许可条款,而不是依赖此处所述的任何内容。 uC/OS-II 的源代码包含在 Jean Labrosse 的书中;这是以前获得它的唯一方法。如果没有购买许可证,您不能在商业产品中使用它。 FreeRTOS 是开源的;它要求您确定 FreeRTOS 用于任何分布式产品。如果您不想这样做,OpenRTOS 是相同的,但已获得商业许可和支持。
  • 我之前试过在 AVR 上运行 FreeRTOS,但由于设备内存严重受限...只能运行几个任务,而且很容易溢出堆栈。
【解决方案2】:

当您说“RTOS”时,我想您的意思是先发制人的多任务处理?我猜(因为这是一个 8 位 AVR)你不需要文件系统、网络堆栈等?

如果您正在寻找一个小型、抢占式多任务内核,您可能需要查看 Quantum Platform - 我已经在资源非常有限的平台上使用它,例如AVR 和 MSP430。同事们也在 8 位 8051 和 HC11 变体上使用它。

QP 的抢占式内核 (QK) 是一个运行到完成的内核,可降低其堆栈 (RAM) 要求并减少上下文切换占用的资源(无 TCB,保存和恢复的上下文更少)。

有一个 QP/C 变体,它是“小”,还有一个 QP-nano 变体,它是“小”。由于这些术语在没有数字的情况下完全没有意义,因此the QP-nano page 比较了内核类型及其典型大小。例如(提供的最低数字):典型的 RTOS、10K ROM、10K RAM; QP/C - 8K ROM,1K RAM; QP-nano - 2K ROM,100 字节 RAM。

好消息是所有代码都可用,因此您可以下载并尝试并亲自查看。

【讨论】:

  • 感谢您的建议。
  • 上述答案中的QP-nano链接已经失效; [链接] 关于 QP-nano™ (state-machine.com/qpn) 是另一个切入点。
  • @HiTechHiTouch -- 非常感谢 -- 时间过得真快!感谢您的更新,我已经更新了答案中的 URL。
【解决方案3】:

QNX - 没有机会! QNX 是一个相对大型且复杂的操作系统,适用于带有 MMU 的 32 位设备,不仅提供内核级调度,还提供文件系统、容错网络、POSIX API、GUI 等。它最显着的特点是支持内存保护——每个线程都运行在它自己的虚拟内存段中,因此只能在具有适当硬件支持的设备上运行。

您希望操作系统提供哪些功能?在 8 位设备上,期望基于基本优先级的抢占式调度和 IPC 是合理的。网络、文件系统、USB 等其他服务通常是来自 RTOS 供应商的附加组件,或者必须自己从第三方代码中集成。

如果您不想花钱,显而易见的选择是 FreeRTOS。它胜任,尽管在​​某些方面在架构上非常规,即使在 API 级别相当常规。在我对 ARM 的测试中,与我测试的其他内核相比,它的上下文切换时间较慢,但在 AVR 上可能并非如此,并且只有在您需要实时响应时间时才会成为问题几微秒。 AVR 有一个相当大的寄存器集,因此在任何情况下上下文切换通常都很昂贵。

Atmel 在http://www.atmel.com/products/AVR/thirdparty.asp# 上提供了包括RTOS 在内的第三方支持列表。他们列出了以下内容:

  • CMX Systems, Inc:CMX-RTX、CMX-Tiny+(附加组件:CMX-MicroNet、CMX-FFS)
  • FreeRTOS.org:FreeRTOS
  • Micriµm, Inc:µC/OS-II
  • Nut/OS:RTOS 和 TCP/IP 堆栈以及类似 Posix 的 API。
  • SEGGER: embOS

我有 CMX-Tiny+(在 dsPIC 上)、embOS(在 ARM 上)、FreeRTOS(在 ARM 上)和 uC/OS-II 的个人经验。他们都是有能力的,uC-OS-II 有一个小的限制,即每个优先级只允许一个任务(没有循环调度),但因此可能更快的上下文切换。在 embOS 的情况下,我成功集成了第三方文件系统和 USB 代码,尽管供应商也有自己的附加组件。

【讨论】:

    【解决方案4】:

    虽然不是直接回答您的问题,作为资源有限的 8 位控制器,但在提交到 OS 层之前考虑一下优势,只有当项目必须处理主要子系统时,OS 层的优势才会受益编码和维护 ex 很乏味。文件系统、图形、音频、网络等。

    由于大多数供应商提供集成开发环境和标准库,而且您可以使用 C、C++ 等高级语言编写代码,对于简单的控制任务,坚持自己的框架将更易于管理

    【讨论】:

      【解决方案5】:

      Athomthreads 是 AVR 支持的轻量级 RTOS。它支持:

      • 具有 255 个优先级的抢占式调度程序
      • 同一优先级的循环
      • 信号量
      • 互斥体
      • 消息队列
      • 定时器

      它是开源的,大约有 1k 行代码。相比之下,使用 Eclipse 构建 AVR 的演示项目会生成一个 96 到 127 kb 的 .bin 文件。当然 FreeRTOS 有更多的功能(比如内存管理,包括动态内存)和更好的安全性。但是如果你只需要多线程 atomthreads 是很好的。

      Here是多个RTOS的综合比较。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-09-22
        • 2020-04-17
        • 2018-08-25
        • 1970-01-01
        相关资源
        最近更新 更多