uC / OS-II如何动态加载任务

时间:2014-10-22 14:45:09

标签: scheduled-tasks ucos

基本上,当我的系统运行时,我希望用户将一些新代码ftp到SD卡,并动态加载新功能并创建一个在系统中运行的任务。这对Linux来说是正常的。例如,我可以编译一个SO,并动态加载到内存中。

如何在uC / OS II或III中执行此操作?

1 个答案:

答案 0 :(得分:2)

这不是uC / OS-II或uC / OS-III本身可以提供的服务。

您需要一个能够读取ELF文件的程序加载器,根据指定的加载地址在内存中复制其相关部分(例如.text,.rodata等),并为未初始化的内存部分分配内存。然后,您就可以创建一个新的uC / OS任务,并向其传递与ELF入口点对应的函数指针。

大多数嵌入式系统没有内存管理单元(MMU),因此您需要特别注意链接过程,以确保这些部分中的任何部分都不会与您已在其上运行的任何代码重叠。目标。根据您的工具链,这很可能涉及仔细制作您的链接描述文件。

避免内存空间可能重叠问题的另一个选择是使用可以生成位置无关代码的工具链,并将ELF加载到主应用程序的堆中或任何其他已分配和可用的内存空间中由您的主要应用程序分配。

另一种选择是生成可重定位代码,并使用或构建一个程序链接器,当您要加载上传的代码时,该链接器能够在运行时处理重定位。