程序流监控:AUTOSAR CP 功能安全在裸机 MCU 上的实现(理论篇)

代码的移植和具体架构在实践篇可见:程序流监控 ------ AUTOSAR CP 功能安全在裸机 MCU 上的实现:实践篇-CSDN博客

引言

功能安全标准 ISO 26262 Part 6(软件层面)明确提出了多种用于错误探测的安全机制,其中程序流监控(Program Flow Monitoring)是检测软件运行时逻辑错误、时序错误和死锁的关键手段。

本文主要探讨在 AUTOSAR CP(Classic Platform)以及 AP(Adaptive Platform)两种典型架构下,如何实现程序流监控。由于 CP 平台广泛用于安全等级要求高、资源受限的 MCU 环境(如底盘、动力域),本文将以 CP 场景为重点,深入剖析其软件栈、监控原理、状态机及接口设计。

本项目旨在理论结合实践,将程序流监控的核心思想移植到一个低成本的裸机MCU平台上,构建一个轻量级但可靠的运行时监控框架。本文将分为两大部分:

  • 理论篇:梳理程序流监控的核心概念、AUTOSAR WdgM架构及三种监督维度。

  • 实战篇:介绍项目的背景、目标、难点及在裸机环境下的代码移植与架构设计。

第一部分:理论篇 - 程序流监控核心概念

1.1 总体工作栈

在 AUTOSAR CP 场景中,程序流监控依赖于软件与硬件的协同工作。从整体上看,其工作栈可分为硬件层和软件层两部分。

硬件部分:即通常所说的硬件看门狗(Hardware Watchdog)。它本质上是一个独立运行的定时器,初始化时被设置一个超时值(timeout)。使能后,看门狗开始倒计时。如果软件在超时前未执行"喂狗"(重置定时器),硬件将触发 MCU 复位,使系统进入安全状态。

软件部分:遵循 AUTOSAR CP 架构,从上至下包括:

  • 应用/BSW层:被监控对象,通过调用WdgM_CheckpointReached()上报执行到某个"检查点"。

  • WdgM(Watchdog Manager):软件裁判-核心模块,收集各监督实体(SE)的检查点信息,执行负责监控软件运行状态,并根据结果决定是否喂狗。

  • WdgIf(Watchdog Interface):接口适配,为WdgM提供统一的喂狗接口,屏蔽底层硬件差异。

  • Wdg Driver:真正操作硬件看门狗寄存器的底层驱动。

正常流程:应用/BSW 上报运行信息(检查点)→ WdgM 判断程序流正确 → WdgM 调用 WdgIf → WdgIf 调用 Wdg Driver → 驱动执行喂狗。

异常流程:WdgM 检测到错误 → 停止喂狗或强制 timeout=0 → 硬件看门狗超时复位;也可通过 RTE 通知其他模块(如 DEM)记录故障。

1.2 核心软件模块详解

1.2.1 WdgM 模块(Watchdog Manager)

WdgM 是整个程序流监控的"裁判"。它的职责包括:

  • 收集证据:接收各个被监控实体上报的"检查点"。

  • 执行监督:根据配置对每个实体进行 Alive、Deadline、Logical 三种维度的判断。

  • 状态管理:维护每个监督实体的本地状态,并汇总生成全局状态。

  • 动作触发:若全局状态为 OK,则通过 WdgIf 喂狗;否则执行错误处理(通知 DEM、停止喂狗、立即复位等)。

关键术语

  • SE(Supervised Entity,监督实体):被 WdgM 监控的一个软件实体,拥有唯一标识符。一个 SE 可以代表一个 SW-C(软件组件)、一个 BSW 模块、一个 CDD(复杂设备驱动)中的一个可运行实体,或者一组检查点的集合。 注:SE 与 AUTOSAR 架构模块之间无固定映射关系,完全取决于设计需要。

  • CP(Checkpoint,检查点):位于被监控实体内的一个特定位置,当程序执行到该位置时,会主动向 WdgM 报告"我已到达此处"。报告动作通过调用 WdgM_CheckpointReached(SE_ID, CP_ID) 实现。

1.2.2 三种监督维度

