Module 解耦的应用程序模块

Module 解耦的应用程序模块,module,arm,rtos,Module,Arm,Rtos,我正在搜索一个嵌入式RTOS,它支持在不编译/链接整个内核和应用软件的情况下更新软件的功能。这个概念类似于Windows或Unix桌面系统:将应用程序模块(编译/链接的二进制文件)下载到目标系统,而不接触内核(与内核分离)。 支持这种内存保护的可下载应用程序模块(DAM)的RTO之一是ExpressLogic()的ThreadX 有人知道其他支持DAM概念的RTO(占用空间小,目标CPU Cortex-M3)吗 有人有过ThreadX大坝的经验吗?一些认可的文献 提前谢谢 我不是Cortex-M

我正在搜索一个嵌入式RTOS,它支持在不编译/链接整个内核和应用软件的情况下更新软件的功能。这个概念类似于Windows或Unix桌面系统:将应用程序模块(编译/链接的二进制文件)下载到目标系统,而不接触内核(与内核分离)。 支持这种内存保护的可下载应用程序模块(DAM)的RTO之一是ExpressLogic()的ThreadX

有人知道其他支持DAM概念的RTO(占用空间小,目标CPU Cortex-M3)吗

有人有过ThreadX大坝的经验吗?一些认可的文献


提前谢谢

我不是Cortex-M3方面的专家,但为什么不将Linux用于Cortex?Linux有“模块”的概念,可以在运行时加载和卸载。当然不是整个内核,也不是所有的功能

您可能想查看提供有关该主题的优秀文档的网站:


“一个优点是,您不必经常重建内核。这节省了您的时间,并避免了在重建和重新安装基本内核时引入错误的可能性。一旦您有了一个工作的基本内核,最好尽可能长时间保持它不动。”

QNX Neutrino可以做到这一点。它是一个完整的RTOS,而不仅仅是一个内核,并且具有类似Unix的接口和POSIXAPI。默认情况下,它使用KornShell,但可以使用其他shell或窗口GUI界面。它比Linux或Windows Embedded更小、更具可扩展性,同时也是真正的RTOS


WindowsCE具有实时功能(虽然不如典型的RTOS灵活或快速,但具有确定性,并且具有真正的基于优先级的抢占式调度器)


VxWorks可以动态加载对象模块并将其链接到已经加载并运行的内核

它与Windows或Linux上的不同,它在开发主机上通过部分链接工作,然后在运行时在目标主机上完成链接。正在加载的对象文件中任何未解析的链接依赖项都必须存在于目标中,无论是在内核中还是在以前加载的对象文件中

生成的运行时仍然像一个单片应用程序一样运行,就好像它已在开发主机上完全链接一样,因此每个模块必须具有唯一的外部符号,并且没有main()函数。运行时加载程序/链接器不执行加载的模块,但VxWorks外壳能够通过函数名直接执行任何公共函数,因此您只需从命令行或脚本调用加载模块的入口点



占地面积非常小。内核,模块管理器,一个带有内存保护和模块支持的小型演示应用程序,小于15kB


使用threadx,您可以在cortex m3下执行此操作,因为它可以使用mpu,无需使用mmu。据我所知,其他操作系统在这方面有问题。

有很多RTOS支持您正在寻找的功能。您还关心哪些其他功能?不比抢占式调度程序、具有优先级的任务更重要。但是中断延迟时间低,内核大小(2k)小,RAM使用量小。@Carl Norum:哪些RTOS支持这个概念?在2k内核中动态加载和执行模块的能力可能要求很多!这可能是一个具有调度和IPC的内核的最小大小,其他什么都没有。包含此功能时,ThreadX内核有多大?这可能比我的任何建议都要小。@Carl:答案应该是对问题的回答,而不是评论。如果他知道任何问题,希望他能在适当的时候给出答案;-)Linux不是实时操作系统。谢谢,但是Linux对于我们的应用程序来说太大了,我们不需要文件系统、网络堆栈等任何东西。我们需要一个小的实时内核,具有低上下文切换时间、低中断延迟。@Etamar Laron:DAM的意义不是用模块升级内核。您在应用程序层添加了一些新功能和模块。是的,我知道这一点。但是,由于问题没有规定除“在不编译/链接整个内核和应用软件的情况下更新软件”以外的任何要求,因此这是一个很好的选择。Linux确实不是一个“硬”实时操作系统,但对于硬/软实时操作系统来说,一旦去除了许多不必要的东西,它可能就足够了。@Etamar:实际上他指定了“RTOS,small footprint,Cortex-M3”,前两个是Linux不满意的,而且大多数Cortex-M3系统缺乏运行Linux所需的内存,因此需要占用较小的内存。此外,Cortex-M3缺少MMU,因此Linux(如果有的话)的优势被严重削弱。请注意,QNX需要MMU,因此不会在Cortex-M3上运行。我的错误,但我会让它作为参考。它可能用于通知需要此功能的任何其他人的处理器选择。