特定于不同BSW的错误在相应的BSW模块规范中会指定。
Autosar版权声明
下面的部分是这方面的基础。最重要的是,它指定了一个包含5种错误类型的分类方案,这些错误类型可能以不同的生命周期出现在BSW模块中。
错误的分类
所有可能被BSW模块检测和/或报告的错误都被分类
六种不同的类型:
1、 开发错误
2、 运行时错误
3、 暂态故障
4、 生产错误
5、 扩展生产错误
6、 安全事件
本章分为6部分:
1、开发错误
2、运行时错误
3、暂态故障
4、扩展生产错误和生产错误
5、安全事件
6、特殊话题
1、开发错误
开发错误主要被指定为软件开发过程中出现的软件bug。
例如,尝试使用未初始化的软件是典型的开发错误。
开发错误通过接口Det_ReportError报告给BSW模块Det(默认的错误跟踪程序),这也反映了这种类型的面向事件的特性。开发错误最终会发生,而相应的错误监控器将立即发出错误发生的信号。
尽管Det模块的规范文档没有指定任何特定的行为或实现,但要求开发错误的行为类似于断言。它们的出现将通过停止或重新设置整个ECU来中止正常的执行控制流。
开发错误类型
开发错误值的类型为uint8。
开发错误的激活
开发错误的激活是通过C预处理器开关完成的。开关“<模块缩写>DevErrorDetect”应激活或禁用对模块的所有开发错误的检测。
API参数检查
如果启用了“<模块缩写>DevErrorDetect”开关,则启用了API参数检查。检测到的错误的详细描述可以在相关模块SWS的第7.2章和第8章中找到。
开发错误检测
只有在设置了检测开发错误的配置参数时,才能进行开发错误的检测和报告。
开发错误的检测是可配置的。它为相应的BSW模块提供了扩展的调试功能。
例如:EEPROM驱动程序提供API参数的内部检查,这些API参数只在第一次软件集成测试时激活(“开发构建”),然后禁用(“部署构建”)。
开发错误的默认配置值
开发错误的检测和报告应该是可配置的,并且配置的默认值应该是这些错误类型是禁用的。
例子:
实现代码由支持工具链根据配置参数自动生成,用于检测开发错误。如果未配置检测,则生成的代码不包含错误检测和报告实现。
/* File: Nm_Cfg.h */
/* Pre-compile configuration parameters for Network Manager */
…
/* NM_DEV_ERROR_DETECT */
/* To activate (STD_ON) or deactivate (STD_OFF) detection of */
/* development errors. */
/* Satisfies BSW_SWS_042. */
#define NM_DEV_ERROR_DETECT STD_ON
…
/* File: Nm.c */
/* Network Manager implementation */
…
#include “Nm_Cfg.h”
…
#if ( NM_DEV_ERROR_DETECT == STD_ON )
…
… /* development errors to be detected */
…
#endif /* NM_DEV_ERROR_DETECT */
请注意,要通过编译器切换此配置,需要切换标准类型STD_ON和STD_OFF应使用
在相应的BSW模块规范的第10章中列出了用于检测开发错误的配置参数。
如果开发错误检测处于活动状态,则启用API参数检查,检测到的错误的详细描述可以在BSW模块规范的第7章和第8章中找到。
报告
如果配置了对开发错误的检测,则应报告任何检测到的错误:
向Det报告检测到的开发错误:
BSW模块应使用带有指定模块标识符(参见BSW模块列表)的服务Det_ReportError向缺省错误跟踪器(Det)报告检测到的开发错误,以识别自身。
注意,为了符合Det_ReportError的签名,报告的开发错误值必须是uint8类型。
有关服务Det_ReportError的更多信息,请参见错误跟踪描述规范。
当未初始化的BSW模块调用除
2、运行时错误
运行时错误被指定为不一定影响整个系统行为的系统错误。
例如,错误的构建后配置或错误分配的pdu - id是导致运行时错误的典型原因。
与开发错误类似,运行时错误也通过接口Det_ReportRuntimeError报告给BSW模块Det。正如开发错误一样,运行时错误最终也会发生,并导致相应的错误监控器立即发出错误发生的信号。
但是,与开发错误不同,运行时错误不会导致断言,即,控制流程将继续执行。相反,运行时错误的发生会触发相应错误处理程序的执行。此错误处理程序可由特定ECU的整合器在Det中实现为调出,并且只能将相应的错误事件存储到内存中、调用模块Dem或执行简短且合理的操作。
Det模块提供了一个可选的调出接口来处理运行时错误。如果配置了它,服务Det_ReportRuntimeError将调用这个callout函数。
独立于任何特定的实现,服务Det_ReportRuntimeError总是将E_OK返回给它的调用者。专用于检测运行时错误的监视器可能留在部署构建(生产代码)中。
运行时错误类型:
运行时错误值的类型为uint8。
不能像开发错误一样通过配置参数关闭运行时错误。
如果Det通过callout函数实现对运行时错误的处理,那么Det的特定callout函数名必须由DetReportRuntimeErrorCallout配置。
报告
任何检测到的运行时错误应报告:
向Det报告检测到的运行时错误: BSW模块应该使用服务Det_ReportRuntimeErrors将检测到的运行时错误报告给默认的错误跟踪程序(Det)。
注意,为了符合Det_ReportRuntimeError的签名,所报告的运行时错误值必须是uint8类型。
参见“运行时错误”开发错误检测的激活和停用。有关服务Det_ReportRuntimeError的更多信息,请参阅错误跟踪描述规范。
3、暂态错误
暂态故障是由功能失调的硬件引起的。如果热噪声或粒子辐射影响了硬件的功能,从而影响了与之相连的软件的功能,就会发生故障。这也意味着瞬态错误可能会愈合,因为故障的原因可能会再次消失。
例如,由于粒子辐射引起控制寄存器的位翻转,CAN控制器可能离线。
通过接口Det_ReportTransientFault将暂态故障报告给模块Det。虽然没有规定某种实现,但是要求暂态故障不会导致软件执行的控制流停止。
处理这些瞬态故障可能需要依赖于用例的操作。因此,特定的错误处理程序很可能是由整合器作为调出实现的。在本例中,服务Det_ReportTransientFault返回callout函数的返回值,否则它立即返回E_OK。
专用于检测瞬时故障的监视器必须停留在部署构建(生产代码)中。
暂态故障检测
除非SWS模块描述了配置参数或其他定义某些瞬态故障激活的条件,否则无法关闭瞬态故障的检测。
如果Det通过callout函数实现了对瞬态故障的处理,那么Det的特定callout函数名必须由DetReportTransientFaultCallout配置。
报告
BSW模块应使用服务Det_ReportTransientFault将检测到的瞬态故障报告给默认错误跟踪器(Det)。
注意,为了符合Det_ReportTransientFault的签名,所报告的运行时错误值必须是uint8类型。
有关服务Det_ReportRuntimeError的更多信息,请参阅错误跟踪描述规范。