小型 ARM 微控制器的 RTOS 内核之间的可量化差异 [关闭]

2024-04-12

有许多不同的 RTOS 可用于微控制器。我专门寻找支持 ARM Cortex M 处理器的 RTOS。另外,我对闭源解决方案不感兴趣。

试图从网站和邮件列表中比较每个 RTOS 的相对优点似乎相当困难,因为它们大多似乎具有相同的功能并执行相同的操作。只有在尝试使用每个 RTOS 执行某些任务后,真正的差异才会变得明显。

我知道这是一个有点主观的问题,可能很难回答 - 但一定有很多人实际上尝试过几种不同的 RTOS,并对每种 RTOS 的相对优点形成了自己的看法。

我对 FreeRTOS、ChibiOS 和 Coocox CoOS 特别感兴趣,但也非常欢迎其他选择。


例如:在 ChibiOS 中,ISR 似乎可以调用任何系统函数,但这些调用必须包装在chSysLockFromIsr()/chSysUnlockFromIsr()并且代码在这些部分中是不可抢占的。在 CoOS 中,唯一可调用的函数是以isr_例如isr_PostSem(), isr_PostMail(), isr_PostQueueMail() and isr_SetFlag(),但这些函数内部使用服务请求队列,这意味着大多数请求是可抢占的。


选择 RTOS 时可以考虑的一些功能:

  • 上下文切换时间
  • 中断延迟
  • 同步机制(标志、信号量、互斥体、邮箱、队列……)
  • 优先级反转处理
  • 内存管理支持(即内存池)
  • 调度策略支持
  • 内存管理单元支持
  • 流程支持
  • 内存占用
  • 内核本身的效率
  • POSIX 与非 POSIX API
  • 可用的软件生态系统(又称中间件)
  • ...

更关注哪一点取决于您要运行的应用程序。但总的来说,这些是我能记住的、使各种 RTOS 之间产生差异的东西。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

