ISO26262-6中软件架构静态和动态设计

汽车   2025-01-23 21:35   上海  

/注明/ 文章内容由汽车功能安全行业工程师口述及参考行业资料整理,仅代表个人观点,如果更好的建议和补充,可以留言互动!

ISO 26262 Part 6 旨在为汽车电子系统的软件开发提供一套完整的功能安全要求和指南,确保软件在汽车运行过程中能够安全、可靠地运行,满足汽车的功能安全需求,降低因软件故障导致的风险,适用于汽车电子电气系统中与安全相关的软件的开发、验证和确认等过程。
其中,ISO 26262 Part 6 Clause 7的几个关键点:
  • 软件架构设计应被开发到能够识别出软件单元的程度。这意味着在进行软件架构设计时,需要将软件系统分解到最小的、可独立测试的软件单元级别,以便于对软件进行开发、测试和维护,也有利于确保软件架构能够满足软件安全需求和其他功能需求,实现对软件功能在软件组件层面的有效分解。

  • 软件安全要求应按层次分配给软件组件,直至软件单元。每个软件组件应按照分配给它的任何需求的最高的 ASIL 等级来进行开发。这样可以保证软件系统中的每个组件都能满足相应的安全要求,从整体上提高软件系统的安全性和可靠性,确保软件在不同安全等级要求下的正确运行,降低因软件故障导致的风险。


  • 软件架构设计应描述软件架构要素的静态设计方面和动态设计方面。


......

今天主要聊聊静态设计和动态设计相关:

静态设计方面


  • 软件单元结构:需清晰描述软件单元的组成结构,包括软件单元的层次划分、模块组成等。软件架构应呈现出清晰的分级层次结构,明确划分不同的软件层次和模块,例如将汽车软件系统分为应用层、中间件层和驱动层等,使软件的组织架构一目了然,便于开发、维护和管理。在比如在汽车电子系统软件架构中,明确划分出传感器数据处理模块、控制算法模块、执行器驱动模块等不同层次的软件单元,以及它们之间的包含或从属关系。
  • 接口定义:详细规定软件单元之间的接口,包括接口的类型(如函数调用接口、消息传递接口等)、接口的参数定义(参数的类型、范围等)、接口的语义(接口实现的功能和行为的说明)。比如,传感器数据处理模块向控制算法模块提供数据的接口,要明确数据的格式、数据的更新频率等信息。
    清晰地定义软件组件的外部接口,包括接口的名称、参数列表、返回值类型等,明确软件组件与外部环境或其他组件之间的交互方式和协议。
    对于嵌入式软件,要专门定义其与外部硬件设备、其他嵌入式软件或系统的接口,涵盖通信协议、信号格式、电气特性等方面的内容。
  • 资源分配:说明软件单元对各种资源的分配情况,如内存资源(每个软件单元占用的内存大小、内存的分配方式等)、存储资源(数据存储的位置、存储容量等)。像在存储控制策略相关数据的软件单元,要指出其占用的内存地址范围和存储容量。对嵌入式软件所需的各类资源进行上限预估,包括执行时间、存储空间(如 RAM 和 ROM)、通信资源等,以便合理分配资源,避免资源不足导致软件运行错误或性能下降。
  • 数据结构:阐述软件单元内部和软件单元之间使用的数据结构,包括数据的组织形式(如数组、链表等)、数据的类型(基本数据类型、自定义数据类型等)。例如,在处理车辆行驶状态数据的软件单元中,说明使用数组来存储不同时刻的车速、加速度等数据,以及每个数据项的数据类型。要对全局变量进行严格管理,明确其名称、数据类型、作用域以及初始化值等,控制全局变量的使用,避免因过多使用导致软件的可维护性和可测试性下降。


