BetaFlight飞控启动运行过程简介疑问跟踪

news2024/11/24 0:37:10

BetaFlight飞控启动&运行过程简介疑问跟踪

  • 1. 源由
  • 2. 【已解+存疑】问题一:6.1 Why desiredPeriodCycles is so important to Betaflight task?
  • 3. 【已解】问题二:6.2 What root cause has made gyro task to been overrun, so scheduler has to skip a gyro cycle?
  • 4. 【已解】问题三:6.3 What if serial task is running quite long, which corrupt gyro cycle, is it a problem?
  • 5. 【已解+存疑】问题四:6.4 What does the condition of "scheduleCount & SCHED_TASK_DEFER_MASK == 0" stand for in scheduler?
  • 6. 总结
  • 7. 参考资料

1. 源由

之前研读BetaFlight飞控启动&运行过程简介提出了四个问题,该问题也在BetaFlight开发组内进行了咨询和讨论。

针对这些问题,这里做一个统一的进度跟踪和答案的整理。

2. 【已解+存疑】问题一:6.1 Why desiredPeriodCycles is so important to Betaflight task?

Let’s say default desiredPeriodCycles is about 8K, which 125us. And the code still check desiredPeriodCycles by GYRO_RATE_COUNT interrupts, what’s the story here?

If sample rate is NOT sync with gyro task, there might be dirty/invalid data, is there any bad thing happens if just missed 1 or 2 valid samples?

Or this code only tends to logically eliminate this effective data sampling bias?

目前获取gyro数据大致有两种方式

  1. CPU控制的SPI总线通信
  2. DMA控制器SPI总线通信

总体来说,DMA控制器可以节省系统资源(CPU,总线,内存等)。

注:这里通过CPU控制的SPI总线通信来获取gyro数据的过程我们就不在赘述,因为那比较容易理解。

为了更好的利用DMA控制器,scheduler做了一个精准对时的操作。
其有以下几个主要动作:

  1. 通过物理中断记录传感器数据有效时间: mpuIntExtiHandler/gyro->gyroLastEXTI/GYRO_RATE_COUNT(25000)
  2. 通过DMA回调记录内存数据有效时间: mpuIntcallback/gyro->gyroDmaMaxDuration
  3. 通过terminalGyroRateCount(GYRO_RATE_COUNT)更新一次desiredPeriodCycles
  4. 通过terminalGyroLockCount/GYRO_LOCK_COUNT(50)做了一个指数级时刻同步回归
  5. 通过SCHED_START_LOOP_MIN_US/SCHED_START_LOOP_MAX_US/schedLoopStartCycles(SCHED_START_LOOP_MIN_US)做一个弹性边界控制

目前从提供的逻辑分析仪给出的有限时间分析看mpuIntExtiHandler/mpuIntcallback/mpuGyroReadSPI的时刻点没有太多问题。

疑问:

从实际截图看,gyro中断mpuIntExtiHandler并不规则等时间段分布,存在较大的偏差。
是否可能存在desiredPeriodCycles存在偏差时正好出现mpuGyroReadSPI在mpuIntcallback时刻之前。
鉴于目前gyro数据尚不是double buffer配置,所以如果出现上述情况,可能导致gyro脏数据或者前一次采样数据的情况发生。

截图来自参考资料2注:截图来自参考资料【2】。

3. 【已解】问题二:6.2 What root cause has made gyro task to been overrun, so scheduler has to skip a gyro cycle?

As scheduler comments "A task has so grossly overrun that at entire gyro cycle has been skipped, especially via USB as the serial.

Is there too much serial communication through bf configurator and FC or just USB-VCP code on FC side take a lot of resources?

