BetaFlight统一硬件资源抽象设计

news2024/10/7 17:36:21

BetaFlight统一硬件资源抽象设计

  • 1. 源由
  • 2. 资源配置注意事项
  • 3. 资源配置文件修改验证步骤
    • Step 1:确认硬件修改内容
    • Step 2:资源配置文件修改
    • Step 3:验证配置文件
    • Step 4:提交资源配置文件PR
  • 4. 参考资料

就笔者接触嵌入式设计以来,简单的来说可以分为几个阶段:

  1. MCS51汇编语言应用编程
  2. 单片机C语言应用编程
  3. 基于微系统C语言应用编程
  4. 基于(微、宏、混合)内核C语言驱动和应用编程
  5. 基于Unix like(Linux)应用系统的Python/Scripts/OpenCV/QT/C/C++/Java等等应用、算法编程
    1. 2)通常是面向过程的开发,更多专注于业务的过程化设计;
    1. 4)系统架构设计上已经面向对象,OS设计层面已经面向对象(驱动),模块化(内存管理,任务管理等)设计;
    1. 已经非常上层的应用编程,注重业务,算法,逻辑;计算机科学学科在这方面有大量内容,百花齐放百家争鸣;

这里说了这么多阶段性的东西,整体上还是想简单捋一下,从嵌入式的角度,如何将业务层层设计,并最终一步一步的落实到物理世界的。

很多问题的分析不仅仅要从局部入手,更要从全局,甚至要有长期布局的思路。

这里就不展开,否则话太多,离题了。通常来说,从设计角度看:

  1. 紧耦合:高复杂度;强依赖性;全局性资源;占用资源最少;
  2. 松耦合:模块化接口;弱依赖性;资源独立;占用资源一般;
  3. 不耦合:高度抽象模块;设计独立;接口标准;占用资源一般;

1. 源由

BetaFlight的代码最初clone过来时,也是继承了嵌入式代码一贯的target目标板设计思路;也就是说,针对每个板子有一份对应的目录,有对应的target代码,比如:芯片、板子初始化等代码。

但是从实践的角度看,会存在以下一些问题:

  1. 硬件目标板需要通过代码适配;
  2. 硬件制造厂家不一定具备软件开发人员(业务上决定);
  3. 硬件设计人员不接触或者非常少接触代码,不具备或者不习惯软件开发环境和技能;
  4. 硬件制造厂家很多,而软件代码开发维护人员数量有限;
  5. 为保证开发团队对代码设计全局把控和掌控能力;并要求设计简洁且易于维护,需要减少由于操作异常而投入的额外维护工作量;
  6. 事实上硬件厂家也已经加入到开源社区(虽然他们的硬件设计资料并不一定开源,但是需要从某种角度与开源软件一起携手并进);

鉴于上面诸多因素(有些可能我也没有概括全,也许说的也不够到位),BetaFlight开发团队与2019年开始引入硬件资源描述配置文件与软件代码进行抽象和解耦,详见4.0.0发布信息。

