# 全面应用模块模板
编写的应用程序可以作为 工作 (模块(有自己的堆栈和进程优先级),或作为 工作队列任务 (在工作队列线程上运行的模块,与工作队列中的其他任务共享堆栈和线程优先级)。在大多数情况下,可以使用工作队列任务,因为这样可以最大限度地减少资源占用。
备注
架构概述 > 运行时环境 提供了有关任务和工作队列任务的更多信息。
备注
所有在 首次应用教程 与撰写完整的申请相关。
# 工作队列任务
PX4-Autopilot 包含一个用于编写新应用程序(模块)的模板,该应用程序(模块)以 工作队列任务: src/examples/work_item (打开新窗口).
工作队列任务应用程序与普通(任务)应用程序相同,只是它需要指定自己是工作队列任务,并在初始化过程中安排自己的运行时间。
示例说明了如何操作。总而言之
在 cmake 定义文件中指定对工作队列库的依赖 (CMakeLists.txt (打开新窗口)):
...取决于 px4_work_queue
除了
模块库
因此,该任务还应从计划工作项目
(包括从 ScheduledWorkItem.hpp (打开新窗口))在构造函数初始化中指定要将任务添加到的队列。队列 工作项目 (打开新窗口) 示例将自己添加到
wq_configurations::test1
工作队列,如下图所示:工作项目示例::工作项目示例() : 模块参数(nullptr), 计划工作项目(模块名称, px4::wq_configurations::测试1) { }
备注
可用的工作队列 (
wq_configurations
)列于 WorkQueueManager.hpp (打开新窗口).实施
ScheduledWorkItem::Run()
工作的方法。实施
任务生成
方法,指定任务是一个工作队列(使用任务 ID 是否为工作队列
id.使用其中一种调度方法调度工作队列任务(在示例中,我们使用
ScheduleOnInterval
从启动
方法)。
# 任务
PX4/PX4-Autopilot 包含一个用于编写新应用程序(模块)的模板,该应用程序(模块)可作为任务运行在自己的堆栈中: src/templates/template_module (打开新窗口).
该模板演示了完整应用程序所需或有用的以下附加功能/方面:
- 访问参数并对参数更新做出反应。
- 订阅 uORB 并等待主题更新。
- 通过以下方式控制后台运行的任务
启动
/停止
/地位
.......。模块启动 [<参数>]
命令就可以直接添加到 启动脚本. - 命令行参数解析
- 文件
PRINT_MODULE_*
方法有两个用途(该应用程序接口记录了 在源代码中 (打开新窗口)):- 当输入
模块帮助
在控制台上。 - 它们通过脚本自动提取,以生成 模块和命令参考 page.
- 当输入