解耦的应用程序模块

时间:2012-01-06 19:07:24

标签: module arm rtos

我正在搜索嵌入式RTOS,它支持更新软件的功能,而无需编译/链接整个内核和应用程序SW。这个概念就像在Windows或Unix桌面系统中一样:将应用程序模块(编译/链接二进制文件)下载到目标,而不触及内核(与内核分离)。 支持此类受内存保护的可下载应用程序模块(DAM)的一个RTOS是ExpressLogic的ThreadX(www.rtos.com/products/threadx/)。

有没有人知道支持这种DAM概念的其他RTOS(小占用空间,目标CPU Cortex-M3)?

有没有人对ThreadX的DAM有经验?一些批准的文献?

提前致谢!

3 个答案:

答案 0 :(得分:1)

QNX Neutrino可以做到这一点。它是一个完整的RTOS而不仅仅是一个内核,并且具有类Unix的接口和POSIX API。它默认使用Korn shell,但可以使用备用shell或窗口GUI界面。它比Linux或Windows Embedded小得多,可扩展性更强,同时又是真正的RTOS。


WindowsCE具有实时功能(虽然不像典型的RTOS那样灵活或快速,但具有确定性和基于真正优先级的先发制人调度程序)。


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

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

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


答案 1 :(得分:0)

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

您可以查看Linux Lodable Kernel Modules HOWTO,其中提供了有关该主题的优秀文档:

“一个优点是您不必经常重建内核。这可以节省您的时间,并且可以避免在重建和重新安装基本内核时引入错误。一旦有了工作基础内核,尽可能保持原状不变。“

答案 2 :(得分:0)

足迹非常小。内核,模块管理器,一个带有内存保护和模块支持的小型演示应用程序,不到15kB。

使用threadx你可以在cortex m3下执行此操作,因为它可以使用mpu,不需要mmu。据我所知,其他操作系统在那里遇到麻烦。