BetaFlight统一硬件配置文件研读之resource命令

2023-05-16

BetaFlight统一硬件配置文件研读之resource命令

  • 1. 源由
  • 2. 代码分析
  • 3. 实例分析
  • 4. 配置情况
    • 4.1 resource
    • 4.2 resource show
  • 5. 参考资料

统一硬件配置文件的设计是一种非常好的设计模式,可以将硬件和软件的工作进行解耦。

1. 源由

cli命令中resource是对硬件引脚资源进行配置的最为基础的一个命令。通过该命令使用MCU引脚控制:

  • 电机
  • 蜂鸣器
  • 伺服器
  • LED灯带
  • PPM接收机
  • 串口RxTx
  • I2C(气压计)
  • SPI(FLASH、模拟OSD 7456、陀螺仪)
  • ADC(电压、电流、RSSI等)
  • PINIO

注:resource还可以一起显示timer/dma,不过本章节不做展开。

const char * const ownerNames[OWNER_TOTAL_COUNT] = {
    "FREE",
    "PWM",
    "PPM",
    "MOTOR",
    "SERVO",
    "LED",
    "ADC",
    "ADC_BATT",
    "ADC_CURR",
    "ADC_EXT",
    "ADC_RSSI",
    "SERIAL_TX",
    "SERIAL_RX",
    "DEBUG",
    "TIMER",
    "SONAR_TRIGGER",
    "SONAR_ECHO",
    "SYSTEM",
    "SPI_SCK",
    "SPI_SDI",
    "SPI_SDO",
    "I2C_SCL",
    "I2C_SDA",
    "SDCARD",
    "SDIO_CK",
    "SDIO_CMD",
    "SDIO_D0",
    "SDIO_D1",
    "SDIO_D2",
    "SDIO_D3",
    "SDCARD_CS",
    "SDCARD_DETECT",
    "FLASH_CS",
    "BARO_CS",
    "GYRO_CS",
    "OSD_CS",
    "RX_SPI_CS",
    "SPI_CS",
    "GYRO_EXTI",
    "BARO_EOC",
    "COMPASS_EXTI",
    "USB",
    "USB_DETECT",
    "BEEPER",
    "OSD",
    "RX_BIND",
    "INVERTER",
    "LED_STRIP",
    "TRANSPONDER",
    "VTX_POWER",
    "VTX_CS",
    "VTX_DATA",
    "VTX_CLK",
    "COMPASS_CS",
    "RX_BIND_PLUG",
    "ESCSERIAL",
    "CAMERA_CONTROL",
    "TIMUP",
    "RANGEFINDER",
    "RX_SPI",
    "PINIO",
    "USB_MSC_PIN",
    "MCO",
    "RX_SPI_BIND",
    "RX_SPI_LED",
    "PREINIT",
    "RX_SPI_EXTI",
    "RX_SPI_CC2500_TX_EN",
    "RX_SPI_CC2500_LNA_EN",
    "RX_SPI_CC2500_ANT_SEL",
    "QSPI_CLK",
    "QSPI_BK1IO0",
    "QSPI_BK1IO1",
    "QSPI_BK1IO2",
    "QSPI_BK1IO3",
    "QSPI_BK1CS",
    "QSPI_BK2IO0",
    "QSPI_BK2IO1",
    "QSPI_BK2IO2",
    "QSPI_BK2IO3",
    "QSPI_BK2CS",
    "BARO_XCLR",
    "PULLUP",
    "PULLDOWN",
    "DSHOT_BITBANG",
    "SWD",
    "RX_SPI_EXPRESSLRS_RESET",
    "RX_SPI_EXPRESSLRS_BUSY",
};

2. 代码分析