It’ll be the same issue when switching to TTL comunication with FC (suggest test bf-configurator <> usb_serial convertor <> FC(UART1 for example)?

该情况主要出现在USB VCP数据传输导致的问题。主要场景是电脑配置工具通过USB与飞控相连进行配置。

当仅仅使用串口进行通信无上述问题。

4. 【已解】问题三:6.3 What if serial task is running quite long, which corrupt gyro cycle, is it a problem?

As previous discussion on “Why desiredPeriodCycles is so important during Betaflight task?”

e.g. use MSP protocol as communication channel with companion computer
==> there are lots of packets, result in long time processing.
==> if this happens, it seems mess up with the gyro cycle, am i right? is there any solution or way to overcome this issue?

Code

如前面问题二所述,目前看上述情况不存在问题。

5. 【已解+存疑】问题四:6.4 What does the condition of “scheduleCount & SCHED_TASK_DEFER_MASK == 0” stand for in scheduler?

Code

There are three scenarios for normal(except gyro/acc/pid) tasks to execute:

  1. taskRequiredTimeCycles < schedLoopRemainingCycles // there is time for task to execute.
  2. scheduleCount & SCHED_TASK_DEFER_MASK == 0 //???
  3. (task - tasks) == TASK_SERIAL // ok, special case for serial

So what’s for case #2 “scheduleCount & SCHED_TASK_DEFER_MASK == 0”

为了处理RC代码表现不佳的事实,花了很多时间在它的检查程序上,时间非常不可预测。

疑问:

该具体场景为给出答复。显然可能存在一些异常问题,需要更加明确澄清。

6. 总结

上述问题基本已经得到回复,虽然有些问题尚有存疑部分。显然很多历史的问题,并不一定都是能寻根究底的。我们暂且考一段落,希望能有更加明确的场景和rootcause给出,以便工程角度更好的分析和定位问题。

这也是我通常比较强调的为什么很多事情要搞清楚rootcause的原因。相信上面的问题是有这些内容的,但是需要挖掘出来,需要和真正处理的当事人非常紧密和深入的探讨。当然这样也就为后面设计和重构提供了基础。

7. 参考资料

【1】BetaFlight飞控启动&运行过程简介
【2】Perform SPI read of gyro/acc using DMA triggered by EXTI interrupt #10573

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/535293.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

轮式机械臂小车实现语音控制

1. 功能说明 本文实例将实现语音控制R214e样机运动&#xff08;前进、后退、左转、右转、拿起、放下&#xff09;的功能。 2. 电子硬件 在这个示例中&#xff0c;我们采用了以下硬件&#xff0c;请大家参考&#xff1a; 主控板 Basra主控板&#xff08;兼容Arduino Uno&#x…

港科夜闻|推进湾区产学研融合发展,香港科大(广州)—广州市属国企校企合作专题交流会圆满举行...

关注并星标 每周阅读港科夜闻 建立新视野 开启新思维 1、推进湾区产学研融合发展&#xff0c;香港科大(广州)—广州市属国企校企合作专题交流会圆满举行。本次交流会由香港科大(广州)、广州市人民政府国有资产监督管理委员会主办&#xff0c;越秀集团协办&#xff0c;旨在充分发…

springboot+jsp网上图书商城销售系统java

开发环境 开发语言&#xff1a;Java 框架&#xff1a;springboot 技术&#xff1a;JSP JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven…

ubuntu 20.04虚拟内存

ubuntu 20.04虚拟内存 1. 查看自己的虚拟内存 使用top命令或者使用free命令 2. 创建虚拟内存配置文件 # 新建文件夹 cd ~ mkdir swap cd swap# bs 为块的大小&#xff0c;count 创建多少个块 sudo dd if/dev/zero ofswapfile bs1M count2048# 修改权限 sudo chmod 0600 …

系统分析师:六、企业信息化战略与实施 练习题

目录 1、十二五的七大国家战略新兴产业体系 2、标准化的三个方面 3、信息的属性 4、电子政务描述 5、数据产品管理 6、企业门户 7、企业应用集成 8、电子商务标准体系 9、电子商务标准范畴 10、知识管理显性和隐形知识 11、决策支持系统 12、CRM解决方案 13、CRM核…

用Vue写教务系统学生管理

文章目录 一.首先创建新的Demo二.在APP里面绑定DemoStudent三.源码附上四.效果图&#xff08;新增记录还未实现&#xff09; 一.首先创建新的Demo 二.在APP里面绑定DemoStudent <template><img alt"Vue logo" src"./assets/logo.png"><!--…

华为OD机试真题 Java 实现【最小的调整次数】【2023Q1 100分】

一、题目描述 有一个特异性的双端队列&#xff0c;该队列可以从头部或尾部添加数据&#xff0c;但是只能从头部移出数据。 小A依次执行2n个指令往队列中添加数据和移出数据。 其中n个指令是添加数据 (可能从头部添加、也可能从尾部添加)&#xff0c;依次添加1到n&#xff0c…

超稳定ChatGPT镜像网站,小白适用,赶紧收藏【持续更新中】

&#x1f482;作者简介&#xff1a; THUNDER王&#xff0c;一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学会计学专业大二本科在读&#xff0c;同时任汉硕云&#xff08;广东&#xff09;科技有限公司ABAP开发顾问。在学习工作中&#xff0c;我通常使用偏后…

无代码开发引路,重塑企业数字生产力

互联网时代&#xff0c;信息的传递与共享成为企业运营的核心环节。传统的软件开发模式已经不能满足企业数字化转型的需要&#xff0c;而无代码开发平台可以在不改变底层技术架构的前提下&#xff0c;提供一种高效、低成本、灵活、易用的软件开发解决方案。相较于传统代码编写&a…

[山海关crypto 训练营 day13]

日常鼓励自己&#xff1a;世界上只有想不通的人&#xff0c;没有走不通的路。 [长安杯 2021]checkin 题目代码和数据 from Crypto.Util.number import * from secret import flag p getPrime(1024) q getPrime(16) n p*q m bytes_to_long(flag) for i in range(1,p-q):m…

事务AOP

事务&AOP 事务管理 在数据库中我们已经学过事务了。 事务是一组操作的集合&#xff0c;它是不可再分的工作单位。事务会把所有的操作作为一个整体&#xff0c;一起向数据库提交或者撤销操作请求。所以这组操作要么是同时成功&#xff0c;要么同时失败。 事务的操作主要…

【共用体和枚举】

共用体 一种构造类型的数据结构 共用体和结构体类似&#xff0c;也是一种构造类型的数据结构。 既然是构造类型的&#xff0c;就需要先定义出类型&#xff0c;然后用类型定义变量。 定义共用体类型的方法和结构体非常相似&#xff0c;把struct 改成union 就可以了。 在进行某…

美颜SDK的应用与优化:一次全面探究

在直播过程中&#xff0c;美颜技术可以帮助主播实现更好的视觉效果&#xff0c;从而吸引更多的关注和粉丝。因此&#xff0c;直播美颜SDK的应用和优化已经成为了直播行业中的一个重要研究方向。 一、直播美颜SDK的应用 1. 美颜滤镜 美颜滤镜是直播美颜SDK中最常用的一种技术…

【Mybatis】Mybatis处理一对多、多对多关系映射-四

唠嗑部分 上篇文章我们说了Mybatis中ORM映射的几种方式&#xff0c;相关文章&#xff1a; 【Mybatis】简单入门及工具类封装-一 【Mybatis】如何实现ORM映射-二 【Mybatis】Mybatis的动态SQL、缓存机制-三 这篇文章我们来说说Mybatis如何处理一对一、一对多、多对多的关系映射…

Linux下网络编程(2)——socket的函数们

accept()函数 服务器调用 listen()函数之后&#xff0c;就会进入到监听状态&#xff0c;等待客户端的连接请求&#xff0c;使用 accept()函数获取客户端的连接请求并建立连接。函数原型如下所示&#xff1a; int accept(int sockfd, struct sockaddr *addr, socklen_t *addrle…

RK3588光电载荷处理板研制进展

本来就是一个很小众的市场&#xff0c;但是偶尔也会有同行询问&#xff0c;这儿就简单汇报一下后期的进展 板子已经开发完成&#xff0c;并有幸得到了两个订单&#xff0c;虽然量不是很大&#xff0c;但是也很开心由于一段时间的努力和付出&#xff0c;将该设备应用在了国防事业…

【Linux】Linux文件目录结构

Linux文件目录结构 在 Linux 中&#xff0c;其文件目录结构是一颗类似于多叉树的结构&#xff0c;所有目录都在 / &#xff08;根目录&#xff09;下面&#xff0c;每个非叶节点代表一个目录&#xff0c;叶节点代表文件。 一般结构如下所示&#xff1a; usr :“Unix Software …

LitCTF 2023 - crypto复现

文章目录 Hex&#xff1f;Hex&#xff01;梦想是红色的原来你也玩原神factordbP_Leake的学问Euler* Where is P?The same common divisormd5babyLCG* easy_math* Virginia* Is this only base?你是我的关键词(Keyworld)隐晦的聊天记录* baby_xor收获与体会 Hex&#xff1f;He…

RabbitMQ入门 安装 SpringAMQP简单队列、工作队列、发布订阅(扇出模式,广播模式)、Direct模式(Roting模式)、Topic模式

一、RabbitMQ介绍 1. MQ介绍 1. 为什么要有MQ 同步调用与异步调用 程序里所有的通信&#xff0c;有两种形式&#xff1a; 同步通信&#xff1a;通信时必须得到结果才会执行下一步 异步通信&#xff1a;通信时不必等待结果&#xff0c;可以直接处理下一步 同步调用 解析&…

IPWorks EDI 2022 .NET Edition 22.0.8 Crack

IPWorks EDI基于用于安全 EDI 通信&#xff08;AS2、SFTP、OFTP、RosettaNet、MLLP 等&#xff09;的领先 EDI-INT 协议&#xff0c;IPWorks EDI 库包含促进安全 EDI 消息传递以及 EDI 映射、翻译和验证&#xff08;X12、 EDIFACT、HL7、TRADACOMS、VDA、XML 和 JSON&#xff0…