跳至内容

全面应用模块模板

编写的应用程序可以作为 工作 (模块(有自己的堆栈和进程优先级),或作为 工作队列任务 (在工作队列线程上运行的模块,与工作队列中的其他任务共享堆栈和线程优先级)。在大多数情况下,可以使用工作队列任务,因为这样可以最大限度地减少资源占用。

信息

架构概述 > 运行时环境 提供了有关任务和工作队列任务的更多信息。

信息

所有在 首次应用教程 与撰写完整的申请相关。

工作队列任务

PX4-Autopilot 包含一个用于编写新应用程序(模块)的模板,该应用程序(模块)以 工作队列任务: src/examples/work_item.

工作队列任务应用程序与普通(任务)应用程序相同,只是它需要指定自己是工作队列任务,并在初始化过程中安排自己的运行时间。

示例说明了如何操作。总而言之

  1. 在 cmake 定义文件中指定对工作队列库的依赖 (CMakeLists.txt):

    ...
    取决于
       px4_work_queue
  2. 除了 模块库因此,该任务还应从 计划工作项目 (包括从 ScheduledWorkItem.hpp)

  3. 在构造函数初始化中指定要将任务添加到的队列。队列 工作项目 示例将自己添加到 wq_configurations::test1 工作队列,如下图所示:

    cpp
    工作项目示例::工作项目示例() :
        模块参数(nullptr),
        计划工作项目(MODULE_NAME、 px4::wq_configurations::test1)
    {
    }

    信息

    可用的工作队列 (wq_configurations)列于 WorkQueueManager.hpp.

  4. 实施 ScheduledWorkItem::Run() 工作的方法。

  5. 实施 任务生成 方法,指定任务是一个工作队列(使用 任务 ID 是否为工作队列 id.

  6. 使用其中一种调度方法调度工作队列任务(在示例中,我们使用 ScheduleOnInterval启动 方法)。

任务

PX4/PX4-Autopilot 包含一个用于编写新应用程序(模块)的模板,该应用程序(模块)可作为任务运行在自己的堆栈中: src/templates/template_module.

该模板演示了完整应用程序所需或有用的以下附加功能/方面:

  • 访问参数并对参数更新做出反应。
  • 订阅 uORB 并等待主题更新。
  • 通过以下方式控制后台运行的任务 启动/停止/地位.......。 模块启动 [<参数>] 命令就可以直接添加到 启动脚本.
  • 命令行参数解析
  • 文件 PRINT_MODULE_* 方法有两个用途(该应用程序接口记录了 在源代码中):
    • 当输入 模块帮助 在控制台上。
    • 它们通过脚本自动提取,以生成 模块和命令参考 page.