cliResource
 ├──> <!pch> printResource(DUMP_MASTER | HIDE_UNUSED, NULL); return// 当前配置打印输出
 ├──> "show" // 当前资源配置情况
 │   ├──> cliPrintLine("Currently active IO resource assignments:\r\n(reboot to update)")
 │   ├──> cliRepeat('-', 20)
 │   ├──> for DEFIO_IO_USED_COUNT
 │   │   ├──> cliPrintf("%c%02d: %s", IO_GPIOPortIdx(ioRecs + i) + 'A', IO_GPIOPinIdx(ioRecs + i), owner);
 │   │   └──> <ioRecs[i].index > 0> cliPrintf(" %d", ioRecs[i].index)
 │   ├──> "all"
 │   │   ├──> <USE_TIMER_MGMT> cliTimer(cmdName, "show")
 │   │   └──> <USE_DMA> cliDma(cmdName, "show")
 │   └──> return
 ├──> [Find resource in resourceTable/ownerNames, get resourceIndex] error return
 ├──> [Check resource index below maxIndex, get index] error return
 ├──> ioTag_t *tag = getIoTag(resourceTable[resourceIndex], index) // 获取引脚IOTAG
 ├──> <IO_TAG_NONE>
 │   └──> cliPrintLine("Resource is freed")
 ├──> <!IO_TAG_NONE>
 │   ├──> ioRec_t *rec = IO_Rec(IOGetByTag(*tag))
 │   ├──> resourceCheck(resourceIndex, index, *tag)
 │   └──> cliPrintLinef("\r\nResource is set to %c%02d", IO_GPIOPortIdx(rec) + 'A', IO_GPIOPinIdx(rec))
 └──> cliShowParseError(cmdName)

注:常见情况MINIMAL_CLI无定义。

3. 实例分析

AOCODARC H7DUAL配置文件中,相关resource部分:

# resources
resource BEEPER 1 A15
resource MOTOR 1 B00
resource MOTOR 2 B01
resource MOTOR 3 A00
resource MOTOR 4 A01
resource MOTOR 5 A02
resource MOTOR 6 A03
resource MOTOR 7 D12
resource MOTOR 8 D13
resource SERVO 1 E05
resource SERVO 2 E06
resource PPM 1 A10
resource LED_STRIP 1 A08
resource SERIAL_TX 1 A09
resource SERIAL_TX 2 D05
resource SERIAL_TX 3 D08
resource SERIAL_TX 4 B09
resource SERIAL_TX 6 C06
resource SERIAL_TX 7 E08
resource SERIAL_TX 8 E01
resource SERIAL_RX 1 A10
resource SERIAL_RX 2 D06
resource SERIAL_RX 3 D09
resource SERIAL_RX 4 B08
resource SERIAL_RX 6 C07
resource SERIAL_RX 7 E07
resource SERIAL_RX 8 E00
resource I2C_SCL 1 B06
resource I2C_SCL 2 B10
resource I2C_SDA 1 B07
resource I2C_SDA 2 B11
resource LED 1 E03
resource LED 2 E04
resource SPI_SCK 1 A05
resource SPI_SCK 2 B13
resource SPI_SCK 3 B03
resource SPI_SCK 4 E12
resource SPI_MISO 1 A06
resource SPI_MISO 2 B14
resource SPI_MISO 3 B04
resource SPI_MISO 4 E13
resource SPI_MOSI 1 D07
resource SPI_MOSI 2 B15
resource SPI_MOSI 3 B05
resource SPI_MOSI 4 E14
resource ESCSERIAL 1 C07
resource ADC_BATT 1 C00
resource ADC_RSSI 1 C05
resource ADC_CURR 1 C01
resource ADC_EXT 1 C04
resource PINIO 1 D10
resource PINIO 2 D11
resource FLASH_CS 1 D03
resource OSD_CS 1 B12
resource GYRO_EXTI 1 B02
resource GYRO_EXTI 2 E15
resource GYRO_CS 1 C15
resource GYRO_CS 2 E11
resource USB_DETECT 1 E02

4. 配置情况

# help resource
resource - show/set resources
	<> | <resource name> <index> [<pin>|none] | show [all]

4.1 resource

将配置命令重新整理输出,格式:resource + name + index + pin

