PX4-Autopilot代码解析(4)-板级支持和硬件抽象

PX4 的平台抽象层包含全面的板级支持包 (BSP),这些 BSP 提供针对特定硬件的实现,同时保持一致的 API。本节介绍 PX4 如何抽象不同微控制器系列之间的硬件差异。

I/O 定时器抽象

I/O 定时器抽象为不同微控制器架构的 PWM、OneShot、DShot 和捕获功能提供了统一的接口:

I/O 计时器抽象使用通用接口头和特定于体系结构的实现的组合:

  1. 通用 API:跨平台定义px4_arch/io_timer.h一致的函数签名
  2. 架构实现:每个 MCU 系列都提供自己的实现platforms/nuttx/src/px4/{stm32,nxp,rpi}/io_timer.c
  3. 板配置:每个板定义其定时器配置boards/{vendor}/{board}/src/timer_config.cpp
  4. 硬件描述:特定于体系结构的硬件细节定义在px4_arch/io_timer_hw_description.h

引导加载程序和复位管理

PX4 的平台抽象包括引导加载程序支持和适应不同硬件架构的系统重置管理:

引导加载程序系统提供一致的接口,同时适应特定于硬件的闪存技术和内存布局:

  1. 通用引导加载程序逻辑:独立于平台的引导加载程序流程bootloader_main()
  2. 特定架构的闪存:每个 MCU 系列都实现自己的闪存操作
  3. 电路板配置:电路板头文件中的引脚定义和硬件特定设置
  4. 重置管理:跨平台的一致重置原因检测和处理

时钟配置和电源管理

PX4 提供了一致的时钟配置接口,可适应不同微控制器系列的特定时钟树和电源域:

时钟配置系统提供一致的接口,同时适应各个MCU特定的时钟架构:

  1. 时钟配置结构:每个板以标准化结构定义其时钟树
  2. 特定架构实现:时钟初始化例程适应不同的硬件
  3. 外设时钟管理:用于启用/禁用外设时钟的一致 API
  4. 性能优化:针对性能和功率要求优化的时钟设置

平台抽象

本文档介绍了 PX4 的平台抽象层,该层提供了跨不同实时操作系统 (RTOS)、硬件平台和仿真环境的统一接口。平台抽象使 PX4 能够在嵌入式硬件(主要是 NuttX RTOS)以及兼容 POSIX 的系统上运行,以进行仿真和开发。

有关整体系统架构的信息,请参阅系统架构。有关平台抽象之外的构建系统详细信息,请参阅构建系统

RTOS集成

PX4 的平台抽象主要针对嵌入式硬件的NuttX RTOS和用于仿真的 POSIX系统。抽象层负责处理特定于 RTOS 的初始化、任务管理和系统服务。


NuttX 集成

NuttX 平台集成通过几个关键组件处理 RTOS 初始化、模块加载和硬件抽象:

NuttX 集成过程从特定于板的配置文件开始,并经过几个构建阶段:

  1. 配置膨胀平台/nuttx/cmake/init.cmake74-84处理董事会的defconfig文件
  2. 上下文生成平台/nuttx/NuttX/CMakeLists.txt72-84创建 NuttX 标题和目录链接
  3. 图书馆大楼平台/nuttx/NuttX/CMakeLists.txt165-225编译 NuttX 子系统库
  4. 申请登记平台/nuttx/NuttX/CMakeLists.txt87-135创建内置应用程序表

硬件抽象层

硬件抽象层提供特定于板卡的配置、内存布局和驱动程序接口。每个板卡通过链接器脚本和配置文件定义其内存映射、外设配置和优化设置。

成分目的关键文件
内存布局定义闪存/RAM 区域、ITCM/DTCM 分配script.ldmemory.ld
板配置GPIO、外设和驱动程序设置nuttx-config/*/defconfig
调试支持SVD 文件、GDB 配置、调试符号launch.json.in、调试脚本
优化将关键功能放置在快速内存中itcm_static_functions.ld

内存管理和优化

PX4 使用复杂的内存管理来优化资源受限的嵌入式系统的性能:

内存优化将性能关键函数置于指令紧耦合内存 (ITCM) 中,以实现零等待状态执行。该itcm_static_functions.ld文件定义了哪些函数被放置在快速内存中。

Shell 和控制台抽象

PX4 根据目标平台提供不同的 shell 实现,通过通用的抽象层统一命令执行和远程访问。

特定于平台的 Shell 实现

Shell 抽象处理不同的执行环境:

NuttX 实现:使用 NuttX Shell (NSH),并通过内置应用程序框架注册自定义内置命令。该MavlinkShell::shell_start_thread()函数用于nsh_consolemain()远程 Shell 访问。

POSIX 实现:实现一个自定义的 shell(Pxh类),具有命令解析、历史记录和 Tab 补全功能。px4_daemon命名空间为远程连接提供服务器功能。

平台检测通过预处理器宏进行:

  • __PX4_NUTTX:启用 NuttX 特定的代码路径
  • __PX4_POSIX:启用 POSIX 特定的实现
  • __PX4_CYGWIN:处理 Windows/Cygwin 兼容性

应用程序管理

PX4 使用内置的应用程序系统来跨平台注册和管理模块。应用程序在编译时注册,并通过 shell 接口使用。

内置应用程序系统通过基于模板的代码生成来工作:

  1. 模块属性:每个 PX4 模块定义MAINPRIORITYSTACK_MAIN属性
  2. 模板处理:带有模块信息的CMake 流程.bdat.in和模板.pdat.in
  3. 代码生成:为运行时注册创建应用程序表和函数原型
  4. 平台集成:NuttX 使用内置注册表系统,而 POSIX 使用函数指针映射

调试基础设施

平台抽象包括具有特定于板的配置、SVD(系统视图描述)文件和调试器集成的全面调试支持。

调试组件目的配置
GDB 集成源代码级调试.gdbinitlaunch.json
SVD 支持外围寄存器查看特定于主板的 SVD 文件
RTOS 意识线程/任务调试jlink-nuttx.so插件
内存映射地址空间可视化链接器脚本符号

调试配置生成

调试系统根据主板特性自动生成 VSCode 和 GDB 配置:

调试配置过程会自动检测目标处理器并生成适当的调试器配置。该系统支持多种调试探针,并通过自定义插件提供 RTOS 感知调试。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值