betaflight 代码结构
二木山人
2022年09月12日 19:51
收录于文集
共14篇

betaflight 的代码结构主要如下, 整体上我们移植需要关注的是 src/main/drivers 文件夹下的驱动,其他文件夹各自用途标注

+---docs        -- bf 的文档文件夹,包括如何设置、搭建编译环境等,如果英语不太差建议多读 +---lib        -- MCU 以及引用的一些外部lib 文件,mcu 的驱动库比如HAL、at32 的bsp放这里

|   +---main |   |   +---AT32F43x |   |   +---BoschSensortec |   |   |   \---BMI270-Sensor-API |   |   +---CMSIS  --- ARM 核心的驱动,必须要 |   |   +---dyad |   |   +---google   --google的glc序列化协议 |   |   \---MAVLink  --mavlink 数传协议 |   \---test            -- 自动化单元测试用例 +---make             -- makefile 的主要文件夹, 包括target引入、特定MCU 的编译链接配置等, at32 需要新建一个 makefile文件 |   \---mcu +---src        --主要源代码文件夹 |   +---link    -- gcc 的ld 文件夹,主要声明程序的内存、flash布局,需要根据mcu 仔细调整, 声明内存起始、flash起始、程序的 bss、ess 等段声明,bf 的配置数据管理体系 PG (flash 模拟eeprom )重点在这里。F4的重启到bootloader 也是在这里

+---main |   |   +---blackbox      黑匣子代码 |   |   +---build             构建的一些设置 |   |   +---cli                bf 地面站的cli 功能实现 |   |   +---cms             OSD 设置菜单的实现 |   |   +---common        通用配置文件 |   |   +---config            读写config 的配置 |   |   +---drivers            驱动层 ,mcu和传感器的驱动代码,移植的代码主要在这里 |   |   |   +---accgyro        加速度计与陀螺仪,基本不需要修改 |   |   |   +---accgyro_legacy   “史前”古老的加速度计和陀螺仪 |   |   |   +---barometer        气压计驱动 |   |   |   +---compass            罗盘驱动 |   |   |   +---rangefinder        遥控测试用的 |   |   |   \---rx             所有接收机的驱动,包括elrs、cc2500 、sbus 等,大部分不需要移植,ppm 、elrs 用到timer 需要修改 |   |   +---fc                init、飞控核心代码无需移植

|   |   +---flight            飞行状态代码,无需移植 |   |   +---io                对于输入输出的抽象代码,不需要修改 |   |   |   \---asyncfatfs |   |   +---msc            U盘模式,需要移植 |   |   +---msp            bf configuator 和bf 串口配置通信的协议,无需移植 |   |   +---osd            OSD 的抽象层无需修改 |   |   +---pg               配置信息读写库,无需修改 |   |   +---rx                接收机上层代码,无需修改 |   |   +---scheduler    核心调度器,无需修改 |   |   +---sensors        传感器抽象代码,无需修改 |   |   +---startup          mcu 启动初始化代码,需要根据mcu配置 startup.s ,修改初始化静态变量、预加载内存变量等部分 |   |   +---target            硬件目标配置信息,需要根据板子自己定义 |   |   |   +---AT32F437DEV  本次移植用的开发板target.h target.c target.mk 文佳 |   +---test        --单元测试代码 |   |   \---unit |   |       \---timer_definition_unittest.include |   |           +---drivers |   |           \---pg |   \---utils            --工具代码无需修改 \---unified_targets        --统一化的固件配置信息,无需修改     \---configs

整体上代码的结构,可以看下

代码块
JavaScript
自动换行
复制代码
bf 代码结构图 https://blog.csdn.net/github_37459410/article/details/126372389
复制成功

可以看到bf 代码呈沙漏型,中间的driver文件夹对上下层进行了抽象隔离,也便于bf 向各个mcu移植。 不过总体来说stm32 系列mcu 的结构变化不是很大,除了F7、H7 内存、DMA有部分的差异之外, 代码中夹杂着宏定义来实现1套代码不同target 打包。