# resource
resource BEEPER 1 A15
resource MOTOR 1 B00
resource MOTOR 2 B01
resource MOTOR 3 A00
resource MOTOR 4 A01
resource MOTOR 5 A02
resource MOTOR 6 A03
resource MOTOR 7 D12
resource MOTOR 8 D13
resource SERVO 1 E05
resource SERVO 2 E06
resource PPM 1 A10
resource LED_STRIP 1 A08
resource SERIAL_TX 1 A09
resource SERIAL_TX 2 D05
resource SERIAL_TX 3 D08
resource SERIAL_TX 4 B09
resource SERIAL_TX 6 C06
resource SERIAL_TX 7 E08
resource SERIAL_TX 8 E01
resource SERIAL_RX 1 A10
resource SERIAL_RX 2 D06
resource SERIAL_RX 3 D09
resource SERIAL_RX 4 B08
resource SERIAL_RX 6 C07
resource SERIAL_RX 7 E07
resource SERIAL_RX 8 E00
resource I2C_SCL 1 B06
resource I2C_SCL 2 B10
resource I2C_SDA 1 B07
resource I2C_SDA 2 B11
resource LED 1 E03
resource LED 2 E04
resource SPI_SCK 1 A05
resource SPI_SCK 2 B13
resource SPI_SCK 3 B03
resource SPI_SCK 4 E12
resource SPI_MISO 1 A06
resource SPI_MISO 2 B14
resource SPI_MISO 3 B04
resource SPI_MISO 4 E13
resource SPI_MOSI 1 D07
resource SPI_MOSI 2 B15
resource SPI_MOSI 3 B05
resource SPI_MOSI 4 E14
resource ESCSERIAL 1 C07
resource ADC_BATT 1 C00
resource ADC_RSSI 1 C05
resource ADC_CURR 1 C01
resource ADC_EXT 1 C04
resource PINIO 1 D10
resource PINIO 2 D11
resource FLASH_CS 1 D03
resource OSD_CS 1 B12
resource GYRO_EXTI 1 B02
resource GYRO_EXTI 2 E15
resource GYRO_CS 1 C15
resource GYRO_CS 2 E11
resource USB_DETECT 1 E02

4.2 resource show

按照引脚顺序,对资源进行整理打印输出,格式: pin: resource_name + index

# resource show
Currently active IO resource assignments:
(reboot to update)
--------------------
A00: MOTOR 3
A01: MOTOR 4
A02: FREE
A03: FREE
A04: FREE
A05: SPI_SCK 1
A06: SPI_MISO 1
A07: FREE
A08: LED_STRIP
A09: FREE
A10: SERIAL_RX 1
A11: USB
A12: USB
A13: SWD
A14: SWD
A15: BEEPER
B00: MOTOR 1
B01: MOTOR 2
B02: GYRO_EXTI
B03: SPI_SCK 3
B04: SPI_MISO 3
B05: SPI_MOSI 3
B06: I2C_SCL 1
B07: I2C_SDA 1
B08: FREE
B09: FREE
B10: I2C_SCL 2
B11: I2C_SDA 2
B12: OSD_CS
B13: SPI_SCK 2
B14: SPI_MISO 2
B15: SPI_MOSI 2
C00: ADC_BATT
C01: ADC_CURR
C02: FREE
C03: FREE
C04: FREE
C05: FREE
C06: FREE
C07: FREE
C08: FREE
C09: FREE
C10: FREE
C11: FREE
C12: FREE
C13: FREE
C14: FREE
C15: GYRO_CS 1
D00: FREE
D01: FREE
D02: FREE
D03: FLASH_CS
D04: FREE
D05: FREE
D06: FREE
D07: SPI_MOSI 1
D08: FREE
D09: FREE
D10: PINIO 1
D11: PINIO 2
D12: FREE
D13: FREE
D14: FREE
D15: FREE
E00: FREE
E01: FREE
E02: FREE
E03: LED 1
E04: LED 2
E05: FREE
E06: FREE
E07: FREE
E08: FREE
E09: FREE
E10: FREE
E11: GYRO_CS 2
E12: SPI_SCK 4
E13: SPI_MISO 4
E14: SPI_MOSI 4
E15: GYRO_EXTI
F00: FREE
F01: FREE
F02: FREE
F03: FREE
F04: FREE
F05: FREE
F06: FREE
F07: FREE
F08: FREE
F09: FREE
F10: FREE
F11: FREE
F12: FREE
F13: FREE
F14: FREE
F15: FREE
G00: FREE
G01: FREE
G02: FREE
G03: FREE
G04: FREE
G05: FREE
G06: FREE
G07: FREE
G08: FREE
G09: FREE
G10: FREE
G11: FREE
G12: FREE
G13: FREE
G14: FREE
G15: FREE

