ArduPilot 学习之路 - 6,线程
英文原文地址:https://ardupilot.org/dev/docs/learning-ardupilot-threading.html
理解 ArduPilot 线程
线程时 ArduPilot 运行的核心概念,setup() / loop() 结构来源于 Arduino,使得 ArduPilot 系统看起来更像是单线程系统,但事实并非如此。
ArduPilot 中的线程处理方法取决于其所运行的主板。有些主板(例如APM1和APM2)不支持线程,因此可以使用简单的计时器和回调。某些主板(PX4和Linux)支持具有实时优先级的丰富Posix线程模型,ArduPilot广泛使用了这些模型。
ArduPilot 线程主要涉及到如下关键概念:
- The timer callbacks 定时器回调
- HAL specific threads HAL特定线程
- driver specific threads 驱动程序特定线程
- ardupilot drivers versus platform driversardupilot 驱动程序与平台驱动程序
- platform specific threads and tasks 平台特定的线程和任务
- the AP_Scheduler system AP_调度系统
- semaphores 信号量
- lockless data structures 无锁数据结构
1,定时器回调(The timer callbacks)
每个平台在 AP_HAL 中都提供一个1kHz计时器。 ArduPilot 中的任何代码都可以注册一个计时器功能,然后以1kHz的频率调用该功能。所有已注册的计时器功能均被依次调用。这种机制很原始,但是它具备很强的移植性,而且非常有用。您可以通过调用 hal.scheduler-> register_timer_process()来注册计时器回调,如下所示:
![]()
该示例来自MS5611气压计驱动程序。 AP_HA

ArduPilot的线程处理取决于主板,包括定时器回调、HAL特定线程、驱动程序特定线程等。定时器回调以1kHz频率执行,HAL线程如UART、计时器和IO线程在支持线程的平台上运行。驱动程序线程处理异步任务,如Linux端口的ToneAlarm。区分ArduPilot和平台驱动程序,以便在不同硬件上运行。平台特定线程如PX4的idle、init等任务。AP_Scheduler系统用于在主无人机线程中分配任务,确保任务执行的高效和安全。
最低0.47元/天 解锁文章
1821

被折叠的 条评论
为什么被折叠?



