https://ardupilot.org/dev/docs/learning-ardupilot-threading.html
现在你对ardupilot的库已经有基本的理解了,现在我们来理解下ardupilot如何处理线程的。看到源码中继承自arduino的setup loop之类的函数,你可能以为ardupilot是个单线程的系统,但事实上,ardupilot是多线程的。
ArduPilot中的线程处理方法取决于它的板上的硬件。有些板子(比如apm1 apm2)并不支持线程,只有一个简单timer回调函数。 有些板子(PX4 LINUX)支持带实时优先级的多Posix 线程模型; ardupilot正是使用的这种线程机制。
在Ardupilot中,你需要理解一些关键的和线程相关的概念。
- The timer callbacks 定时器回调
- HAL specific threads 硬件抽象层专属线程
- driver specific threads 驱动专属线程
- ardupilot drivers versus platform drivers ardupilot 驱动vs平台驱动
- platform specific threads and tasks 平台专属线程和任务
- the AP_Scheduler system
- semaphores 信号量
- lockless data structures 无锁数据结构