Autosar知识:BSW生成规范要点-错误处理(上)

​特定于不同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模块调用除<MIP> _GetVersionInfo、<MIP> _Init、调度函数之外的任何函数时,启用开发错误检测的BSW模块将引发开发错误<MIP>_E_UNINIT。

 


 

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的更多信息,请参阅错误跟踪描述规范。


 

 

 

 

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值