每天读一点儿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是算法
  • 6
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值