当前位置: 首页 > news >正文

BetaFlight代码解析(22)—任务调度器和系统基础架构

本文档介绍了Betaflight的实时任务调度系统和性能监控基础设施。调度器协调所有飞行控制任务、传感器处理、通信和用户界面组件的执行,同时严格满足关键飞行控制回路的时序要求。

概述

Betaflight采用基于优先级的协作式多任务调度器,确保关键飞行控制任务的实时性能,同时高效管理优先级较低的后台操作。该调度器能够为陀螺仪采样和PID控制回路保持微秒级的计时精度。

核心架构

任务管理系统

任务结构和属性

Betaflight 中的任务由两个主要结构定义:task_t运行时状态和task_attribute_t静态配置。

任务优先级系统

调度器采用多级优先级系统,包含静态和动态组件:

优先级价值用法示例
TASK_PRIORITY_REALTIME-1飞行控制关键路径陀螺仪、过滤器、PID
TASK_PRIORITY_HIGH5时间敏感型 I/O处方,调度
TASK_PRIORITY_MEDIUM_HIGH4系统维护主系统
TASK_PRIORITY_MEDIUM3传感器处理加速度、姿态、电池
TASK_PRIORITY_LOW2沟通串行、遥测、OSD
TASK_PRIORITY_LOWEST1后台任务堆栈检查,VTXCTRL

动态优先级计算会根据任务的完成时间增加优先级,以防止任务无人处理:

dynamicPriority = 1 + staticPriority * taskAgePeriods

任务队列管理

调度器维护一个按优先级排序的已启用任务队列:

实时调度引擎

主调度循环

核心调度器以两种不同的模式运行:实时陀螺仪调度和一般任务调度。

陀螺同步计时

调度器与陀螺仪中断保持精确的时间同步:

任务执行和统计

任务执行流程

性能监控

调度器通过多种调试模式提供全面的性能监控:

调试模式测量目的
DEBUG_SCHEDULER检查函数运行时间、优先级排序时间和调度器开销通用调度器性能
DEBUG_SCHEDULER_DETERMINISM陀螺仪计时、延迟任务、计时偏差实时性能分析
DEBUG_TIMING_ACCURACYCPU 利用率、延迟任务统计信息系统负载监控
DEBUG_TASK个人任务统计单项任务绩效分析

系统负载和资源管理

CPU负载计算

调度程序持续监控系统负载,以防止超出负荷:

衰老与饥饿预防任务

调度器实现了任务老化机制,以防止低优先级任务被饿死:

特殊加急排期规则:

  • TASK_AGE_EXPEDITE_RXRX 任务:尝试失败后加快处理
  • OSD 任务:在TASK_AGE_EXPEDITE_OSD尝试失败后加快处理
  • 一般任务:在TASK_AGE_EXPEDITE_COUNT一段时间后加快处理

任务初始化和配置

系统初始化

任务初始化在系统启动过程中分两个阶段进行:

动态任务管理

任务可以在运行时动态启用、禁用和重新调度:

功能目的用法
setTaskEnabled(taskId, enabled)启用/禁用任务执行功能激活/停用
rescheduleTask(taskId, newPeriodUs)改变任务执行率自适应速率控制
getTaskInfo(taskId, &taskInfo)获取任务统计信息性能监控
schedulerResetTaskStatistics(taskId)重置性能计数器统计管理
http://www.cnnetsun.cn/news/22351.html

相关文章:

  • 量子化学:材料的电子态密度
  • 零基础也能做!用Qoder快速开发“技能五子棋”蹭热点项目
  • GitHub加速终极方案:告别龟速访问,体验丝滑编程
  • 【总结】【计组】【OS】页号、页框号、虚拟地址、物理地址、地址
  • 超细整理,性能测试如何做?怎么做?性能压力负载(汇总三)
  • 国外代理IP怎么选?4大标准帮你避坑选优
  • 艾体宝洞察 | 当供应链恶意代码会“二次来袭”:Shai-Hulud 事件下,为什么必须重新审视你的应用安全体系?
  • OpenHarmony环境搭建——02-JDK17安装教程
  • 艾体宝干货 |【Redis实用技巧#4】Redis分布式锁真的安全吗?可靠性深度剖析(Part 2)
  • 21-4. PLC的基本逻辑指令(置位,复位指令)
  • VueScan Pro:专业扫描仪增强软件,支持多品牌设备与高质量OCR识别
  • Kali 必备!Burp Suite 超全教程 网安新手必看
  • 60、深入理解与配置 SSH:安全远程访问的全面指南
  • 视频生成大模型Wan2.2开源:MoE架构重构创作生态,消费级显卡实现电影级视频生成
  • [HNCTF 2022 Week1]easync
  • Ultravox终极指南:10个步骤掌握AI音频生成技术
  • 虎贲等考 AI 科研工具:大学生 / 科研人必备!用 AI 高效搞定学术研究
  • 学习 Python,用哪个编辑器比较好?
  • 如何高效地分析问卷调查的数据?
  • nginx部署前端vue项目(非常详细)零基础入门到精通,收藏这篇就够了
  • 何为前端工程化?一文给你说透前端工程化,收藏这篇就够了
  • 免费学习资源|谷歌 5天AI Agents 强化课程|十一月开课
  • 前端及其技术栈,零基础入门到精通,收藏这篇就够了
  • vscode 前端常用插件推荐,零基础入门到精通,收藏这篇就够了
  • 前端牛马 被优化,二选一
  • 社交媒体用户行为特征与发布时间的关联性
  • 微服务编排引擎Conductor:源码编译与定制化开发实战手册
  • WINCC实现手机 APP 远程监控及短信报警方案
  • 《Python学习手册》第1章 Python概述
  • 西南民族大学软件工程25级研究生赴华清远见成都中心开启元宇宙实训之旅