很久以前,汽车工程师从机械化控制转向软件组件和编码,并发展到C语言。C编程语言本身非常流行,以至于整个Linux都是用C编写的。然而,C语言的标准是不完整的,并且有很多未定义/未指定的行为,其中标准导致高度的不确定性。使用 C 语言的关键问题是,开发人员需要编写代码的地方没有运行时错误检查。
MISRA C作为嵌入式系统可靠指南的演变
C编程语言的灵活性伴随着未定义和不确定行为的权衡,如果软件失败,这些行为可能无法以可预测的方式运行。为了确保关键嵌入式系统中的软件安全性和可靠性,汽车行业软件可靠性协会(MISRA)创建了一套正式的软件开发指南,用于C语言的可预测子集,并开发安全可靠的嵌入式应用程序。下面描述了MISRA C从1998年到2020年的演变。
如今,MISRA C 在许多嵌入式行业中被广泛接受并被称为事实上的标准,例如航空航天、电信、汽车、医疗设备、国防、铁路、互联消费电子产品、过程控制、核电等等。
大型汽车公司采用MISRA C
汽车行业的一些传奇人物,如日产汽车有限公司、菲亚特汽车有限公司、丰田汽车公司、通用汽车公司、福特汽车公司等,在不同的基于车辆软件的系统中都面临着软件故障问题。事实上,大多数车辆系统,如自动紧急制动系统、加速系统、发动机开/关等,都由软件解决方案监控和控制。因此,当软件未能按照设计进行监视或控制时,关键车辆系统将立即停止工作,这可能导致错误事故。
NHTSA(美国国家公路交通安全管理局)针对汽车故障事件的关键措施
在这种情况下,NHTSA可能会要求汽车公司召回他们的车辆,并解决与召回相关的巨额成本和汽车公司声誉堆栈可能带来的问题。
然而,在过去,由于由一家著名汽车公司设计的某些汽车中的自动紧急制动 (AEB) 系统的软件故障,NHTSA 被报告了大约 14 起撞车事故和 5 起受伤事故。AEB系统使用摄像头或雷达扫描前方道路,如果检测到与其他物体发生碰撞,则自动制动。AEB系统中的软件故障可能会将情况读取为紧急情况,并触发AEB系统自动制动,从而导致车辆突然停止并防止意外车祸。
根据规章制度,汽车制造商对机动车辆的安全负责。他们还对由于汽车车辆中的软件故障而导致的乘员车辆的任何碰撞或伤害负责。汽车行业软件可靠性协会(MISRA)积极致力于解决由于使用C语言设计的软件故障而发生的碰撞或伤害的挑战。MISRA致力于处理C语言的未定义和未指定行为,并为开发人员提出了MISRA C指南,以设计和开发最安全可靠的汽车行业软件。
由于在汽车软件开发
中疏忽MISRA C指南,可能会出现挑战
汽车网络安全问题:NHTSA报告了其中一个事实,即两名黑客能够入侵由大型汽车制造商之一设计的汽车系统。这些黑客能够禁用汽车的制动器并控制方向盘。这是发生在汽车行业的一个令人大开眼界的事件,汽车制造商需要积极主动地设计最安全的嵌入式软件,并为买家提供更多的安全性和信心。
电子油门控制系统的意外加速:电子油门控制系统(ETCS)具有巡航控制功能,该功能旨在学习驾驶员在用户驾驶车辆时使用油门踏板的行为,并通过使用执行器产生相同的加速度来复制相同的行为,这有助于保持车辆的速度,并确保舒适性和放松感,即使是长时间的放松驾驶。NHTSA报告了ETCS软件故障,该故障会产生意外加速,只有当驾驶员将脚完全从制动踏板上移开时才能避免该软件
被发现出现故障,因为违反了MISRA C规则之一,导致其中一个递归例程中的堆栈溢出并最终导致数据损坏, 因此,该软件根据自动加速做出决定
碰撞期间安全气囊展开故障:安全气囊展开系统是汽车行业最重要的乘员安全系统之一。NHTSA报告了其中一家汽车巨头制造的车辆的此类案例,其中安全气囊系统的软件无法在特定驾驶条件下检测到碰撞状况,并且未能展开安全气囊并导致乘员的生命在堆栈上
点火开/关系统中的软件故障:这种情况过去也发生过,汽车软件出现故障,即使他们取下钥匙,也不允许汽车的乘员关闭发动机。
汽车行业需求的增加给制造商和开发人员带来了确保软件质量(包括用户安全)的挑战。这可以实现,或者可以使用MISRA C的定义准则在更大程度上最小化概率。
审核编辑:郭婷
-
嵌入式
+关注
关注
5068文章
19008浏览量
302941 -
编程语言
+关注
关注
10文章
1937浏览量
34586
发布评论请先 登录
相关推荐
评论