WdgM 通过三种互补的机制来探测程序流异常:

  • 阻塞 (Alive Supervision):任务不再运行或陷入死循环。监控程序是否周期运行。

  • 调度超时 (Deadline Supervision):任务运行了,但未在规定时间内完成。监控程序运行时间是否正确。

  • 流程错误 (Logical Supervision):任务的执行顺序或状态机跳转非法。监控程序执行逻辑是否正确。

每种监督可独立配置于某个 SE,也可组合使用。

1.2.3 本地状态(Local Status)与全局状态(Global Status)

WdgM 的状态管理分为两个层级:

  • 本地状态 --- 描述单个 SE 的程序运行状况,包含四种状态:

  • 全局状态 --- 描述所有使能 SE 的整体状况,用于最终决策是否喂狗

1.3 核心工作流与状态机

1.3.1 正常程序流监控的工作流程

程序流监控的正常运行遵循一个闭环的"上报-评估-决策-动作"流程,具体步骤如下:

(1)检查点上报

被监控的软件实体(SE)在执行到预定义的检查点(CP)时,主动向 WdgM 报告"我已到达此处"。这一上报动作携带两个关键信息:哪个 SE(标识符)以及哪个 CP(标识符)。

(2)证据收集与更新

WdgM 收到上报后,根据该 SE 配置的监督类型,更新对应的运行证据:

  • 若使能了 Alive 监督,则累加该 SE 在当前监控周期内的检查点出现次数。

  • 若使能了 Deadline 监督,则根据上报的 CP 是"起点"还是"终点",记录时间戳或计算时间差。

  • 若使能了 Logical 监督,则检查本次 CP 与上一次 CP 的转移是否在合法转移表中。

注意:此阶段仅更新证据,不立即判定错误,以避免因短时抖动导致误判。

(3)周期性评估

WdgM 由一个独立的周期时钟(例如每隔 1ms 或 5ms)触发评估任务。在每个评估周期内,WdgM 遍历所有已激活的 SE:

对于每个 SE,根据当前累积的证据,按照配置的监督规则计算其本地状态(OK / FAILED / EXPIRED / DEACTIVATED)。

具体判定逻辑

  • Alive:比较本周期内检查点实际出现次数与期望的最小/最大次数。若在容忍范围内则 OK,否则根据缺失次数决定 FAILED 或 EXPIRED。

  • Deadline:若起点与终点之间的时间差超过了配置的最大允许值,则直接置为 EXPIRED。

  • Logical:若检查点转移非法,则直接置为 EXPIRED。

  • 若某个 SE 未使能任何监督,则其本地状态为 DEACTIVATED。

(4)全局状态汇总

在完成所有 SE 的本地状态评估后,WdgM 按照以下规则汇总全局状态:

  • 若所有 SE 均为 OK 或 DEACTIVATED → 全局状态为 OK。

  • 若至少一个 SE 为 FAILED,且没有 EXPIRED → 全局状态为 FAILED。

  • 若至少一个 SE 为 EXPIRED,且该 SE 的错误次数未超过全局容忍值 → 全局状态为 EXPIRED。

  • 若至少一个 SE 为 EXPIRED,且错误次数超过容忍值 → 全局状态为 STOPPED。

初始状态为 DEACTIVATED。

(5)决策与动作

根据全局状态,WdgM 执行相应的动作:

  • 若全局状态为 OK:则允许喂狗(通过 WdgIf 触发硬件看门狗刷新)。

  • 若全局状态为 FAILED:通常仍允许喂狗,但需记录故障信息(例如通知 DEM),因为 FAILED 表示存在可容忍的 Alive 缺失,系统尚未进入危险状态。

  • 若全局状态为 EXPIRED 或 STOPPED:则停止喂狗,或者强制将硬件看门狗的超时值设为 0,导致看门狗立即超时复位 MCU;同时可通过 RTE 通知其他模块执行恢复或记录故障。

1.3.2 状态机描述

(1)本地状态机(单个 SE)

