c - 米斯拉 11.3 : cast from int to pointer

标签 c misra

我有一个关于如何解决 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/

相关文章:

读取文本文件的 C 代码未找到 EOF(文件结尾)

c - 从unit8_t缓冲区到结构体的指针类型转换

c - MISRA 相当于医疗行业?

c - 如何定义符合 MISRA 2012 规则 5.2 的变量名称?

c - 通过查看与 c 中的源代码相反的二进制文件,您可以获得什么?

c - #define FUNC(x,y) x=^y; y^x;在c中

续幂函数消息

c - MISRA C 2012 规则 16.1 所有 switch 语句都应格式正确

c - MISRA C :2004 10. 5 查询

c - Polyspace 使用 C open() 函数运行时检查警报