11.2 基于FreeRTOS的软件架构设计
在完成机器人系统的功能与实时性分解后,软件架构设计是将理论分析转化为可实施、可维护且满足确定性要求的软件蓝图的关键步骤。基于FreeRTOS的架构设计,其核心在于将不同实时性等级的功能模块映射为具体的RTOS任务,并定义这些任务之间的层级关系、通信路径与资源边界。本小节提出一种适用于移动机器人控制系统的三层式软件架构,并详细阐述各层的职责、任务划分策略及关键设计参数的确立方法。
11.2.1 总体架构:三层式设计模型
为达成高内聚、低耦合和清晰的实时性保障,本设计采用分层架构。该架构垂直划分为三个层次,水平方向则通过FreeRTOS提供的通信与同步原语进行连接。这种结构有效隔离了硬件依赖性、实时调度逻辑和高级应用算法。
[应用算法层] |--- 全局路径规划任务 (非实时) |--- 人机交互任务 (非实时) | [RTOS任务层] <---[FreeRTOS内核调度与通信]---> |--- 局部路径规划任务 (软实时) |--- 传感器融合任务 (软实时) |--- 导航控制任务 (软实时) |--- 电机伺服控制任务 (硬实时) |--- 安全监控任务 (硬实时) |--- 系统监控任务 (非实时) | [硬件抽象层] |--- 电机驱动器封装模块 |--- 传感器(编码器/IMU)驱动模块 |--- 通信(UART/SPI/I2C)驱动模块 `--- 定时器/PWM/ADC 配置模块1. 硬件抽象层
此层是架构的基石,直接与微控制器外设寄存器交互。其核心职责是提供稳定、统一且线程安全的硬件访问接口,并对上层隐藏硬件细节。
- 设计原则:
- 模块化:每个外设(如电机PWM接口、编码器定时器、IMU的SPI总线)由一个独立的C模块管理。
- 可重入性与线程安全:驱动程序必须考虑多任务并发调用。对于共享外设(如一个SPI总线连接多个传感器),需在驱动内部使用互斥量或调度器锁定进行保护。
- 中断服务程序最小化:ISR仅完成最紧急的数据采集或状态记录(如读取编码器计数值、记录碰撞传感器边沿),并通过队列、任务通知或直接内存写入的方式,将事件或数据快速传递给RTOS任务层的消费者任务进行后续处理。
2. RTOS任务层
这是架构的核心,承载了所有具有明确实时性要求的核心功能。每个任务是一个独立的执行线程,拥有自己的栈空间、优先级和状态机。本层的设计直接决定了系统的实时性能。
- 设计原则: