# 02 Code Architecture And Startup Process

| 文章更新版本 | 时间                     | 备注             |
| ------ | ---------------------- | -------------- |
| V1.0   | 发布于2019-10-30 17:30:53 | 初始版本           |
| V1.1   | 更新于2020-01-13 11:10:16 | 修改app\_main结构图 |

## 一、工程目录结构

### 1. 总目录结构

ESPlane2.0基于esp\_idf `release/v3.3` 和Crazyflie`master:commit 13aa1372bc3ba5b14922fc2f9d8999270882021a` (\[[https://github.com/qljz1993/crazyflie-firmware.git).按照IDF编写风格,以组件的形式组织整个代码工程,其中main中包含app\_main函数,用于启动整个工程.components文件夹包含工程中修改的一些esp\_idf组件(未修改的组件默认从IDF\_PATH查找),各个传感器驱动,硬件抽象层(hal),飞控程序模块(modules)等:\](https://github.com/qljz1993/crazyflie-firmware.git%29.按照IDF编写风格,以组件的形式组织整个代码工程,其中main中包含app\_main函数,用于启动整个工程.components文件夹包含工程中修改的一些esp\_idf组件%28未修改的组件默认从IDF\_PATH查找%29,各个传感器驱动,硬件抽象层(hal),飞控程序模块(modules)等](https://github.com/qljz1993/crazyflie-firmware.git\).%E6%8C%89%E7%85%A7IDF%E7%BC%96%E5%86%99%E9%A3%8E%E6%A0%BC,%E4%BB%A5%E7%BB%84%E4%BB%B6%E7%9A%84%E5%BD%A2%E5%BC%8F%E7%BB%84%E7%BB%87%E6%95%B4%E4%B8%AA%E4%BB%A3%E7%A0%81%E5%B7%A5%E7%A8%8B,%E5%85%B6%E4%B8%ADmain%E4%B8%AD%E5%8C%85%E5%90%ABapp_main%E5%87%BD%E6%95%B0,%E7%94%A8%E4%BA%8E%E5%90%AF%E5%8A%A8%E6%95%B4%E4%B8%AA%E5%B7%A5%E7%A8%8B.components%E6%96%87%E4%BB%B6%E5%A4%B9%E5%8C%85%E5%90%AB%E5%B7%A5%E7%A8%8B%E4%B8%AD%E4%BF%AE%E6%94%B9%E7%9A%84%E4%B8%80%E4%BA%9Besp_idf%E7%BB%84%E4%BB%B6\(%E6%9C%AA%E4%BF%AE%E6%94%B9%E7%9A%84%E7%BB%84%E4%BB%B6%E9%BB%98%E8%AE%A4%E4%BB%8EIDF_PATH%E6%9F%A5%E6%89%BE\),%E5%90%84%E4%B8%AA%E4%BC%A0%E6%84%9F%E5%99%A8%E9%A9%B1%E5%8A%A8,%E7%A1%AC%E4%BB%B6%E6%8A%BD%E8%B1%A1%E5%B1%82\(hal\),%E9%A3%9E%E6%8E%A7%E7%A8%8B%E5%BA%8F%E6%A8%A1%E5%9D%97\(modules\)%E7%AD%89:]\(https://github.com/qljz1993/crazyflie-firmware.git\).%E6%8C%89%E7%85%A7IDF%E7%BC%96%E5%86%99%E9%A3%8E%E6%A0%BC,%E4%BB%A5%E7%BB%84%E4%BB%B6%E7%9A%84%E5%BD%A2%E5%BC%8F%E7%BB%84%E7%BB%87%E6%95%B4%E4%B8%AA%E4%BB%A3%E7%A0%81%E5%B7%A5%E7%A8%8B,%E5%85%B6%E4%B8%ADmain%E4%B8%AD%E5%8C%85%E5%90%ABapp_main%E5%87%BD%E6%95%B0,%E7%94%A8%E4%BA%8E%E5%90%AF%E5%8A%A8%E6%95%B4%E4%B8%AA%E5%B7%A5%E7%A8%8B.components%E6%96%87%E4%BB%B6%E5%A4%B9%E5%8C%85%E5%90%AB%E5%B7%A5%E7%A8%8B%E4%B8%AD%E4%BF%AE%E6%94%B9%E7%9A%84%E4%B8%80%E4%BA%9Besp_idf%E7%BB%84%E4%BB%B6\(%E6%9C%AA%E4%BF%AE%E6%94%B9%E7%9A%84%E7%BB%84%E4%BB%B6%E9%BB%98%E8%AE%A4%E4%BB%8EIDF_PATH%E6%9F%A5%E6%89%BE\),%E5%90%84%E4%B8%AA%E4%BC%A0%E6%84%9F%E5%99%A8%E9%A9%B1%E5%8A%A8,%E7%A1%AC%E4%BB%B6%E6%8A%BD%E8%B1%A1%E5%B1%82\(hal\),%E9%A3%9E%E6%8E%A7%E7%A8%8B%E5%BA%8F%E6%A8%A1%E5%9D%97\(modules\)%E7%AD%89):)

![在这里插入图片描述](https://img-blog.csdnimg.cn/20191028161441788.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzIwNTE1NDYx,size_16,color_FFFFFF,t_70)

### 2. 驱动层

### 3. 硬件抽象层

硬件抽象层作为传感器驱动层与飞控程序层中间的桥梁,是该工程能够实现移植的关键,硬件抽象层包含以下文件:

![hal](https://img-blog.csdnimg.cn/20191028161529794.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzIwNTE1NDYx,size_16,color_FFFFFF,t_70)

### 4. 飞控程序层

飞控程序层是该工程的核心代码层,用于姿态计算,控制量计算,协议通信等,该层包含以下文件:

![modules](https://img-blog.csdnimg.cn/20191028161502980.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzIwNTE1NDYx,size_16,color_FFFFFF,t_70)

### 5. 扩展层

参见 [03-Crazyflie代码模块化实现方法](https://github.com/qljz1993/ESPlane_Wiki/tree/297513e5414152352017e89e11bae8ce9203d48c/ESPlane2.0/esplane2.0-kai-fa-bi-ji/esplane2.0-kai-fa-bi-ji/08esplane-2.0-Crazyflie-mo-kuai-hua-shi-xian-fang-fa.md),Crazyflie工程挂载自定义驱动方法 -Deck drivers(esplane未完成该部分移植20191028)

## 二、代码启动过程

### 1. 系统启动过程

![系统启动过程](https://img-blog.csdnimg.cn/20200113114223118.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzIwNTE1NDYx,size_16,color_FFFFFF,t_70)

### 2. 关键TASK-自稳模式

![自稳模式](https://img-blog.csdnimg.cn/20191028195017574.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzIwNTE1NDYx,size_16,color_FFFFFF,t_70)

### 3. 关键数据结构

![在这里插入图片描述](https://img-blog.csdnimg.cn/20191028152923889.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzIwNTE1NDYx,size_16,color_FFFFFF,t_70)
