欢迎光临散文网 会员登陆 & 注册

betaflight 代码结构

2022-09-12 19:51 作者:二木山人  | 我要投稿

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



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

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


betaflight 代码结构的评论 (共 条)

分享到微博请遵守国家法律