征程6 MCU safetylib sample

1. 功能概述

本文的safetylib sample实现MCU Domain FCHM硬件故障、软件故障的注入和处理,此处主要介绍该sample的实现与使用方法。

1.1. 软件架构说明

本sample基于MCU CDD FCHM和SafetyLib实现,在示例OS的task文件中,调用SafetyLib的初始化接口,在ISR文件中,调用 CF/NCF中断处理函数,并在NCF中断处理函数中,激活NCF下半部task处理函数。

NCF故障注入和处理流程图:

CF故障注入和处理流程图:

NCF实际发生时处理流程图:

CF实际发生时处理流程图:

1.2. 代码位置与目录结构

代码路径

注意

本sample和MCU主线共代码,无专用特殊代码,其中,FuSa功能实现路径为SafetyLib目录,集成代码为Target目录。

2. 编译

2.1. 编译环境

编译依赖GreenHill编译器或HighTech编译器。

2.2. 编译说明

目前地平线的GreenHill编译器编译示例如下:

arduino 复制代码
进入编译目录,执行如下命令:

export GHS_PATH="ghs_path"  //如果使用GreenHill编译器,执行编译命令之前,需先设置GreenHill编译器GHS_PATH环境变量,
                            //其中ghs_path为编译器实际路径
cd {mcu_base_dir}/Build/Autosar    //mcu_base_dir为mcu代码库路径
python build_autosar.py product matrix A j6p //此处以编译matrix A为例。

注意

详细的MCU编译方法,请参考文档 MCU代码编译指南。

3. 运行

3.1. 支持平台

支持所有J6X单板。

3.2. 硬件环境搭建

PC串口连接单板MCU串口,启动单板。

3.3. 运行指南

运行方法

在MCU串口执行命令。

Main Domain CF测试命令:

arduino 复制代码
stl_faultinject 1 1 0
//其中,第一个参数可更换为1-72

MCU Domain NCF测试命令:

复制代码
stl_faultinject 73 2 0

MCU Domain CF测试命令:

复制代码
stl_faultinject 73 1 0

3.4. 运行结果说明

以下为1次故障注入和运行日志示例:

ini 复制代码
horizon:/$ stl_faultinject 1 1 0 //注入Main Domain CF示例
[014900.508469 0]Inject fault, FchmId:1, ErrCode:1, ErrSrc:0
[014900.530596 0][M][time_1: 014900 s, 509 ms] Fchm Info occur (1, 1, 2750, 96)
[014900.531670 0][M][time_2: 014900 s, 509 ms] 96-1-CF Occur (1, 1, 2750), Payload(00-00-00-00 00-00-00-00 00-00-00-00 00-00-00-00)
[014900.533144 0]Customer handle(77, 1, 2)

horizon:/$ stl_faultinject 73 1 0 //注入MCU Domain CF示例
[014792.558510 0]Inject fault, FchmId:73, ErrCode:1, ErrSrc:0
[014792.601538 0][M][time_1: 014792 s, 559 ms] Fchm Info occur (73, 1, 2749, 124)
[014792.602636 0][M][time_2: 014792 s, 559 ms] 124-1-CF Occur (73, 1, 2749), Payload(00-00-00-00 00-00-00-00 00-00-00-00 00-00-00-00)
[014792.604182 0]Customer handle(77, 1, 2)

horizon:/$ stl_faultinject 73 2 0 //注入MCU Domain NCF示例
[014795.735909 0]Inject fault, FchmId:73, ErrCode:2, ErrSrc:0
[014795.765093 0][M][time_1: 014795 s, 736 ms] Fchm SxInfo occur (73, 2, 10)
[014795.766138 0][M][time_2: 014795 s, 743 ms] 124-1-NCF Occur (73, 2, 10), Payload(00-00-00-00 00-00-00-00 00-00-00-00 00-00-00-00)
[014795.767592 0]Customer handle(0, 65535, 2)
[014795.815483 0][M][time_3: 014795 s, 743 ms] 124-1-NCF Fixed (73, 2, 10), Payload(00-00-00-00 00-00-00-00 00-00-00-00 00-00-00-00)
[014795.817132 0]Customer handle(0, 65535, 1)

故障处理日志中:
        (1, 1, 2750, 96)四个数据,分别为FchmId、ErrCode、FaultSeq、ModuleId。FaultSeq表示当前系统自启动以来,共触发过CF的累计次数
        96-1-CF/124-1-NCF,96和124表示ModuleId, 1表示EventId

注意

错误码以及运行日志,仅为参考示例。最新代码中,错误码配置可能改变,从而导致日志信息不同,此处不再更新。

3.5. 运行参数说明

本stl_faultinject运行参数如下:

参数名 说明 是否必须 备注
第一个参数 指定错误的FchmId 是
第二个参数 指定错误的ErrCode 是
第三个参数 指定错误的ErrSrc,针对有错误源合并的错误有效,如果无合并,填写0即可 是
相关推荐
東隅已逝,桑榆非晚1 小时前
算法6. 双指针法-查找总价格为目标的两个商品
c++·学习·算法
Eyfcom1 小时前
〖物联网终端实战 01〗UWB 室内高精度定位:仓储 AGV 与人员的厘米级轨迹追踪
物联网·算法·物流系统·快递系统·跨境物流快递系统·物联网终端实战
bro_Java6662 小时前
《排序的底层逻辑:比较、交换与分治》
java·算法·排序算法
爱喝雪碧的可乐2 小时前
MATLAB
开发语言·算法·matlab
叼烟扛炮3 小时前
Linux 学习笔记(六十):单线程的逆袭——epoll 高并发服务器实战
linux·服务器·网络·笔记·学习·算法
careathers3 小时前
【数据结构】基于比较的排序算法 - 交换排序
数据结构·算法·排序算法
Rabitebla4 小时前
【Linux操作系统】进程篇(十一):进程程序替换——从底层原理到 exec 函数族
linux·服务器·c++·笔记·学习·算法
tellmewhoisi5 小时前
深度学习0:数学知识:正态分布1
人工智能·深度学习·算法
-梅5 小时前
算法(1) 动态规划
算法·动态规划
青少儿编程课堂5 小时前
蓝桥杯·全国青少年信息素养大赛·电子学会Python/C++考级:Bellman-Ford与SPFA含负权最短路及负环检测全解析
c++·python·算法·bfs·信息学竞赛