【问题标题】:MISRA C:2012 Rule-17.7MISRA C:2012 规则 17.7
【发布时间】:2021-12-11 05:41:11
【问题描述】:

以下代码违反了 MISRA C:2012 Rule-17.7。我对 C 代码和 MISRA 概念很陌生。任何建议将不胜感激。

 5277:   Dem_SetEventStatus(Rte_PDAV_DemEvent_DtcC00100_1, EventStatus);
         ^
Msg(7:3200) 'Dem_SetEventStatus' returns a value which is not being used.
MISRA C:2012 Rule-17.7

【问题讨论】:

  • “返回一个未被使用的值”的哪一部分你不明白?该函数正在返回一些东西,但是这行代码丢弃了该返回值。
  • 除了运行 MISRA 检查器之外,您还应该获得自己的 MISRA 规范副本。在那里您可以阅读任何规则的更多详细信息。你问题中的问题很清楚。但与引用的规则的真正含义相比,来自 MISRA 检查器的一些消息更加神秘,甚至完全是废话。

标签: c misra autosar


【解决方案1】:

背景
诊断事件管理器 (Dem) 是AUTOSAR 诊断服务的基本软件模块。 相关错误从应用层(分别为 SW-C)或基本软件模块 (BSWM) 报告。

  • BSW 使用 Dem_ReportErrorStatus API
  • SWC 报告事件的新状态 使用 Dem_SetEventStatus API(通过 RTE)

诊断事件管理器 (Dem) 处理并存储检测到的诊断事件 通过软件组件 (SW-C) 和 Basic 中的诊断监视器 软件模块 (BSWM)。存储的事件信息可用 通过与其他 BSW 模块或 SW-C 的接口。

函数 Dem_SetEventStatus()
这个函数有一个原型:

Std_ReturnType Dem_SetEventStatus(
Dem_EventIdType EventId,
Dem_EventStatusType EventStatus
)

注意返回类型是Std_ReturnType - 返回E_OK 或E_NOT_OK

MISRA C:2012 规则 17.7
MISRA C:2012 规则 17.7 要求您对从(非void)函数返回的值执行某些操作...

该函数正在告诉您一些事情...它要么成功 E_OK 要么失败 E_NOT_OK - 忽略此信息可能不是一个好主意。

如果您真的想忽略它,请坚持使用(void) 演员表 - 但请确保您添加了一个很好的明确理由。

查看隶属关系的个人资料

【讨论】:

  • 作为提示,自 AR 4.3 起,Dem_ReportErrorStatus() 函数已过时,BSW 模块也应使用Dem_SetEventStatus()。由于 DemEvent 及其参数DemEventKind 的配置,Dem 可以确定 BSW 和 SWC。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多