程序流监控 —— AUTOSAR CP 功能安全在裸机 MCU 上的实现:实践篇

AUTOSAR源码如下:

AUTOSAR-CP的程序流监控(PFM)源码资源-CSDN下载

关于AUTOSAR CP功能安全的程序流监控的原理如下:

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

1. 代码整体架构

1.1 模块分层

1.2 配置数据流(编译期 → 运行时)

1.3 核心数据结构关系

2. 监督机制的核心实现

2.1 三种监督的触发时机与判定函数

2.2 状态转换流程

(1)单个 SE 的局部状态机
(2)全局状态机(汇总所有激活 SE)

2.3 关键函数调用链

初始化链:

检查点上报链:

主周期处理链:

3. 主要技术难点与解决方案

3.1 裸机环境下的时间基准与调度

难点:无 RTOS,需要精确的 1ms、10ms 周期性调度。

解决方案:

  • 使用硬件定时器产生 1ms 中断,在 ISR 中递增全局变量 WDGM_udteOsTickCounter。

  • 主循环中采用绝对时间点比较实现非阻塞调度:

3.2 Alive 监督的相位对齐问题

现象:监督窗口与任务周期相位错位,导致一个窗口内统计到的 Alive 次数不稳定(有时多一次,有时少一次)。

解决方案:

  • 将 SupervisionReferenceCycle 设置为任务周期的整数倍(例如 10ms 任务 → 100ms 窗口)。

  • 引入 MinMargin / MaxMargin 允许合理偏差。

  • 增加 FailedAliveSupervisionReferenceCycleTol 容限,避免瞬时抖动导致立即过期。

3.3 Deadline 监督的起点覆盖漏洞

漏洞描述 :若程序在未到达终点前再次上报起点,原实现会直接覆盖 LastTickValue,导致终点计算的时间差异常大(起点被后移)。

解决方案 :引入状态机,每个 Deadline 监督项维护隐含状态(通过 LastTickValue 是否为 0 判断):

  • IDLE (LastTickValue == 0):允许记录起点。

  • START_RECORDED (LastTickValue != 0):

    • 若再次收到起点 → 视为非法,设置 SubstateDeadline = INCORRECT。

    • 若收到终点 → 正常计算,完成后将 LastTickValue 清零(回到 IDLE)。

代码体现 :在 WDGM_u8DeadlineMonitoring 中,仅当 LastTickValue == 0 时才记录起点;若已记录又收到起点,直接报错。

4. 项目结果

4.1 功能验证结果

4.2 可复用性

  • 新增 SE 只需在 WdgCfg.c 中添加配置数组,修改 Length_ 宏。

  • 支持多模式(通过增加 WdgM_Mode 数组项)。

  • 硬件驱动已抽象为函数指针,可替换为真实 FU7504 WDT 驱动。

5. 总结

本项目成功在裸机 MCU 上实现了 AUTOSAR CP 风格的轻量级程序流监控框架。通过合理裁剪和状态机设计,解决了裸机调度、相位对齐、时间戳管理等工程难题。最终交付了一套可配置、可调试、可扩展的 WdgM 模块,为功能安全软件监控提供了低成本、高可靠的基础组件。

相关推荐
Nuanyt5 小时前
Agent 学习笔记(下篇三):上线工程、进阶选择与操作界面(Stage 7 / 7.5 / 8 + 延伸路线)
笔记·python·学习·memory·aiagent·harness
szxinmai主板定制专家6 小时前
X86 工控机 vs RK3588 异构主控:AMR 控制器 BOM、散热、长期运维对比
运维·stm32·单片机·嵌入式硬件·fpga开发·am62x
叼烟扛炮6 小时前
Linux 学习笔记(四十一):TCP 并发演进——从单进程到多线程服务器
linux·运维·服务器·网络·笔记·学习·tcp/ip
叼烟扛炮6 小时前
Linux 学习笔记(四十四):HTTP 协议解析与极简 Web 服务器实战
linux·服务器·学习
songyuc7 小时前
【Manskill3】TableSceneBuilder学习笔记
pytorch·笔记·学习
外收内放8 小时前
Python基础语法练习题(75)
开发语言·python·学习
HQB20268 小时前
屹晶微电子 EG1130|2‑24V 输入 / 最高 28V 输出 内置 MOS 异步升压 DC‑DC|SOT23‑6|摄像头 / 车充 / 电池充电电源
嵌入式硬件·硬件工程
kyrie_sakura9 小时前
大模型学习20 大模型学习 - LangChain3 - Agents
人工智能·学习·langchain
zroooo10 小时前
计算机学习-知识庞大而繁杂
笔记·学习
泛凡(Linyongui)10 小时前
基于 CW32L010 的智能厨卫调温旋钮方案--低成本 EC21 编码旋钮全解析
单片机·嵌入式硬件·c#