只使用 LibXR
在已有工程中使用 LibXR 的核心 API、外设驱动与中间件。
LibXR 是跨平台的 C++ 兼容层,包含外设驱动、数据结构、通信中间件、操作系统封装与数学工具,以及 USB 协议栈 XRUSB。
CodeGenerator 和 XRobot 是配合 LibXR 使用的两个命令行工具:CodeGenerator 由 STM32CubeMX 工程生成外设对象和入口函数 app_main,XRobot 负责拉取模块、把每个模块锁定到具体的提交,并根据配置生成主函数 XRobotMain。
这里的终端是 LibXR 编译成 WebAssembly 后在浏览器中运行的程序。Terminal 提供行编辑、历史记录和路径补全,按路径运行 RamFS 中的命令。
在单片机上,同一个 Terminal 通过串口或 USB 虚拟串口提供命令行。
MCU 上的串口驱动让接收 DMA 一直运行。中断根据 DMA 的写指针算出新增的字节,用 PushBatch 写入 ReadPort 的环形队列 SPSCQueue,再调用 Publish() 完成挂起的读请求。
接收路径中没有停下 DMA 再重新启动的一步,软件只负责追赶硬件的写指针。
Topic 是进程内、精确类型的发布订阅通道。发布时同步分发给已注册的订阅者,订阅者以同步、异步、队列或回调四种方式之一接收。
Linux 上的 LinuxSharedTopic 把数据放在共享内存的槽位中,订阅者通过描述符读取同一块内存,进程之间不复制数据。
BSP 在 Modules/modules.yaml 中列出需要的模块。xrobot setup 拉取模块并把每个模块锁定到 xrobot.lock 中的具体提交,xrobot gen 根据 User/ 下的配置生成主函数 XRobotMain。
STM32 BSP 的 CI 调用共享工作流:检查生成的文件与提交一致,构建每份配置,并在推送到 master、打 v* tag 或发布 Release 时上传固件。
XRUSB 是 LibXR 中的 USB 设备协议栈,提供 CDC、HID、UAC、GSUSB、CMSIS-DAP v1/v2 和 DFU 等设备类,一个设备可以同时包含多个设备类。
调试接口部分用 GPIO 时序实现 SWD 与 JTAG,DAPLink 设备类通过它们访问目标芯片,例如读取 DP 的 IDCODE。
官方模块源包含 IMU、磁力计、气压计、光流、激光测距、灰度循迹、遥控接收、显示屏和姿态解算等模块。
一份配置选择模块并填写参数,xrobot gen 由它生成一台机器人的主函数;不同的配置组成不同机器人的固件。
四个入口对应四类工程;场景列表给出常见任务的起点。
在已有工程中使用 LibXR 的核心 API、外设驱动与中间件。
由 STM32CubeMX 工程生成外设对象、入口函数 app_main,并接入 CMake 构建。
模块的拉取与锁定、配置和主函数生成。
新操作系统和新芯片需要实现的系统层与外设驱动。
XR_REGISTER 注册硬件,xrobot gen 生成按配置顺序构造实例的 XRobotMain。driver 目录下,每个平台一个子目录。XRobot is all you need