5. 参考资料

【1】BetaFlight开源代码框架简介
【2】BetaFlight统一硬件资源简单配置修改
【3】BetaFlight统一硬件配置文件研读

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

BetaFlight统一硬件配置文件研读之resource命令 的相关文章

  • centos6下安装与配置squid代理

    1 安装squid yum span class hljs keyword install span squid y 2 编辑配置文件 vim etc squid squid conf span class hljs preprocesso
  • 我卢本伟没有开挂!

    题目描述 众所周知 xff0c 卢本伟没有开挂 xff0c 如何验证他没有开挂呢 xff1f 这里我们发现一个算法通过输出d能够证明他有没有开挂 1 xff1a 如果 n 61 0 xff0c 结束算法 2 xff1a find the s
  • 邻接矩阵

    题目描叙 xff1a 无向图的表示方法邻接矩阵 xff0c 需打印到屏幕 有权 分析 xff1a 邻接矩阵的核心思想便是顶点表和边表 我们可以定义一个结构体 xff0c 里面包含一个顶点表 xff08 即一个vexs一维数组 xff09 x
  • 7-15 完全二叉搜索树 (30 分)

    题目描述 xff1a 一个无重复的非负整数序列 xff0c 必定对应唯一的一棵形状为完全二叉树的二叉搜索树 本题就要求你输出这棵树的层序遍历序列 输入格式 xff1a 首先第一行给出一个正整数 N xff08 1000 xff09 xff0
  • 7-14 最短工期 (25 分)

    题目描述 xff1a 一个项目由若干个任务组成 xff0c 任务之间有先后依赖顺序 项目经理需要设置一系列里程碑 xff0c 在每个里程碑节点处检查任务的完成情况 xff0c 并启动后续的任务 现给定一个项目中各个任务之间的关系 xff0c
  • 176. 装满的油箱(bfs)

    题目链接 xff1a https www acwing com problem content description 178 有N个城市 xff08 编号0 1 N 1 xff09 和M条道路 xff0c 构成一张无向图 在每个城市里边都
  • ArrayList中remove(int index)方法中为什么不使用fastRemove方法?

    今天在看 ArrayList 源码时 xff0c 我发现了一个疑问 ArrayList 有两个删除的方法分别是 remove int index 和 remove Object o 方法 span class token keyword p
  • #Linux杂记--Docker pull下载镜像时无法使用proxychains4的解决方案

    Linux杂记 Docker pull下载镜像时无法使用proxychains4的解决方案 1 引言2 解决方案 1 引言 大部分命令都可以使用 proxychains4 访问国外资源 xff0c 但 docker 下载镜像的时候不行 于是
  • Python中将numpy Int16类型的音频阵列转换为Float32类型

    目前语音处理中 xff0c 我们存储较多的音频格式为numpy Int16类型的 xff0c 但在对音频文件进一步做处理时 xff0c 有时候会需要转换为float32类型的数据使用 这里转换方式如下 xff1a xff08 1 xff09
  • Java调用python代码的五种方式

    你还在纠结怎么样在Java中调用python吗 xff1f 我们在实际工程项目问题中 xff0c 经常会碰到不同语言代码之间互调的问题 xff0c 比如此处的Java调用python xff08 常见Java调用python写的处理模型来完
  • Android从零开始——之Android简介以及开发环境的搭建

    镇楼图 android xff08 Google公司开发的操作系统 xff09 以下省略一万字 请自行百度 34 android 34 或通过链接 xff1a http baike baidu com subview 1241829 932
  • 指针数组和数组指针的区别及其详解

    引言 对于指针数组和数组指针的概念 xff0c 相信很多人经常会感到迷惑 xff0c 见到二者一时不能分辨究竟对应哪一个才是对的 接下来我们来分析一下二者区别 我们来看一下这个示例代码 xff1a span class token keyw
  • 解决pip安装报错 “error: microsoft visual c++ 14.0 or greater is required”

    今天在Windows的anaconda中使用pip安装工具包的时候出现报错信息 xff0c 如下图所示 xff1a 经排查发现主要错误是由 error microsoft visual c 43 43 14 0 or greater is
  • Linux离线状态下的Anaconda安装与Python环境创建

    1 下载与安装说明 下载 下载地址 xff1a https repo anaconda com archive 版本 xff1a 此处以版本为2020 11的anaconda作示例 xff0c 其携带的python版本为3 8 5 下载 x
  • Linux离线状态下在anaconda中安装pytorch

    1 下载与安装说明 下载地址 xff08 按安装方法选取 xff09 bz2压缩包下载地址 xff1a https mirrors tuna tsinghua edu cn anaconda cloud pytorch win 64 C 6
  • Linux离线状态下安装cuda、cudnn、cudatoolkit

    目录 1 下载与安装说明2 CUDA安装3 cuDNN安装4 cudatoolkit安装5 测试安装成功 1 下载与安装说明 工具包下载地址 CUDA历史版本下载地址 xff1a https developer nvidia com cud
  • 利用BP神经网络进行函数拟合

    利用BP神经网络进行函数拟合 摘要关键词问题描述算法设计结果分析与讨论结论Python源代码 摘要 数据拟合是在假设模型结构已知的条件下最优确定模型中未知参数使预测值与数据吻合度最高 xff0c 本文选取线性项加激活函数组成一个非线性模型
  • curl: (7) Failed to connect to raw.githubusercontent.com port 443: Connection refused的几种解决方式

    curl 7 Failed to connect to raw githubusercontent com port 443 Connection refused的几种解决方式 xff1f 前言 xff1a 最近随着flutter的发布 x
  • js事件-笔记

    这里写目录标题 js事件常见事件事件的注册方式事件处理分级1 DOM0级事件处理程序 xff1a 2 DOM2级事件处理程序 xff1a 3 DOM3级事件 事件流三个阶段 js事件 常见事件 onload 加载完成事件 页面加载之后 xf
  • 工程伦理2021年春季学期线上课程习题全部解答

    工程伦理2021年春季学期线上课程习题全部解答 提示 xff1a 在搜索题目时也可以关注 学小易 公众号进行查找题目及解答 xff0c 此处是个人总结的答案 注意 xff1a 有一些题号是重复的 xff0c 按照题号一一对应即可 第一章 B