动态设计方面


  • 执行行为:描述软件单元在运行时的执行行为,如软件单元的执行顺序、执行的触发条件等。例如,在车辆启动时,先执行系统初始化软件单元,然后根据传感器信号触发相应的功能软件单元。描述软件组件在不同输入和环境条件下的功能行为,包括数据处理流程、算法执行逻辑、状态转换等,例如说明一个发动机控制软件在不同转速、负荷等条件下的控制策略和输出结果。定义软件在遇到异常情况(如硬件故障、数据错误、通信中断等)时的行为,包括错误检测、错误处理、恢复机制等,确保软件在异常情况下能够保持安全状态或进行合理的故障处理。
  • 任务调度:说明软件单元之间的任务调度策略,包括任务的优先级分配(高优先级任务优先执行等)、任务的并发执行方式(多线程、多进程等)。比如,在汽车紧急制动系统中,制动控制任务的优先级高于一些非关键的信息显示任务。
  • 通信机制:介绍软件单元之间的数据通信机制,如实时通信(在规定的时间内完成数据传输)、异步通信(数据传输不依赖于特定的时间顺序)等,以及通信的协议和方式(如 CAN 总线通信协议等)。例如,在汽车的不同电子控制单元之间,通过 CAN 总线进行实时的数据通信。
  • 状态转换:描述软件单元在运行过程中的状态转换情况,包括状态的定义(如初始化状态、运行状态、故障状态等)、状态转换的条件和触发事件。比如,当电池管理系统检测到电池电量过低时,软件单元从正常运行状态转换到低电量报警状态。

相互的关系
软件架构设计的静态和动态设计方面紧密关联、相互影响。
静态设计是动态设计的基础,静态设计所确定的软件单元结构、接口定义、资源分配和数据结构等,为软件运行时的动态行为搭建了框架。比如,软件单元的层次划分和模块组成决定了不同模块在运行时的调用关系,上层模块调用下层模块提供的接口来实现功能。若静态设计中定义了传感器数据处理模块与控制决策模块的接口,动态运行时控制决策模块才能依据接口规则获取传感器数据,进而进行决策。
静态设计对资源的分配,如内存、存储等资源的划分,为动态运行时软件单元的资源使用设定了边界。每个软件单元在动态执行时,只能在静态分配的资源范围内操作,以避免资源冲突和错误。例如,若静态设计为某数据处理软件单元分配了固定大小的内存空间,该单元在动态运行时的数据存储和处理就不能超出这个内存范围,否则会导致内存溢出等问题。

动态设计影响静态设计的合理性,软件单元在动态运行时的执行行为、任务调度等情况,能够验证静态设计中软件单元结构和接口定义的合理性。如果在动态执行中发现软件单元执行顺序混乱或接口调用出现错误,可能意味着静态设计中软件单元的层次关系或接口定义存在问题,需要对静态设计进行调整。比如,若任务调度时发现某个关键软件单元因优先级设置不当而无法及时执行,就可能需要重新审视静态设计中对该单元的定位和与其他单元的关系。

动态运行时软件单元的通信机制和状态转换等动态行为,会反馈其真实的资源需求,从而影响静态设计的资源分配。例如,在实际动态运行中,若发现某个软件单元因通信频繁而导致数据传输延迟,可能说明静态设计中为其分配的通信带宽不足,需要重新调整资源分配,以优化软件架构的整体性能和安全性。
静态设计通过合理的结构和接口设计,为实现安全功能提供了基础架构;动态设计则通过正确的执行行为和任务调度等,确保安全功能在运行时能够有效执行。例如,在汽车的制动控制系统软件架构中,静态设计划分出制动信号采集、制动控制算法、制动执行驱动等软件单元,并定义好接口;动态设计中这些单元按照预定的顺序和调度策略运行,当检测到紧急制动信号时,能及时触发制动控制算法单元,进而驱动制动执行单元,实现安全制动功能。
两者共同作用于故障处理机制。静态设计可以在软件单元结构和接口中预留故障检测和处理的相关设计,如定义专门的故障检测软件单元和故障上报接口;动态设计则在运行时通过状态转换等机制,及时发现和处理故障。例如,当某个软件单元在动态运行中检测到异常状态时,能通过预先定义的接口向故障处理单元上报,故障处理单元根据静态设计中设定的规则进行相应的处理,如切换到安全模式或触发故障报警等,保障软件系统的安全运行。
>.... 以上仅供学习参考!

汽车功能安全
汽车功能安全:从系统、硬件、软件、工具等方面,符合安全开发流程,以及系统概念设计的开发,满足汽车行业要求,并提供功能安全信息化服务。
 最新文章