PX4 的平台抽象层包含全面的板级支持包 (BSP),这些 BSP 提供针对特定硬件的实现,同时保持一致的 API。本节介绍 PX4 如何抽象不同微控制器系列之间的硬件差异。
I/O 定时器抽象
I/O 定时器抽象为不同微控制器架构的 PWM、OneShot、DShot 和捕获功能提供了统一的接口:

I/O 计时器抽象使用通用接口头和特定于体系结构的实现的组合:
- 通用 API:跨平台定义
px4_arch/io_timer.h一致的函数签名 - 架构实现:每个 MCU 系列都提供自己的实现
platforms/nuttx/src/px4/{stm32,nxp,rpi}/io_timer.c - 板配置:每个板定义其定时器配置
boards/{vendor}/{board}/src/timer_config.cpp - 硬件描述:特定于体系结构的硬件细节定义在
px4_arch/io_timer_hw_description.h
引导加载程序和复位管理
PX4 的平台抽象包括引导加载程序支持和适应不同硬件架构的系统重置管理:

引导加载程序系统提供一致的接口,同时适应特定于硬件的闪存技术和内存布局:
- 通用引导加载程序逻辑:独立于平台的引导加载程序流程
bootloader_main() - 特定架构的闪存:每个 MCU 系列都实现自己的闪存操作
- 电路板配置:电路板头文件中的引脚定义和硬件特定设置
- 重置管理:跨平台的一致重置原因检测和处理
时钟配置和电源管理
PX4 提供了一致的时钟配置接口,可适应不同微控制器系列的特定时钟树和电源域:

时钟配置系统提供一致的接口,同时适应各个MCU特定的时钟架构:
- 时钟配置结构:每个板以标准化结构定义其时钟树
- 特定架构实现:时钟初始化例程适应不同的硬件
- 外设时钟管理:用于启用/禁用外设时钟的一致 API
- 性能优化:针对性能和功率要求优化的时钟设置
平台抽象
本文档介绍了 PX4 的平台抽象层,该层提供了跨不同实时操作系统 (RTOS)、硬件平台和仿真环境的统一接口。平台抽象使 PX4 能够在嵌入式硬件(主要是 NuttX RTOS)以及兼容 POSIX 的系统上运行,以进行仿真和开发。
有关整体系统架构的信息,请参阅系统架构。有关平台抽象之外的构建系统详细信息,请参阅构建系统。
RTOS集成
PX4 的平台抽象主要针对嵌入式硬件的NuttX RTOS和用于仿真的 POSIX系统。抽象层负责处理特定于 RTOS 的初始化、任务管理和系统服务。
NuttX 集成
NuttX 平台集成通过几个关键组件处理 RTOS 初始化、模块加载和硬件抽象:

NuttX 集成过程从特定于板的配置文件开始,并经过几个构建阶段:
- 配置膨胀:平台/nuttx/cmake/init.cmake74-84处理董事会的
defconfig文件 - 上下文生成:平台/nuttx/NuttX/CMakeLists.txt72-84创建 NuttX 标题和目录链接
- 图书馆大楼:平台/nuttx/NuttX/CMakeLists.txt165-225编译 NuttX 子系统库
- 申请登记:平台/nuttx/NuttX/CMakeLists.txt87-135创建内置应用程序表
硬件抽象层
硬件抽象层提供特定于板卡的配置、内存布局和驱动程序接口。每个板卡通过链接器脚本和配置文件定义其内存映射、外设配置和优化设置。
| 成分 | 目的 | 关键文件 |
|---|---|---|
| 内存布局 | 定义闪存/RAM 区域、ITCM/DTCM 分配 | script.ld,memory.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 接口使用。

内置应用程序系统通过基于模板的代码生成来工作:
- 模块属性:每个 PX4 模块定义
MAIN、PRIORITY和STACK_MAIN属性 - 模板处理:带有模块信息的CMake 流程
.bdat.in和模板.pdat.in - 代码生成:为运行时注册创建应用程序表和函数原型
- 平台集成:NuttX 使用内置注册表系统,而 POSIX 使用函数指针映射
调试基础设施
平台抽象包括具有特定于板的配置、SVD(系统视图描述)文件和调试器集成的全面调试支持。
| 调试组件 | 目的 | 配置 |
|---|---|---|
| GDB 集成 | 源代码级调试 | .gdbinit,launch.json |
| SVD 支持 | 外围寄存器查看 | 特定于主板的 SVD 文件 |
| RTOS 意识 | 线程/任务调试 | jlink-nuttx.so插件 |
| 内存映射 | 地址空间可视化 | 链接器脚本符号 |
调试配置生成
调试系统根据主板特性自动生成 VSCode 和 GDB 配置:

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

被折叠的 条评论
为什么被折叠?



