参考文献
https://blog.youkuaiyun.com/guanzhiyuan1994/article/details/51327451
前言
本文主要介绍Ardupilot任务调度,Ardupilot通过定时器定时调度一系列任务实现任务调度
一、定义任务
Ardupilot程序与arduino的形式类似,包含一个setup()函数与一个loop()函数。setup()只执行一次,loop()函数在setup()函数执行后循环执行。
为了执行任务首先要将任务定义出来。在ArduCopter.cpp程序中,首先在 AP_Scheduler::Task Copter::scheduler_tasks[]中定义了一系列要完成的任务。
第一个参数是要调用的函数,
第二个参数通过定义tick的个数(一个tick为1/400Hz=2.5ms)来定义执行的频率。
第三个参数为该任务的最大执行时间,这在后面scheduler.run(time_available)函数中将用来判断是否要继续执行该任务。
二、任务调度
1.run函数调用
代码如下(示例):
这些AP_Scheduler::Task Copter::scheduler_tasks[]数组中定义的任务将在loop()函数中scheduler.run(time_available)语句中被执行。
进入scheduler.run()函数中,for (uint8_t i=0; i<_num_tasks; i++)表示飞控程序并没有设置这些任务的优先级,而是从第一个任务开始,使用一个for循环依次向下执行。
\libraries\AP_Sc