BF固件:代码分布结构

2022-11-25 17:30:07 浏览数 (1)

开新坑:betaflight源码分析(开坑篇)

BF固件:阅读前准备(Wiki细读)

BF固件:Multi WiiCopterh固件(PID调参)

这份代码是更新了很多次才成为现在的模样,里面的一些写法,追溯起来可以追到之前的一些历史的问题,这篇文章呢,先把库里面的代码结构说明白,先看库,然后再看逻辑。

我之后会把我精简的代码上传:

现在的目录应该是这样的

在里面的目录里面也可以找到mk的编译文件

SITL(software in the loop)软件在环仿真,后面的是一些依赖的芯片,可以看到最次的都是F4的芯片了。

在lib里面是依赖的一些关于外部的库,第一个库就是博世

方形的样子

一个简单的数据参数

该库用于支持Bosch BMI270 陀螺仪传感器。BMI270 是一款小型、低功耗、低噪声惯性测量单元,设计用于需要高精度、实时传感器数据的移动应用,如增强现实或室内导航。目前飞控里面使用这个传感器的也是一些较为高档的型号。

代码语言:javascript复制
drivers/accgyro/accgyro_spi_bmi270.c

这里就定位一下代码里面实际的位置

库下载位置:

代码语言:javascript复制
 https://github.com/BoschSensortec/BMI270-Sensor-API

版本:2.63.1

作为 Betaflight 的一部分编译的唯一文件是 bmi270_maximum_fifo.c。

该文件包含初始化期间必须上传的设备。

上面这个文件的头就是这样的,可以看到是和驱动强相关的

Dyad 是一个基于 C 语言的异步网络库,旨在轻量级、可移植和易用。它既可用于创建小型独立服务器,也可用于为现有的项目提供网络支持。

很少的实现文件

Open Location Code 是一种技术,它提供了一种将位置编码为比纬度和经度更易于使用的形式的方法。生成的代码称为加号,因为它们的区别属性是它们包含一个“ ”字符。

该技术旨在生成可用于替代街道地址的代码,特别是在建筑物没有编号或街道没有命名的地方。

加号代表一个区域,而不是一个点。随着数字添加到代码中,区域缩小,因此长代码比短代码更精确。

相似的代码比不同的代码更靠近。

位置可以转换为代码,代码可以完全离线转换回位置。

无需查找数据表或需要在线服务。该算法是公开的,可以不受限制地使用。

Google的一种地图编码技术

欢迎来找我

这个是遥测的库,很出名,之后写

关于测试是软件编写的最后一个阶段,到底能不能使用在此会有结果

这个是其中的一个测试的程序

在源码里面也有4个人目录,链接文件,主的项目文件,还有测试的使用的文件夹,以及大家共同依赖的文件。

可以看到这个编译的ld文件是很多的,这个也没有啥好说的

main文件是我嘴关注的地方,在下面是具体不同的文件目录

build 版本号,断言,调试,编译等相关配置

cms OSD、灯带等内容管理

config 配置管理

fc 飞控功能,包括初始化、任务、设置等

main.c 主程序入口

msp Multiwii Serial Protocol

navigation 导航相关

scheduler 调度程序

startup 汇编初始化硬件

uav_interconnect

vcp 虚拟串口(Virtual COM Port)功能

vcpf4 F4的虚拟串口功能

blackbox 飞机的黑匣子,记录飞行日志

common 通用工具类

drivers 不同传感器、IO、总线等的驱动程序

flight 飞行相关程序,包括失控、风速评估、混合、PID等

io 输入输出程序

platform.h F3、F4、F7等相关的宏定义

rx 接收机相关程序

sensors 传感器程序

target 不同的飞控板编译不同的程序

telemetry 天线

vcp_hal 虚拟串口的硬件抽象层

以上这些就是大概的对目录的一个解释。

这个是启动文件

删除的汇编的样子

虚拟串口

这个就是黑盒的一个叠加层的样子

这个是黑盒记录器,把飞机上面的数据保存下来

代码语言:javascript复制
https://github.com/cleanflight/blackbox-tools

解码工具

这个是使能黑盒记录器的宏

可以储存的介质

这个是相当于一个优先级

黑盒的配置的结构体

速率

模式

这个就是编译文件目录

这个是cil的文件夹,就是我们的串口连接,就是后面上传的配置啥的

这个是条件编译,可以使用debug的功能

通过连续跳转,定位到最终的实现是这里

这个实现我看不懂了

随便看一个写的什么

在具体的C实现里面,可以大量的文件都在这里汇集

设置同步

基于串口的RX协议

使用SPI接口的RX接收机

还有灯光的调色方式

common是就像工具箱一样的结构,这个好看

坐标轴的定义

飞起来的方向定义

穿越机是和硬件强相关的,这里肯定有大量的硬件驱动

在里面是按照一些定义的方式来写的

这个是电机的协议

正经飞控的实现是这么多,算法层面的东西

这是算法运算完,如何驱动硬件

RX协议

任务驱动

这个里面是已经注册的飞控(也不是注册)

里面是大量的硬件IO的map

还有各种的遥测协议

还有很多的我都搞不明白是干啥的,继续研究。

这里开箱一个深圳科创学院的录取通知书:

右上是我贴的相机贴扣下来的东西

给我的相机贴上蒙皮

里面就这些东西,左边是一些小装饰

最重要的就是这个

还有一个小塑料牌子

打马赛克的同学

上面的蒙皮

下面有个公仔

有点小

其次就是可能一开始就写这个穿越机,会步子大扯到蛋,我接下来可能会选择更加单纯的FC进行研究。

见过什么叫杂乱无章吗?我告诉你

代码语言:javascript复制
https://google.github.io/googletest/
代码语言:javascript复制
https://github.com/google/open-location-code
代码语言:javascript复制
https://github.com/BoschSensortec/BMI270-Sensor-API
代码语言:javascript复制
https://www.bosch-sensortec.com/media/boschsensortec/downloads/datasheets/bst-bmi270-ds000.pdf
代码语言:javascript复制
https://www.bosch-sensortec.com/products/motion-sensors/imus/bmi270.html
代码语言:javascript复制
https://github.com/google/googletest

0 人点赞