BetaFlight模块设计之十:磁力计任务分析
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模块设计之十:磁力计任务分析相关推荐
- BetaFlight模块设计之十二:电传任务分析
BetaFlight模块设计之十二:电传任务分析 电传任务 taskTelemetry任务分析 subTaskTelemetryPollSensors函数分析 telemetryProcess函数分析 ...
- BetaFlight模块设计之三十五:RSSI信号强度链路稳定性分析
BetaFlight模块设计之三十五:RSSI信号强度&链路稳定性分析 1. RSSI信号强度 1.1 RSSI Value 1.2 RSSI dBm Value 2. 链路稳定性 3. RS ...
- BetaFlight模块设计之三十:Cli模块分析
BetaFlight模块设计之三十:Cli模块分析 Cli模块 Cli接口 Cli框架 Cli命令结构 主要函数分析 cliProcess函数 processCharacterInteractive函 ...
- BetaFlight模块设计之三十四:OSD模块分析
BetaFlight模块设计之三十四:OSD模块分析 1. OSD模块 1.1 osd状态机子模块 1.2 osd_warnings检查子模块 1.3 osd_elements子模块 2. OSD设备 ...
- BetaFlight模块设计之八:GPS任务分析
BetaFlight模块设计之八:GPS任务分析 GPS任务 gpsUpdate函数分析 gpsNewData函数分析 gpsNewFrame函数分析 onGpsNewData 函数分析 基于Beta ...
- BetaFlight模块设计之三十二:MSP协议模块分析
BetaFlight模块设计之三十二:MSP协议模块分析 1. MSP协议模块 1.1 MSP描述 1.2 MSP版本优缺点 1.3 MSP代码资源 2. MSP报文解析 2.1 MSP收包状态机 2 ...
- BetaFlight模块设计之七:LEDSTRIP任务分析
BetaFlight模块设计之七:LEDSTRIP任务分析 1. LEDSTRIP任务 2. ledStripUpdate函数分析 2.1 StatusProfile 2.2 SimpleProfil ...
- BetaFlight模块设计之二:SERIAL任务分析
BetaFlight模块设计之二:SERIAL任务分析 SERIAL任务 1.总体情况 2.主要函数分析 2.1 taskHandleSerial任务 2.2 命令行处理函数cliProcess 2. ...
- BetaFlight模块设计之二十六:接收机任务分析
BetaFlight模块设计之二十六:接收机任务分析 接收机任务 配置情况 硬件配置 软件配置 驱动配置 sbus驱动函数分析 sbusDataReceive函数 sbusFrameStatus函数 ...
最新文章
- java 序列化慢_java原生序列化慢在哪里?
- find命令中的-print -exec -ok参数区别
- ECEF rectangular coordinate system(ECEF直角坐标系)
- centos7 xfce 中文字体输入法
- SQL-SqlServer中decimal(numeric )、float 和 real 数据类型的区别[转]
- 数学图形(1.49)Nephroid曲线
- ORACLE 索引的三种状态: VALID、 N/A 、UNUSABLE
- 5 种常见的 CSS 布局,快看看你会几种?
- 城市平乱 (dijkstra模板题)
- Python闭包基本介绍与作用
- 【HIVE 之 DDL,DML】
- excel批量删除公式保留数据_Excel公式大批量输入,这几个技巧你一定不能错过...
- 蜗牛星际安装U-NAS
- HDU 5519(Kykneion asma-NNT+CRT)
- oracle lsnrctl status unknown,理解 oracle 的 lsnrctl status
- php省市区中文截取
- 理解Anchor、RPN真值与预测量、RPN卷积网络
- 设计模式之状态机模式
- inux中,如何把一个目录及其子目录中的读写权限交给一个普通用户!
- db2 reorg到底需要多少表空间
热门文章
- 台式电脑F1F2变成音量键怎么办
- 学籍管理系统c语言程序设计,c语言学籍信息管理系统设计
- 厦大2021届大一小学期C语言作业1 数组+字符串+指针+位操作
- (转)(图文详细)win 10禁用F1到F12热键/win10 把F1到F12多媒体键转变为功能键
- Android开发框架汇总
- c++ HDU 1279 士兵队列训练问题
- JavaScript+Css+Html实现网页换皮肤功能
- Java之IO,BIO,NIO,AIO知多少?
- 计算机科技协会知识竞赛策划书,科协活动策划书
- 校园歌手大赛10分c语言,校园歌手大赛策划方案5