每个 SE 的本地状态在评估周期内根据监督结果进行转换。标准转换规则如下:

  • DEACTIVATED → OK:当 SE 被使能且首次评估无任何错误时。

  • OK → FAILED:当出现 Alive 监督的计数缺失,但缺失次数仍在配置的容忍值以内。

  • FAILED → OK:当后续评估周期中 Alive 计数恢复正常(例如缺失次数归零)。

  • FAILED → EXPIRED:当 Alive 缺失次数累积超过容忍值,或者出现 Deadline/Logical 错误。

  • OK → EXPIRED:直接出现 Deadline 或 Logical 错误。

  • 任何状态 → DEACTIVATED:当 SE 被动态去使能。

(2)全局状态机(系统级)

全局状态由所有 SE 的本地状态汇总决定,其转换规则如下:

  • DEACTIVATED → OK:至少一个 SE 被使能且其本地状态为 OK,其余为 DEACTIVATED。

  • OK → FAILED:至少一个 SE 进入 FAILED 状态,且没有 SE 为 EXPIRED。

  • FAILED → OK:所有 FAILED 的 SE 恢复为 OK。

  • FAILED → EXPIRED:至少一个 SE 进入 EXPIRED 状态,且错误次数未超限。

  • EXPIRED → STOPPED:某个 SE 的 EXPIRED 错误累积次数超过全局容忍值。

  • STOPPED → (复位):系统通常触发硬件复位,或进入安全状态后不再恢复。

第二部分:AP 场景下的程序流监控(简述)

AP 场景(Adaptive Platform)通常运行在 POSIX/Linux 类系统上,面向高性能计算(如自动驾驶)。其程序流监控架构如图 9 所示。

软件模块:主要由 PHM(Platform Health Management)执行监控,SM(State Management)管理状态,EM(Execution Management)负责进程/平台重启。

故障处理链路

  • 链路一:PHM 检测错误 → 报告 SM → SM 执行注册的处理程序(停止/重启应用)。

  • 链路二:若 SM 超时无响应 → PHM 直接通知 EM → EM 执行停止/重启/平台复位。

  • 链路三:若 EM 也出错 → PHM 触发硬件看门狗复位整个平台。

AP 场景中的监控术语(SE、Checkpoint)和状态机(本地/全局状态)与 CP 基本一致,故不再赘述。

第三部分:程序流监控总结

程序流监控的核心目标是在运行时及时发现软件执行的非预期行为(逻辑错、时序错、死锁),并通过硬件看门狗这一安全可靠的最后防线,将系统引导至安全状态。

  • CP 场景:依赖 WdgM、WdgIf、WdgDriver 三层结构,适合资源受限、实时性要求高的 MCU。

  • AP 场景:依赖 PHM、SM、EM 模块,适合复杂操作系统环境下的进程级健康管理。

但需要注意的是,仅仅理解软件模块和硬件看门狗是不够的。实际工程中必须结合系统设计参数(如故障处理时间间隔 FHTI,Fault Handling Time Interval)来正确配置:

  • 看门狗的超时时间(应大于最大正常执行时间,小于 FHTI)

  • 监督周期与任务周期的匹配

  • Alive 的容忍次数与 Deadline 的裕量

只有软硬件参数协同优化,才能达到最优的程序流监控效果。

相关推荐
SilentSamsara2 小时前
Linux 文件系统入门:目录结构不是随便画的
linux·运维·服务器
小天互连即时通讯2 小时前
政府及企业场景下如何选即时通讯工具:从安全可控到协同效率的实用判断
安全
编程之升级打怪2 小时前
单片机SPI硬件接口的要点
嵌入式硬件
陳10303 小时前
Linux:进程状态和优先级
linux·运维·服务器
网络小白不怕黑3 小时前
二、初识rocky linux
linux·运维
monana63 小时前
Linux离线安装nvm 和 node
linux·运维·服务器
风子杨yxf7713 小时前
linux下oracle开机自启动以及关机自关闭数据库,并发送邮件通知
linux·运维·数据库·oracle·自启动·发邮件·自关闭
hnmpf3 小时前
linux系统离线环境安装mysql问题
linux·运维·mysql
m0_738120723 小时前
渗透测试基础ctfshow——Web应用安全与防护(五)
前端·网络·数据库·windows·python·sql·安全