每天读一点儿APM(PIX)代码之一:调度总线AP_Scheduler

    今天我们来聊聊Ardupilot的调度总线机制。
    任何程序都有自己的调度总线,事务性程序一般有一个监听线程,当监听到触发条件后,调度出事务处理线程执行功能;算法密集类程序往往是精妙设计的若干层循环函数,亦或巧妙分布的若干个计算线程;交互类程序则都会专门分配一个界面线程以保证用户流畅的体验。
    对于APM飞控而言,他的调度机制有以下两个特点:
    1.事务性
        飞控算法可以看作若干事务性算法的集合。每个算法都按照不同的频率循环,针对外界刺激产生响应。各事务性算法之间也有先后关系,某些算法的输出是某些算法的输入,但是这种关联较少。
    2.单线程
        单片机仅仅提供了单线程的运行模式,所以APM飞控无法调用附属线程,无法采用定时器进行周期性工作。
        因为这种特点,apm的调度总线,在单线程逻辑的基础上,通过时分复用的方式运行多个功能算法,通过若干机制,控制这些算法的循环频率和先后顺序。为了确保整体循环的流畅性和完整性,还具有防止某些能算法的超时,对飞控产生多米诺骨牌崩盘一般的恶劣影响。
        我们看以下AP_Scheduler.h的代码中对于一个任务(功能算法)的定义
struct Task {
        task_fn_t function;
        uint16_t interval_ticks;
        uint16_t max_time_micros;
    };
对于每一个任务结构体,其中
    function是算法

你可能感兴趣的:(Apm,APM,pix,arduino,无人机,飞行器)