尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

汽车电子ISO 26262功能安全系列(第25期):软件开发全景——从SSR到代码实现

汽车电子ISO 26262功能安全系列(第25期):软件开发全景——从SSR到代码实现 ISO 26262 Part 6软件级开发就是教你怎么写“飞机维修手册”级别的代码——从需求到架构从编码到测试每一步都有严格的要求。软件开发在V模型里是什么位置ISO 26262 Part 6位于V模型的左侧下半部分与硬件开发Part 5并行进行。Part 6覆盖了软件开发的完整生命周期Part 6的六大核心活动SSR规范→软件架构设计→软件单元设计与实现→软件单元验证→软件集成验证→嵌入式软件测试第一步从TSR导出SSR——“翻译”成软件能听懂的话SSR在整个需求链中的位置TSR说的是“系统要做什么”SSR说的是“软件具体要实现什么”。软件安全需求 安全相关功能 安全机制ISO 26262 Part 6指出SSR应该包含两类内容SSR 安全相关的软件功能需求 软件安全机制安全相关的软件功能包括功能类型大白话示例️使标称功能安全执行“正常功能要安全地跑”操作系统、时钟管理、运行模式控制达到或维持安全/降级状态“出事了怎么安全地停下来”失效后功能降级管理、安全状态行为探测硬件故障“硬件坏了软件要能发现”电源监控、时钟监控探测软件自身故障“软件自己出问题了也要能发现”程序流监控、合理性校验、上电自检️生产/服务支持“造车和修车时能用”车载通信、车辆诊断软件修改支持“允许后期改配置”可配置参数、标定数据实战从TSR到SSR的“翻译”过程以ACC控制器的跟车距离计算功能为例层级需求内容大白话TSR“控制器应在300ms内计算出安全跟车距离”“系统要算得快”SSR-01“软件应实现跟车距离计算算法执行时间≤200ms”“软件要在200ms内算完”SSR-02“软件应对计算结果进行合理性校验异常时触发报警”“算出来不对劲要报警”SSR-03“软件应实现程序流监控检测计算任务是否超时”“盯着计算任务别卡死”一个TSR衍生出3条SSR——每条都对应具体的软件实现方案。第二步软件架构设计——“搭好架子再写代码”SSR写完之后就要开始软件架构设计了。软件架构设计的核心任务根据ISO 26262 Part 6软件架构设计要完成分配SSR到软件组件把每条SSR分配给具体的软件模块定义组件接口模块之间怎么通信实现安全隔离FFI不同ASIL等级的组件要“各管各的”免于干扰FFI架构设计的“安全红线”FFIFreedom from Interference免于干扰是ISO 26262中软件架构设计的核心概念。FFI的核心思想不同ASIL等级的软件组件必须在时序、内存、信息交换三个维度上互相隔离低安全等级的故障不能传染给高安全等级。可能导致干扰的三大类故障故障类别具体表现后果⏱️时序与执行问题阻塞、死锁、活锁高ASIL任务被饿死内存错误数据损坏、栈溢出、非法内存访问高ASIL数据被篡改信息交换异常数据重复、丢失、插入高ASIL收到错误指令如何实现FFI隔离手段大白话实现方式内存分区“不同模块住不同房间”编译器内存映射️MPU内存保护单元“房间门上有锁没钥匙进不去”硬件MPU阻止跨区访问⏱️时间隔离“轮流用CPU谁也别抢谁的”独立时间片调度实战ACC控制器软件架构ASIL-D的代码和QM的空调代码在物理内存上被MPU彻底隔开——空调代码就算写飞了也碰不到跟车距离计算的数据。第三步编码实现——“写出不会杀人的代码”架构搭好了终于可以写代码了。但功能安全的代码不是“能跑就行”。安全编码规范MISRA是“必修课”MISRA C是汽车行业安全关键系统C语言编码的黄金标准。MISRA C:2025的最新数据统计项数据总指南数223条指令Directives22条规则Rules201条MISRA C:2025新增了4条规则最重要的是对联合体union非活跃成员读取的限制——这在嵌入式系统中是常见的安全隐患。MISRA为什么重要在功能安全项目中不遵守MISRA的代码审核根本过不了。静态分析工具如Polyspace、PC-lint、Parasoft会自动检查MISRA合规性。功能安全代码的核心原则永远不要相信输入数据的大小。每一个可能溢出、可能越界、可能空指针的地方都要做检查。第四步软件单元验证——“测到100%才算完”代码写完了但没测过的代码等于不存在。单元测试覆盖率要求ISO 26262 Part 6对不同ASIL等级的代码覆盖率有明确要求ASIL等级语句覆盖分支覆盖MC/DC覆盖ASIL A推荐推荐推荐ASIL B强烈推荐强烈推荐推荐ASIL C强烈推荐强烈推荐强烈推荐ASIL D强烈推荐强烈推荐强烈推荐100%ASIL-D要求MC/DC达到100%——这意味着每一个条件的所有可能组合都必须被测试覆盖。MC/DC是什么MC/DC Modified Condition/Decision Coverage修正条件/判定覆盖它是最严格的代码覆盖率标准。举个栗子if (A B) { // 执行某操作 }要满足MC/DC你需要测试4种组合测试用例AB结果覆盖了什么TC-01✅ TRUE✅ TRUETRUE条件为真TC-02❌ FALSE✅ TRUEFALSEA单独影响结果TC-03✅ TRUE❌ FALSEFALSEB单独影响结果TC-04❌ FALSE❌ FALSEFALSE条件为假对于复杂的逻辑测试用例数量会指数级增长——这就是为什么ASIL-D的单元测试那么耗时。实战ACC控制器单元测试用例用例ID测试函数输入预期输出覆盖目标TC-001calculate_following_distance前车距离50m相对速度0跟车距离50m语句覆盖TC-002calculate_following_distance前车距离50m相对速度-10m/s跟车距离45m分支覆盖TC-003calculate_following_distance前车距离50m相对速度10m/s跟车距离55m分支覆盖TC-004calculate_following_distance前车距离5m异常值触发报警进入安全状态MC/DC第五步软件集成与嵌入式测试单元测试通过后还要进行集成测试和嵌入式软件测试。集成测试验证多个软件模块组合在一起后是否正常工作——模块A的输出是否符合模块B的输入要求接口时序是否正确嵌入式软件测试则是把软件烧录到真实硬件上在目标ECU上运行测试——验证软件在真实硬件上的行为是否与PC仿真一致包括时序、内存、中断等硬件相关特性。一个常见陷阱PC上跑得好好的代码烧到ECU上可能因为时序不同而出问题——这就是嵌入式软件测试的价值所在。
返回列表