我有一个关于如何解决 MISRA 2004 11.3 违规问题的问题。
代码如下:
tm_uint8 read( tm_uint8* data)
{
data[0] = *((tm_uint8*)0x00003DD2);
data[1] = *((tm_uint8*)0x00003DD3);
data[2] = *((tm_uint8*)0x00003DD4);
}
我想写入物理地址存储的值。它可以编译,但我违反了 11.3 的 MISRA 规定。我想解决它。谁能帮我解决这个问题吗?
最佳答案
此规则背后的基本原理是,MISRA 担心从整数转换为指针时访问未对齐。在你的例子中,我假设 tm_uint8_t 是 1 个字节,所以对齐在这里不应该成为问题。在这种情况下,该警告只是误报,您可以忽略它。这是一条建议性规则,因此您无需提出偏差。
除了从不使用绝对地址之外,没有其他解决方法。这很可能不是这里的一个选择。可以看出,在编写与硬件相关的代码时,这条规则非常麻烦,这样的代码根本无法遵循该规则。
关于c - 米斯拉 11.3 : cast from int to pointer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49408077/