小型 ARM 微控制器的 RTOS 内核之间的可量化差异 [关闭] 的相关文章

  • 源和目标具有不同的 EABI 版本

    我正在尝试使用 ARM 工具链编译 so 文件 但是我不断收到这个错误 错误 源对象的 EABI 版本为 0 但目标对象的 EABI 版本为 5 我无法更改工具链中的任何内容 因为我必须使用给定的工具链 我以前从未见过这个错误 我使用了这个
  • 可以使用Visual Studio 2012构建ARM桌面程序吗?

    我正在使用 Visual Studio 2012 beta 我的桌面 win32 程序在 ARM 架构中编译得很好 升级到 Visual Studio 2012 RC 后 编译器无法工作并出现以下错误 不支持为 ARM 平台编译桌面应用程序
  • 如何在 Android 设备上运行 VS Code [重复]

    这个问题在这里已经有答案了 我有 Galaxy Tab S6 它具有替代笔记本电脑的很酷的功能 例如连接鼠标和键盘 但不幸的是它运行 Android 操作系统 并且没有很多开发应用程序可用于 Android 所以我想是否有一个选项可以在至少
  • M1 MacBook Pro 上的 Android Studio 无法使用 ABI armeabi-v7a 模拟系统映像

    我的 M1 Macbook Pro 上的 Android Studio 可以很好地模拟 ABI arm64 v8a 的所有系统映像 API 24 29 30 31 但是 它无法使用 ABI armeabi v7a 运行所有映像 例如 API
  • 有没有办法在 Xcode 4 中为 ARM 而不是 Thumb 进行编译?

    如果有很多浮点运算正在进行 Apple 建议针对 ARM 进行编译 而不是针对拇指进行编译 我的整个应用程序几乎是一个大型浮点运算 iOS 应用程序开发工作流程指南中是这样说的 iOS 设备支持两种指令集 ARM 和 Thumb Xcode
  • 为什么 i2c_smbus 函数不可用? (I2C——嵌入式Linux)

    有很多参考使用i2c smbus 开发嵌入式 Linux 软件时在 I2C 总线上进行通信的函数 什么时候i2c smbus函数如i2c smbus read word data在软件项目中引用了 ARM8 处理器错误 例如 i2c smb
  • 有关 CMake 错误的问题:没有为目标提供源

    我正在尝试使用 cmake 和 eclipse 将 FreeRtos 添加到我的项目中 但出现错误 我运行的是 debian 10 我的 cmake 版本是 3 13 4 cmake 的文件可以在以下位置找到这个 git 仓库 https
  • GCC C++ (ARM) 和指向结构体字段的 const 指针

    假设有一个简单的测试代码 typedef struct int first int second int third type t define ADDRESS 0x12345678 define REGISTER type t ADDRE
  • 设备树不匹配:.probe 从未被调用

    我无法理解设备树的工作原理 或者具体来说为什么该驱动程序无法初始化 这是在 android 版本 3 10 的 rockchip 供应商内核中 驱动程序 看门狗 rk29 wdt c 为了可读性而减少 static const struct
  • ARM Cortex-M3 启动代码

    我试图了解 STM32 微控制器的 Keil realview v4 附带的初始化代码是如何工作的 具体来说 我试图了解堆栈是如何初始化的 In the 文档 http infocenter arm com help index jsp t
  • 嵌入式系统:使用汇编语言时的内存布局

    根据我的理解 嵌入式系统运行机器代码 有多种方法可以生成此代码 一种是用 C 等高级语言编写程序 然后使用编译器获得这样的代码 另一种方法是用汇编语言为该嵌入式系统编写指令 并使用汇编器将其转换为机器代码 现在我们得到了加载到系统并执行的机
  • 为什么前向引用 ADR 指令在 Thumb 代码中以偶数偏移进行汇编?

    To bx对于 Thumb 函数 需要设置地址的最低有效位 GNU 作为文档states https sourceware org binutils docs as ARM Opcodes html当地址是从一个生成时这是如何工作的adr伪
  • GCC:如何在 MCU 上完全禁用堆使用?

    我有一个在基于 ARM Cortex M 的 MCU 上运行并用 C 和 C 编写的应用程序 我用gcc and g 编译它并希望完全禁用任何堆使用 在 MCU 启动文件中 堆大小已设置为 0 除此之外 我还想禁止代码中意外使用堆 换句话说
  • NAND 闪存编程:写入粒度?

    有人了解当今大型 NAND 闪存芯片的写访问吗 写入的最小粒度是多少 我这里有一个微控制器闪存 需要输入至少 1 个 最多 4 个字 即 16 位字 立即写入状态机 我认为大 gt 1 Gbit 闪存 由于写入性能原因 此处的行为有所不同
  • 如何在非零端点(libusb)上发送 USB 控制事务?

    我正在编写代码来了解 Freescale Kinetis 微控制器上的 USB 外设 我已经设法在 Linux 主机上完成枚举 并且可以使用 EP0 上的供应商自定义代码发送和接收数据包 与 libusb 测试程序交互 看起来我可以在微控制
  • 在微控制器中将数据从内存移至内存

    为什么我们不能直接将数据从一个内存位置移动到另一个内存位置 如果我问了一个愚蠢的问题 请原谅我 但我认为这是真实的情况 至少对于我遇到的情况而言 8085 8086 n 80386 我并不是真正在寻找移动数据的解决方案 例如 使用 movs
  • 当 Cortex-M3 出现硬故障时如何保留堆栈跟踪?

    使用以下设置 基于 Cortex M3 的 C gcc arm 交叉工具链 https launchpad net gcc arm embedded 使用 C 和 C FreeRtos 7 5 3 日食月神 Segger Jlink 与 J
  • LDR指令如何将常量加载到寄存器中?

    我刚刚读了一本ARM指令书 看到一条指令我无法解释 It says LDR将 32 位常量加载到r0登记 LDR r0 pc const number 8 pc const number DCD 0xff00ffff 我不明白什么 pc c
  • 使用arm-linux-gnueabi-gcc为Android交叉编译静态C hello world

    我想使用 arm linux gnueabi gcc 从 C 构建静态 hello world 而不是使用 NDK 独立工具链或 Codesourcery 在Ubuntu中 我做了以下事情 sudo apt get install gcc
  • 在 ARM Cortex-M3 中使用 newlib 的 malloc

    我正在为 ARM Cortex M3 NXP 的 LCP17xx 创建代码 到目前为止我一直在使用静态内存 一切都运行良好 我尝试添加动态内存支持 但是一旦调用 malloc 系统就会卡住 我正在使用 gcc 为 Arm Bare Meta

随机推荐