随机推荐

  • vue中v-model详解

    vue中v model详解 v model 本质上是一个语法糖 xff0c 是v bind和事件监听 xff08 64 input xff09 的合并操作 vue使用v model实现这些标签数据的双向绑定 xff0c 它会根据控件类型自动
  • 强化学习进阶 第七讲 TRPO

    转载自知乎专栏 天津包子馅儿 的知乎 今天开始我们的第七讲 xff0c TRPO 先简短地介绍一下 xff1a TRPO是英文单词Trust region policy optimization的简称 xff0c 翻译成中文是信赖域策略优化
  • 防抖(debounce)、节流(throttle)以及前端锁(mutex)

    节流和去抖的核心其实就是限制某一个方法被频繁触发 节流 xff1a 间隔时间段触发一次去抖 xff1a 对于一定时间段的连续的函数调用 xff0c 只让其执行一次 xff0c 两者有时候不需要细分 xff0c 节流去抖也可以合在一起 具体场
  • css3的动画属性总结

  • 算法题:按图找最近的路(js/python3)

    题目描述 xff1a 有一张 m n 的地图 xff0c 地图描述了起点和终点的位置 xff0c 也描述了两点间分布的高山湖泊 xff0c 高山湖泊挡住去路 xff0c 需要绕道行走 xff0c 请问从起点到终点的最短路径距离是多少 xff
  • git和远程仓库建立连接详细过程

    git和远程仓库建立连接详细过程 建立远程仓库 首先在github gitee上创建自己的一个仓库 xff0c 并将自己的路径复制下来 xff0c 如下图 建立本地仓库 本地新建文件夹存储工程文件 xff0c 并且初始化仓库 打开gitba
  • 微信小程序封装请求

    封装请求 解决的问题 很多页面中请求的url前半部分都是一样的 xff0c 重复书写导致页面代码冗余复杂同时逻辑容易不清晰 xff0c 所以采用单独将请求封装成一个文件 xff08 模块 xff09 使得这些问题得到解决 前期基础知识 un
  • 交响乐排布及乐器音色特点

    交响乐布局 乐器组成及音色特点 木管组及铜管组代表乐器 木管组 铜管组 钢琴键谱图 国际谱和大小字组记录方式对比 其他乐器在钢琴键盘上音域表示图示 单簧管和长笛音色特点 音色特点综合分析
  • 【matlab】获取文件夹下文件名或路径保存到txt

    获取某文件夹下的所有文件名并保存 当需要在某一个文件夹下获取子文件的所有文件名 xff0c 并进行保存时 xff0c 可使用下面的代码 xff1a Path 61 39 D 文件夹 39 设置数据存放的文件夹路径 File 61 dir f
  • pycharm:新建虚拟环境和安装依赖

    前言 小编深有体会 xff0c 在刚开始用pycharm跑python的项目的时候 xff0c 一时间不知道如何下手 xff0c 特别是作为一个新手小白 xff0c 这里总结了一份新手避坑指南 xff0c 主要是新建虚拟环境 xff08 生
  • unbuntu安装 PyTorch 1.7.0+ torchvision 0.8.1

    unbuntu安装 PyTorch 1 7 0 43 torchvision 0 8 1 一 创建环境二 启动环境三 查看电脑CUDA版本 xff0c 若电脑只有CPU则忽略这一步四 下载安装包到本地安装4 1 点击以下链接进入下载网站4
  • 树莓派VNC界面不显示或显示不全问题_解决方案

    刚开始上手树莓派的小伙伴们估计都遇到过这一问题 xff0c 用树莓派登录VNC时 xff0c 界面不显示或者界面显示的比例有问题 先打开VNC xff0c 输入自己的IP地址 xff0c 登录VNC 我这里在登录VNC时 xff0c VNC
  • ArcGIS Engine:对COM组件的调用返回了错误HRESULT E_FAIL

    最近做一个项目 xff0c 需要调用GP的 通视性 工具 该工具在ARCScene中界面如下 xff1a 需要两个参数 xff08 必选 xff09 xff0c 即视线和障碍物 xff0c 在 帮助 中查看要求参数都是FeatureLaye
  • idea 2019.3之后的版本的项目使用gradle构建,编译时会出现中文乱码

    目录 背景1 修改gradle编译选项2 修改idea设置3 其他方法 xff08 尝试后没有效果 xff09 3 1 修改File Encdoing3 2 修改idea的custom VM option 背景 把公司电脑的idea更新到了
  • shell编程3循环语句

    文章目录 shell编程3循环语句1 for循环1 1 基本格式1 2 类C语言格式 2 while循环2 1 基本格式2 2 死循环 3 until循环4 跳出循环4 1 continue4 2 break 5 实验5 1 编写脚本实现计
  • ArduPilot飞控之ubuntu22.04-Gazebo模拟

    ArduPilot飞控之ubuntu22 04 Gazebo模拟 1 源由2 Gazebo安装2 1 ubuntu22 04系统更新2 2 安装Gazebo Garden2 3 安装ArduPilot Gazebo插件2 3 1 基础库安装
  • ArduPilot飞控之DIY-F450计划

    ArduPilot飞控之DIY F450计划 1 历史2 源由3 计划3 1 硬件3 2 软件 4 动手4 1 接线4 1 1 ELRS nano接收机4 1 2 BN880 GPS模块4 1 3 Radio Telemetry 4 2 配
  • ArduPilot Kakute F7 AIO DIYF450 without GPS配置

    ArduPilot Kakute F7 AIO DIYF450 without GPS配置 1 源由2 配置2 1 Kakute F7 AIO相关配置2 1 1 串口规划2 1 2 电传配置2 1 3 GPS配置2 1 4 CRSF接收机配
  • ArduPilot之posHold&RTL实测

    ArduPilot之posHold amp RTL实测 1 源由2 模式配置3 测试步骤4 飞行实测5 总结6 参考资料7 附录 关于QGC 暂不支持MAVLink2 signing Protocol问题7 1 问题描述7 2 硬件配置7
  • BetaFlight统一硬件配置文件研读之resource命令

    BetaFlight统一硬件配置文件研读之resource命令 1 源由2 代码分析3 实例分析4 配置情况4 1 resource4 2 resource show 5 参考资料 统一硬件配置文件的设计是一种非常好的设计模式 xff0c