我无法解决这一行的misra规则第11.6条警告:
uint32_t * delay = (uint32_t *)0x40086D0C ;FYI:长无符号整数uint32_t;
PC-Lint :注923:将int转换为指针MISRA 2012,规则11.6,必需
我所做的:
关于我的问题,你能告诉我一个有用的想法吗?我们会很感激的。
发布于 2016-12-08 08:53:07
皮棉和往常一样坏了。提交错误报告或卸载Lint。
米斯拉-C:2012年规则11.6是关于从指针转换为无效的算术类型指针!因此,“从int转换到指针MISRA 2012 rule 11.6,required”是不正确的无稽之谈,与引用的规则无关,他们引用的规则是错误的。
有一个关于整数到指针转换的咨询规则11.4。该规则的目的是捕捉这样的转换会导致不正确地对齐指针的情况。但是,您可以忽略规则11.4而不引起偏差,因为它是咨询性的。
因此,除了咨询规则之外,您的代码是兼容MISRA的,尽管您需要在整数常量中附加U后缀以补充其他规则:
uint32_t* delay = (uint32_t*)0x40086D0Cu ;指针很可能是volatile uint32_t*,这样代码才有意义。
发布于 2016-12-08 06:35:47
这是一个完全合理的转换(假设您的指针是32位)。在这种情况下,最好让你的衣领检查器忽略这一行。MISRA规则是为了防止常见的bug,但是一些操作,比如访问内存映射的外围设备,不能在规范中完成(据我所知)。
使用memset是一个非常糟糕的主意--它设置单个字节,因此需要4个memset()调用来设置指针的4个字节。您可以通过一个memcpy()调用获得类似的效果,尽管我不认为它符合规范的精神。
对于memcpy()和memset(),您不应该看到性能下降。任何值得其salt的优化编译器都将检测到固定大小的memcpy,并将其替换为单个32位MOV指令(或用于平台的模拟)。这里是clang的一个例子
delay的值与addr的值相同delayhttps://stackoverflow.com/questions/41032719
复制相似问题