这种飞控系统的代码太长,而且还有RTOS在里面.我看源码也不知道怎么办,就是一步一步的来吧.会使用很多工具来辅助这个过程.
这个是官方开发流程的一小部分,就是飞控系统的启动流程
https://docs.espressif.com/projects/espressif-esp-drone/zh_CN/latest/_static/start_from_app_main.pdf
高清大图的地址我放在这里了
大体思路也是从main函数开始入手,看各个模块是如何互相作用的.
首先看这一段
NVS总的来说,就是非易失性存储,类似MCU EEPROM,但实际上调用ESP32这些函数,数据是存储在FLASH中的。
它的管理方式类似数据库的表,在NVS里面可以存储很多个不同的表,每个表下面有不同的键值,每个键值可以存储8位,16位,32位等等不同的数据类型,但不能是浮点数。
初始化:
调用“nvs_flash_init();”,如果失败可调用“nvs_flash_erase()”擦除NVS,然后再次初始化。
也就是这个API的返回值可以看到是有很多种类型,我们肯定是希望返回OK的
初始化值以后,带着这个ret一直向下判断,首先于运算判断两次错误代码,如果成立.
执行这个宏,检查错误代码.或者更清楚一点是检查擦除分区的情况
可以看到是两个值.ok就继续.负责就CHECK宏输出错误信息
重新初始化的值给了ret
继续让CHECK函数看看是不是初始化成功
以防还是没有正确初始化flash
此为上面两个错误代码
经过搜索,这样的代码只初始化一次
接着应该看一下头文件
接着看这些,存储器搞定以后就是要初始化平台
因为这个飞控代码是抄开源的,源平台是STM32,现在是ESP32
你看它的位置,说明它是组件
我们来看这个代码的内容
一个stdio.h.标准输出输入
一个相应的平台头文件
就是这个头
细看这个,一开始的条件编译没有什么好说的,就是防止重复头
下面两个头文件,不能再跳了,否则我嵌套太深了
气压传感器
霍尼韦尔 HMC5883L 是一种表面贴装的高集成模块,并带有数字接口的弱磁传感器芯片,应用于低成本罗盘和磁场检测领域。HMC5883L 包括最先进的高分辨率HMC118X系列磁阻传感器,并附带霍尼韦尔专利的集成电路包括放大器、自动消磁驱动器、偏差校准、能使罗盘精度控制在1°~2°的12位模数转换器。简易的I2C 系列总线接口。HMC5883L 是采用无铅表面封装技术,带有16引脚,尺寸为3.0X3.0X0.9mm。HMC5883L 的所应用领域有手机、笔记本电脑、消费类电子、汽车导航系统和个人导航系统。
HMC5883L 采用霍尼韦尔各向异性磁阻(AMR)技术,该技术领先于其他磁传感器技术。这些各向异性传感器具有在轴向高灵敏度和线性高精度的特点。传感器具有的对正交轴的低灵敏度的固相结构能用于测量地球磁场的方向和大小,其测量范围从毫高斯到 8 高斯(gauss)。霍尼韦尔的磁传感器在低磁场传感器行业中是灵敏度最高和可靠性最好的传感器。这里有三个传感器三个,IMU一个,磁场定位以恶搞,气压一个,三个传感器
大量出现枚举,说下枚举:枚举(enum)通过一种简单的途径,把一串名字与一串整形值联系在一起。可以代替#define声明.
枚举一般形式:enum 可选标签{ 内容.....}可选定义变量定义;其中“”内容.....”是一些标识符的列表,可能有一些整型值赋给它们.
此处是:用typedef关键字将枚举类型定义成别名,并利用该别名进行变量声明:
typedef enum
{
SensorImplementation_bmi088_bmp388,
SensorImplementation_bmi088_spi_bmp388,
SensorImplementation_mpu9250_lps25h,
SensorImplementation_mpu6050_HMC5883L_MS5611,
SensorImplementation_bosch,
SensorImplementation_COUNT,
} SensorImplementation_t;
3篇文章,有点写写下去了,剩下的未完待续