【发布时间】:2022-01-05 15:53:25
【问题描述】:
我正在尝试使用 Pc-lint 清除我的代码中的 misra 违规行为。
其中之一是违反本规范中的规则 11.4。
GPIO_PinState level = HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_6);
GPIOB的定义是
#define GPIOB ((GPIO_TypeDef *) GPIOB_BASE)
违规如下:*[9078] 对象指针类型“GPIO_TypeDef ”和整数类型“unsigned long”之间的转换[MISRA 2012 Rule 11.4,咨询]
由于我无法修改此文件(并且位于内存映射寄存器上),我正在尝试使用 Pc-lint 命令“egrep”来避免此“警告”。
我试过了
//lint -egrep(9078, "type 'GPIO_TypeDef *' and integer type 'unsigned long'")
但它不起作用。
我不想使用这个命令
//lint -e9078
因为我只想排除这种特殊的违规行为。
提前感谢您的帮助。
【问题讨论】:
-
您需要在正则表达式中转义
*以使其文字化。 -
我相信链接的帖子是完全重复的。如果它没有回答问题,请告诉我。 TL;DR:在处理硬件寄存器映射时,您必须跳过此建议规则。但一定有一个不稳定的地方。
-
嗨@Lundin,我的问题与如何在Pc-lint 中使用“egrep”选项有关。我知道这是一条建议性规则,它将被放弃,但为了以更好的方式分析我的代码,我想排除无用的警告。