BetaFlight模块设计之十:磁力计任务分析

  • 磁力计任务
  • taskUpdateMag函数分析
  • compassUpdate函数分析
  • 磁力计配置

基于BetaFlight开源代码框架简介的框架设计,逐步分析内部模块功能设计。

磁力计任务

描述:磁力计主要根据地球磁场感知方向,这里主要用于获取磁力计传感器数据,并通知相关任务或模块。

 ├──> 初始化│   ├──> [v]硬件初始化compassDetect(qmc5883lDetect/qmc5883lInit)/pgResetFn_compassConfig/compassPreInit│   └──> [v]业务初始化compassInit├──> 任务│   ├──> [x]实时任务│   ├──> [x]事件任务│   └──> [v]时间任务[TASK_COMPASS] = DEFINE_TASK("COMPASS", NULL, NULL, taskUpdateMag, TASK_PERIOD_HZ(10), TASK_PRIORITY_LOW),├──> 驱动│   ├──> [v]查询qmc5883lRead│   └──> [x]中断└──> 接口├──> bool compassIsHealthy(void)└──> bool compassIsCalibrationComplete(void)

taskUpdateMag函数分析

配置SENSOR_MAG就执行更新函数compassUpdate,遇到异常重新规划下次任务执行时间rescheduleTask。

taskUpdateMag└──> sensors(SENSOR_MAG)├──> const uint32_t newDeadline = compassUpdate(currentTimeUs);└──> <newDeadline != 0>└──> rescheduleTask(TASK_SELF, newDeadline);

compassUpdate函数分析

这里有个一30秒以上的FlashWrite操作,理论上来说EEFlash的寿命这种强度下,这种飞控场景失败概率不高可忽略。为什么要做这个保存?

注:这里我们Kakute F7 AIO是具备BlackBox的SD卡硬件功能的。

compassUpdate├──> <busBusy(&magDev.dev, NULL) || !magDev.read(&magDev, magADCRaw)> //总线忙或者读取ADC数据失败│   ├──> schedulerIgnoreTaskExecRate│   └──> return 1000 // 1ms├──> [更新三轴ADC数据]├──> <ALIGN_CUSTOM>[alignSensorViaMatrix(mag.magADC, &magDev.rotationMatrix);]├──> <magDev.magAlignment, internal>[alignSensorViaRotation(mag.magADC, magDev.magAlignment);]├──> <第一次loop>[赋值初始化,使用compassConfigMutable()->magZero]├──> <已校准>│   ├──> <30s以内>│   │   ├──> LED0_TOGGLE│   │   └──> 最大值最小值更新│   └──> <超出30s>│       ├──> magZero->raw取最大最小平均值│       └──> saveConfigAndNotify└──> return TASK_PERIOD_HZ(10);

磁力计配置

注:硬件配置\src\main\target\KAKUTEF7\target.h

#define USE_MAG
#define USE_MAG_HMC5883
#define USE_MAG_QMC5883
#define USE_MAG_LIS3MDL
#define MAG_I2C_INSTANCE      I2C_DEVICE

BetaFlight模块设计之十:磁力计任务分析相关推荐

  1. BetaFlight模块设计之十二:电传任务分析

    BetaFlight模块设计之十二:电传任务分析 电传任务 taskTelemetry任务分析 subTaskTelemetryPollSensors函数分析 telemetryProcess函数分析 ...

  2. BetaFlight模块设计之三十五:RSSI信号强度链路稳定性分析

    BetaFlight模块设计之三十五:RSSI信号强度&链路稳定性分析 1. RSSI信号强度 1.1 RSSI Value 1.2 RSSI dBm Value 2. 链路稳定性 3. RS ...

  3. BetaFlight模块设计之三十:Cli模块分析

    BetaFlight模块设计之三十:Cli模块分析 Cli模块 Cli接口 Cli框架 Cli命令结构 主要函数分析 cliProcess函数 processCharacterInteractive函 ...

  4. BetaFlight模块设计之三十四:OSD模块分析

    BetaFlight模块设计之三十四:OSD模块分析 1. OSD模块 1.1 osd状态机子模块 1.2 osd_warnings检查子模块 1.3 osd_elements子模块 2. OSD设备 ...

  5. BetaFlight模块设计之八:GPS任务分析

    BetaFlight模块设计之八:GPS任务分析 GPS任务 gpsUpdate函数分析 gpsNewData函数分析 gpsNewFrame函数分析 onGpsNewData 函数分析 基于Beta ...

  6. BetaFlight模块设计之三十二:MSP协议模块分析

    BetaFlight模块设计之三十二:MSP协议模块分析 1. MSP协议模块 1.1 MSP描述 1.2 MSP版本优缺点 1.3 MSP代码资源 2. MSP报文解析 2.1 MSP收包状态机 2 ...

  7. BetaFlight模块设计之七:LEDSTRIP任务分析

    BetaFlight模块设计之七:LEDSTRIP任务分析 1. LEDSTRIP任务 2. ledStripUpdate函数分析 2.1 StatusProfile 2.2 SimpleProfil ...

  8. BetaFlight模块设计之二:SERIAL任务分析

    BetaFlight模块设计之二:SERIAL任务分析 SERIAL任务 1.总体情况 2.主要函数分析 2.1 taskHandleSerial任务 2.2 命令行处理函数cliProcess 2. ...

  9. BetaFlight模块设计之二十六:接收机任务分析

    BetaFlight模块设计之二十六:接收机任务分析 接收机任务 配置情况 硬件配置 软件配置 驱动配置 sbus驱动函数分析 sbusDataReceive函数 sbusFrameStatus函数 ...

最新文章

  1. java 序列化慢_java原生序列化慢在哪里?
  2. find命令中的-print -exec -ok参数区别
  3. ECEF rectangular coordinate system(ECEF直角坐标系)
  4. centos7 xfce 中文字体输入法
  5. SQL-SqlServer中decimal(numeric )、float 和 real 数据类型的区别[转]
  6. 数学图形(1.49)Nephroid曲线
  7. ORACLE 索引的三种状态: VALID、 N/A 、UNUSABLE
  8. 5 种常见的 CSS 布局,快看看你会几种?
  9. 城市平乱 (dijkstra模板题)
  10. Python闭包基本介绍与作用
  11. 【HIVE 之 DDL,DML】
  12. excel批量删除公式保留数据_Excel公式大批量输入,这几个技巧你一定不能错过...
  13. 蜗牛星际安装U-NAS
  14. HDU 5519(Kykneion asma-NNT+CRT)
  15. oracle lsnrctl status unknown,理解 oracle 的 lsnrctl status
  16. php省市区中文截取
  17. 理解Anchor、RPN真值与预测量、RPN卷积网络
  18. 设计模式之状态机模式
  19. inux中,如何把一个目录及其子目录中的读写权限交给一个普通用户!
  20. db2 reorg到底需要多少表空间

热门文章

  1. 台式电脑F1F2变成音量键怎么办
  2. 学籍管理系统c语言程序设计,c语言学籍信息管理系统设计
  3. 厦大2021届大一小学期C语言作业1 数组+字符串+指针+位操作
  4. (转)(图文详细)win 10禁用F1到F12热键/win10 把F1到F12多媒体键转变为功能键
  5. Android开发框架汇总
  6. c++ HDU 1279 士兵队列训练问题
  7. JavaScript+Css+Html实现网页换皮肤功能
  8. Java之IO,BIO,NIO,AIO知多少?
  9. 计算机科技协会知识竞赛策划书,科协活动策划书
  10. 校园歌手大赛10分c语言,校园歌手大赛策划方案5