【问题标题】:uC/OS-II How to dynamically load a taskuC/OS-II 如何动态加载任务
【发布时间】:2014-10-22 14:45:08
【问题描述】:

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

如何在 uC/OS II 或 III 中做到这一点?

【问题讨论】:

    标签: scheduled-tasks ucos


    【解决方案1】:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2011-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-11
      相关资源
      最近更新 更多