NASA F'项目中的速率组(Rate Group)设计模式详解

NASA F'项目中的速率组(Rate Group)设计模式详解

fprime F麓 - A flight software and embedded systems framework fprime 项目地址: https://gitcode.com/gh_mirrors/fpr/fprime

速率组概述

在嵌入式软件开发中,经常需要以固定频率执行某些操作。NASA F'框架提供了一种称为"速率组"(Rate Group)的机制来管理这些基于时间的操作。速率组允许开发者将需要以相似频率运行的操作分组管理,例如控制算法可以运行在10Hz,遥测采集运行在1Hz,后台任务运行在0.1Hz等。

速率组架构

核心组件

速率组系统由三个主要组件构成:

  1. 速率组驱动器(RateGroupDriver):作为整个系统的"时钟"源,通常由系统定时中断或其他可靠时钟源驱动。它负责将基础时钟信号分频为多个较慢的重复信号。

  2. 主动速率组(ActiveRateGroup):包含多个输出Sched端口,以特定频率向这些端口发送消息。连接到这些端口的组件可以按此频率执行重复操作。

  3. 被动速率组(PassiveRateGroup):与主动速率组功能类似,但执行方式不同。

速率组架构示意图

时钟源与分频机制

速率组驱动器需要一个系统时钟源,该时钟源频率应是所有速率组所需频率的公倍数。这个信号驱动速率组驱动器的CycleIn端口,并被分频为多个子信号发送给各个速率组。

典型实现中会有一个专门的时钟组件,负责在系统时钟和速率组驱动器的CycleIn端口调用之间进行转换。在参考实现中,通过循环调用CycleIn端口并休眠系统时钟时间来模拟系统驱动的时钟。

主动与被动速率组对比

被动速率组特点

  • 在调用者上下文中同步执行
  • 所有工作(包括连接的组件)都在同一线程中完成
  • 优点:执行同步且优先级高
  • 缺点:必须确保工作快速完成,否则会阻塞其他速率组

主动速率组特点

  • 在独立线程中运行
  • 存在系统驱动和执行之间的时间抖动
  • 多个主动速率组可以同时启动
  • 不会因工作阻塞而影响其他速率组执行

当速率组的同步工作时间超过其周期时间时,会发生"速率组滑移"(rate group slip),并产生WARNING_HI事件。频繁滑移表明系统无法跟上重复工作,需要调整周期时间或将组件移至更慢的速率组。

设计最佳实践

线程优先级设置

主动速率组的线程优先级通常应设置为系统中最高,因为:

  1. 它们本身开销较低
  2. 它们启动的组件可能具有高优先级
  3. 频率越高的速率组优先级应越高

组件连接顺序

主动速率组按顺序向每个连接的组件发送消息。因此:

  • 高优先级子组件应连接到较低索引的Sched端口
  • 低优先级子组件应连接到较高索引的Sched端口

主动与被动组件选择

  • 被动组件:在速率组上下文中同步运行,便于检测工作是否超时,但会顺序执行
  • 主动组件:接收消息后在自己的线程中运行,可以并发执行,但难以检测工作是否超时

参考实现分析

在参考应用Ref中,速率组用于驱动多个系统组件和SignalGen演示组件。blockDrv组件驱动速率组驱动器,后者再驱动主动速率组,进而驱动各个组件。

典型实现模式包括:

  1. 定义速率组拓扑连接
  2. 实现调度处理程序
  3. 配置适当的时钟分频比
  4. 设置合理的线程优先级

常见问题与解决方案

  1. 速率组滑移

    • 增加周期时间
    • 将部分组件移至更慢的速率组
    • 优化组件执行效率
  2. 执行顺序问题

    • 调整组件连接顺序
    • 合理设置线程优先级
  3. 时间抖动

    • 对于时间敏感任务使用被动速率组
    • 确保系统时钟稳定可靠

速率组模式是NASA F'框架中管理周期性任务的核心机制,合理使用可以构建出高效可靠的嵌入式系统时序架构。

fprime F麓 - A flight software and embedded systems framework fprime 项目地址: https://gitcode.com/gh_mirrors/fpr/fprime

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

仰北帅Bobbie

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值