前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ESP-drone源码分析.1

ESP-drone源码分析.1

作者头像
云深无际
发布2021-01-18 10:47:06
7160
发布2021-01-18 10:47:06
举报
文章被收录于专栏:云深之无迹云深之无迹

这种飞控系统的代码太长,而且还有RTOS在里面.我看源码也不知道怎么办,就是一步一步的来吧.会使用很多工具来辅助这个过程.

这个是官方开发流程的一小部分,就是飞控系统的启动流程

代码语言:javascript
复制
https://docs.espressif.com/projects/espressif-esp-drone/zh_CN/latest/_static/start_from_app_main.pdf

高清大图的地址我放在这里了


大体思路也是从main函数开始入手,看各个模块是如何互相作用的.

首先看这一段


ESP32的NVS使用指南

  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关键字将枚举类型定义成别名,并利用该别名进行变量声明:


代码语言:javascript
复制
typedef enum{#ifdef SENSOR_INCLUDED_BMI088_BMP388    SensorImplementation_bmi088_bmp388,#endif
#ifdef SENSOR_INCLUDED_BMI088_SPI_BMP388    SensorImplementation_bmi088_spi_bmp388,#endif
#ifdef SENSOR_INCLUDED_MPU9250_LPS25H    SensorImplementation_mpu9250_lps25h,#endif
#ifdef SENSOR_INCLUDED_MPU6050_HMC5883L_MS5611    SensorImplementation_mpu6050_HMC5883L_MS5611,#endif
#ifdef SENSOR_INCLUDED_BOSCH    SensorImplementation_bosch,#endif    SensorImplementation_COUNT,} SensorImplementation_t;
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-01-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 云深之无迹 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • ESP32的NVS使用指南
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档