在这里插入图片描述
注:鉴于目前BetaFlight的设计都是基于STM32系列的MCU,所以从工程框架的角度来看,并没有支持其他MCU的工程结构目录,比如:AT32(雅特力芯片)。鉴于国际市场芯片短缺问题,开发团队确实已经开始类似准备工作。
【1】 Source file re-arrangement for better separation of MCU types #12268
【2】AT32 development, introduction of AT32F435 target #12247
【3】AT32F435/7 Libraries (#12158) #12263

鉴于软件代码成熟度的提高,其应用范围日益扩大,当前SITL/STM32可能并不能完全满足要求,后续对硬件仿真HITL(Hardware in The Loop) simulation #12212的支持也需要纳入考虑,以便更广泛的应用。

2. 资源配置注意事项

  1. 飞行控制器制造商设计指南
  2. 新增或更新硬件资源配置文件方法

注1:截止目前BF 4.4版本,所有BetaFlight现有STM32板子已经全部支持统一硬件资源抽象(如下图所示,BetaFlight飞控代码仅与MCU型号挂钩,而硬件设计被解耦到unified-targets硬件资源配置文件中。

注2:具体内容大家就看链接,不做翻译了。

3. 资源配置文件修改验证步骤

目前,BetaFlight上有大量的硬件设计厂家,以及各种STM32的飞控板子,因此通常来说新设计的硬件也是在原有基础上进行修改。

这里基于这种思路我们整理下资源配置文件修改的步骤,关于PR合入请详细阅读新增或更新硬件资源配置文件方法里面关于“如何与开源BF开发人员合作事宜”。

Step 1:确认硬件修改内容

与硬件设计人员确认硬件上修改的内容,获取相应格式文档交付件。

  1. PDF原理图
  2. 硬件改动说明(芯片改动,pin脚改动,IMU方向等)
  3. 参考飞控型号、规格书

Step 2:资源配置文件修改

根据Step 1的交付件和 新增或更新硬件资源配置文件方法修改资源配置文件

  1. 确认当前产品型号、规格
  2. 确认当前产品型号需要兼容的规格(比如:后续硬件可能的改动)
  3. 找到参考飞控资源配置文件,针对改动修改配置文件

Step 3:验证配置文件

根据Step 2的交付件和测试样机进行功能验证

  1. 当前产品飞控内部芯片功能验证
  2. 当前产品飞控引出pin脚功能验证
  3. 当前产品飞控飞行性能测试验证
    提供最终测试结果:若测试不合格返回Step 1 or Step 2;

Step 4:提交资源配置文件PR

根据 新增或更新硬件资源配置文件方法提交PR

4. 参考资料

【1】BetaFlight开源代码框架简介
【2】Betaflight硬件产商指南
【3】Betaflight 4.0.0 Release Note

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/194198.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ESP32设备驱动-MAX44009环境光传感器驱动

MAX44009环境光传感器驱动 文章目录 MAX44009环境光传感器驱动1、MAX44009介绍2、硬件准备3、软件准备4、驱动实现1、MAX44009介绍 MAX44009 环境光传感器具有 IC 数字输出,非常适合智能手机、笔记本电脑和工业传感器等多种便携式应用。 它的工作电流小于 1A,是业内功耗最低…

Springboot——Swagger

Swagger2 的 maven 依赖使用 Swagger2 工具,必须要导入 maven 依赖,当前官方最高版本是 2.8.0,我尝试了一下,个人感觉页面展示的效果不太好,而且不够紧凑,不利于操作。另外,最新版本并不一定是最…

Redux toolkit

Redux 是 JavaScript 应用的状态容器,提供可预测的状态管理。 Redux Toolkit 是官方推荐的编写 Redux 逻辑的方法 入门 Redux | Redux 中文官网 本案例是一个加,减的计算器,从零到壹 1、创建一个react的项目 Create-react-app react-too…

MybatisX快速生成增删改查

MybatisX快速生成增删改查 MybatisX 是一款基于 IDEA 的快速开发插件,方便在使用mybatis以及mybatis-plus开始时简化繁琐的重复操作,提高开发速率。 注意:idea得用最新的版本才能生效一些功能,我用的是2021.3版本的 1 安装 file …

【Unity VR开发】结合VRTK4.0:直线

桃花坞里桃花庵,桃花庵里桃花仙。桃花仙人种桃树,又折桃花当酒钱。 酒醒只在花前坐,酒醉还来花下眠。半醉半醒日复日,花落花开年复年。 但愿老死花酒间,不愿鞠躬车马前。车尘马足富者趣,酒盏花枝贫者缘。…

新C++(7):多态那些事儿_上

"也应该歌颂赞美那株鲜红的玫瑰。"一、回顾多态(1)什么是多态呢在编程语言和类型轮中,多态(英语:polymorphism)指为不同数据类型的实体提供统一的接口。多态类型(英语:polymorphic type)可以将自身所支持的操…

FreeRTOS任务通知实验

从 V8.2.0 版本开始,FreeRTOS 新增了任务通知这个功能,可以使用任务通 知来代替信号量、消息队列、事件组等这些东西。使用任务通知的话效率会更高。 本章要实现的功能是:使用任务通知方式实现消息队列、二值信号量、计数信号 量、事件标记功…

极狐场景化造车理念受热捧,北汽蓝谷构建未来5年核心竞争力

近日,极狐汽车以“一米视角”为设计思考的原点,围绕亲子出行的全场景,推出全球首款智能亲子车——考拉。作为北汽蓝谷场景化造车的首款产品,极狐汽车考拉无疑是继高阶智能驾驶标杆产品HI之后的又一次先行探索,致力于卡…

1月VR大数据:Quest 2增长2.91%,HTC份额跌至10%以下

Hello大家好,每月一期的VR内容/硬件大数据统计又和大家见面了。 想了解VR软硬件行情么?关注这里就对了。我们会统计Steam平台的用户及内容等数据,每月初准时为你推送,不要错过喔!本数据报告包含:Steam VR硬…

初识C语言(对c语言的简单介绍)

初识C语言什么是C语言?第一个C语言程序数据类型类型的使用:变量、常量定义变量的方法变量的分类变量的使用变量的作用域和生命周期常量字符串转义字符注释字符串转义字符注释选择语句循环语句函数数组数组定义数组的使用操作符常见关键字关键字 typedef关…

MySQL进阶篇之SQL优化

03、SQL优化 3.1、插入数据 1、insert优化 批量插入 INSERT INTO 表名 (字段1,字段2,...) VALUES (值1,值2,...),(值1,值2,...),(值1,值2,...);INSERT INTO 表名 VALUES (值1,值2,...),(值1,值2,...),(值1,值2,...);手动提交事务 start transaction; INSERT INTO 表名 (字段1…

【SQL 审核查询平台】Archery使用介绍

Archery 读作:[ˈɑːrtʃəri] Archery目录界面截图功能清单依赖清单框架前端组件服务端部署准备运行配置启动访问修改配置项基础设置添加实例添加资源组资源组关联用户/实例添加权限组用户关联权限组/权限设置工单上线和查询的审批流程设置默认资源组和默认权限组…

数组的几种常见方法及其返回值

push():向数组的末尾添加一个或多个元素;返回的是数组的新长度。unshift():向数组的开头添加一个或多个元素;返回的是数组的新长度。shift():删除数组的第一个元素,并返回被删除的(即第一个元素…

品牌社交营销链路 | 小红书数据分析网站

【导语】 2022年,小红书品牌推广竞争愈演愈烈,从小红书用户画像分析,到抢占小红书关键词排名,营销动作内卷升级,那么在2023的新篇章,如何打通社交种草的链路呢? 1、运营企业账号,建立…

MQTT 代理助力ECARX实现汽车智能互联

一、应用背景 ECARX是中国汽车制造商吉利旗下的一家科技创新企业,致力于持续打造行业领先的智能网联生态开放平台,全面为车企赋能,创造更智能、更安全的出行体验,为智能互联汽车提供智能解决方案。 ECARX主要业务包括吉利汽车的…

让Apache Beam在GCP Cloud Dataflow上跑起来

简介 在文章《Apache Beam入门及Java SDK开发初体验》中大概讲了Apapche Beam的简单概念和本地运行,本文将讲解如何把代码运行在GCP Cloud Dataflow上。 本地运行 通过maven命令来创建项目: mvn archetype:generate \-DarchetypeGroupIdorg.apache.b…

Swift 新 async/await 同步机制小技巧:消除“多余”的 await 关键字

概览 在使用多个Actor 共同实现同步功能的时候,我们往往会看到如下使用场景: Actor A 必须在主线程上运行,Actor B可以在任意线程上运行,但需要适时的调用 Actor A 中的方法。 在这种情况下,我们会遇到如下代码&#…

从移动激光扫描数据中自动提取单棵树的双重生长方法

论文题目:A dual growing method for the automatic extraction of individual trees from mobile laser scanning data Abstract 在城市场景的杂乱点云中,街道树木与其他物体交织在一起,阻碍了对单个树木的自动提取。根据树木的一般构成&a…

React:安装配置使用scss

目录 前言: 1.暴露隐藏的webpack配置; 2.安装sass的相关包; 3.项目中新建一些scss文件; 4.在config文件夹中找到webpack.config.js文件,进行配置; 5.测试使用; 前言: 项目采用…

Python之Pandas的常用技能【写入数据】

1、背景: 最近在工作中遇到越来越多的的使用pandas或者python来处里写入操作,尤其是对excel文件或者csv文件的操作更是常见,这里将写入操作总结如下,方便记忆,也分享给大家,希望对阅读者能够有所帮助 2、…