# 适用于开发完整应用的模版
一个应用程序可以写作一个 任务 (一个有自己的堆栈和处理优先级的模块)或作为 工作队列任务 (一个运行在工作队列线程上的模块, 与工作队列上的其他任务分享堆栈和线程优先级)。 在大多数情况下,可以使用工作队列任务,因为这会减少资源的使用。
注解
架构概述 > 运行环境 提供更多关于任务和工作队列任务的信息。
注解
第一个应用程序教程 中所学到的所有东西都与编写完整应用程序有关。
# 工作队列任务
PX4-Autopilot contains a template for writing a new application (module) that runs as a work queue task: src/examples/work_item (opens new window).
工作队列任务应用程序与普通(任务)应用程序相同。 除了它需要指定它是一个工作队列任务,并在初始化期间运行调度它本身。
示例显示了如何操作。 总结:
- Specify the dependency on the work queue library in the cmake definition file (CMakeLists.txt (opens new window)):
... DEPENDS px4_work_queue
- In addition to
ModuleBase
, the task should also derive fromScheduledWorkItem
(included from ScheduledWorkItem.hpp (opens new window)) - 在构造函数初始化中指定要添加任务的队列。 The work_item (opens new window) example adds itself to the
wq_configurations::test1
work queue as shown below:WorkItemExample::WorkItemExample() : ModuleParams(nullptr), ScheduledWorkItem(MODULE_NAME, px4::wq_configurations::test1) { }
注解
The available work queues (wq_configurations
) are listed in WorkQueueManager.hpp (opens new window).
- 实现
ScheduledWorkitem:::Run()
方法来执行"work"。 - 实现
task_spawn
方法,指定任务是一个工作队列(使用task_id_is_work_queue
id)。 - 使用其中一种调度方法使工作队列任务开始调度(本例中我们在使用
init
方法中使用ScheduleOnInterval
)。
# 任务
PX4/PX4-Autopilot contains a template for writing a new application (module) that runs as a task on its own stack: src/templates/template_module (opens new window).
该模板演示了完整应用程序所需或有用的以下附加功能/方面:
- 访问参数并对参数更新做出反应。
- 订阅、等待 topic 更新。
- 通过
start
/stop
/status
控制后台运行的任务。module start [<arguments>]
命令可以直接加入 启动脚本 中。 - 命令行参数解析。
- 文档记录:
PRINT_MODULE_*
方法有两个用处(该 API 在 源代码 (opens new window) 中有详细记录):- 它们可用于在控制台键入
module help
指令后输出命令行指令的用法。 - 通过脚本自动提取他们来生成 模块 & 命令参考 页面。
- 它们可用于在控制台键入
← 编写您的第一个应用程序 PX4 架构 →