ISO 26262 SAD methods
来源:公众号“Elektroauto”
2021-04-27
1719
上一篇,我们从ISO 26262的角度聊了下软件架构设计的原则。一般说来,软件架构是我们期望在项目早期就做出的决定。比如,根据核心的明确特征,在确定的核心中分配一些特征,然后我们可以组织团队为这些核心开发特定的功能。
因此,我们将在功能/核心之间指定特征的接口和通信技术,之后我们的分析也会遵循静态架构。因此,我们需要在早期阶段作出决定,因为变更将导致安全分析的改变,以及许多后果,比如CPU负载。让我们继续看一看ISO 对使我们的软件设计符合功能安全都有哪些要求。
ISO 26262推荐如下几点,在软件架构设计开发阶段:
- 我们的软件架构设计应该可以被验证;也就是说软件架构和软件安全需求之间要有双向可追溯性;
- 我们的SAD应该考虑我们的可配置的软件;比如,我们从二级供应商那里买了AUTOSAR STACK, 并且我们必须去配置它以适配我们架构中的以实现的模块;
- 在SAD决策中,软件单元/详细设计和实现应该在早期可行。可行意味着成本和时间;
- 我们的SAD在软件集成阶段应该是可以被测试的;我们自己设计的内容应该都是可测试的;
ISO 26262推荐如下特性,在软件开发过程中避免系统性失效 -> 预防行为如上,我们会注意到方法1a,分层的结构设计对所有的ASIL level都是高度推荐。分层的结构设计如下:
我们也可以放大每个层次结构,以增加需要的细节/粒度。我们可以通过平衡模块之间的外部接口和其他的考虑来达成1b和1c。实现这些原则的关键是将每个SW组件的关注点与其他组件隔离出来,除了他们之间的接口之外。为了在每个软件组件中实现强内聚性(1d),我们必须定义每个组件的职责,不能将其分配到其他组件中,并通过所要求的优化接口(1e)实现这些软件组件之间的低耦合。
架构师可以添加存储来统一界面;也就是说,不是每个“速度信息”都有特定的接口来从速度传感器获取数据,我们可以通过统一的接口封装它。
我们可以看到qsort()用一个统一的接口来处理许多不同的函数:要排序的数组作为空指针传递,因此可以对任何类型的元素进行操作。接下来的两个参数告诉qsort()它应该在数组中包含多个元素,以及每个元素的大小(以字节为单位)。
最后一个实参是指向比较函数的函数指针,比较函数本身接受两个void指针。通过让调用者提供这个函数,qsort()可以有效地对任何类型的元素进行排序。下面是一个比较函数的例子,用于比较浮点数。注意,传递给qsort()的任何比较函数都需要具有这种类型的签名。使它具有多样性的方法是将void指针参数转化为我们希望比较的元素类型的指针。因为我们知道qsort()将使用这个函数来比较浮点数,所以在对空指针进行解引用之前,我们将空指针参数转化为浮点数。所以如果我们有一个int compare_int(const void*a, const void*b)现在,使用多态函数qsort数组“array”的长度“len”是非常简单的:不适用中断的程序通常被称为“确定性的”,因为他们总是做同样的事情。使用中断的程序被称为“异步”或者“不确定性”,因为他们在工作时到处跳跃。每个人物都有一个特定的截止日期和周期,并且还为任务抖动确定了空间。因此,我们必须限制终端在正确的时间具有确定性的行为。在程序对任何事件的响应性和确定性之间总是需要权衡。方法1h:通过将每个软件组件部署在一个分离的内存位置“空间隔离”来达成ASIL D。通常的理解是:这个方法是模糊的,不清楚的,因为我们必须在混合临界(QM和ASIL)共存的情况下对ASIL-B也这么做。方法1i既适用于共存情况下的硬件共享,也适用于软件共享。这种资源管理可以在软件或者硬件中实现,包括防止对共享资源的冲突访问的安全机制和/或过程措施,以及检测和处理对共享资源的冲突访问的机制。ISO 26262-6 Table3中提到的方法可能是优秀软件架构设计的通用原则。然而, 对于每一个相应的ASIL评级,都强调了某些方法。最后,我们必须去验证这些方法,而不是只是停留在文档中,却一直没有去实现。
免责声明:本文章中内容是由小编阅读大量书籍和期刊总结整理而成,免费分享知识,如涉及版权问题,请与我们联系,第一时间做删除处理。