【问题标题】:MISRAC2012-Rule-18.1_d Problem with Ethernet MAC [closed]MISRAC2012-Rule-18.1_d 以太网 MAC 问题 [关闭]
【发布时间】:2020-10-05 13:50:55
【问题描述】:

我的源代码中有一个经典的以太网 MAC 地址代码:

  netif->hwaddr[0] =  heth.Init.MACAddr[0];
  netif->hwaddr[1] =  heth.Init.MACAddr[1];
  netif->hwaddr[2] =  heth.Init.MACAddr[2];
  netif->hwaddr[3] =  heth.Init.MACAddr[3];
  netif->hwaddr[4] =  heth.Init.MACAddr[4];
  netif->hwaddr[5] =  heth.Init.MACAddr[5];

编辑:

#define NETIF_MAX_HWADDR_LEN 6U

u8_t hwaddr[NETIF_MAX_HWADDR_LEN];

当我尝试在我的代码中进行静态分析时,所有这些行都会出现此错误:

我该如何解决这个问题?

【问题讨论】:

  • 我们没有足够的信息 - 如果(例如)netif->hwaddr 只有 4 个字节大怎么办?显示更多代码。
  • 您需要确保 analyzr 知道指针指向的位置。你需要重写你的数据类型来归档它。米斯拉是......头疼
  • 我在主题中添加了一些细节
  • 请不要破坏您的问题

标签: c static-analysis misra


【解决方案1】:

MISRA 检查器说你访问数组越界,显然也是这样:

#define NETIF_MAX_HWADDR_LEN 5U

u8_t hwaddr[NETIF_MAX_HWADDR_LEN];

...
netif->hwaddr[5] =  heth.Init.MACAddr[5];

在 C 语言中,数组从 0 开始索引。通过不声明太小的数组来解决这个问题。

【讨论】:

  • 也摆脱自制的整数类型,使用stdint.h。绝对没有理由不使用那个。
  • 对不起,我写的错误信息是 5U 但这是 6U 对不起。
  • @gogogo 好的,但是该工具说您正在访问索引 42 或其他内容...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-08-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-14
  • 2015-08-15
  • 2018-06-10
相关资源
最近更新 更多