-1

我在我的.c文件中声明了静态全局变量,如下所示。我正在为少数静态变量而不是所有静态变量观察这个问题。对于某些静态变量,它不会引发任何警告。

static uint8 EL_adv    = 0;

我收到以下 MISRA 警告:

“可以在块范围内定义变量 'EL_adv' [MISRA 2012 规则 8.9,咨询] | pclint 9003”

如果我删除静态,那么我会收到如下错误。

uint8 EL_adv    = 0;

“在没有事先声明的情况下定义的外部符号 'EL_adv' [MISRA 2012 规则 8.4,必需] | pclint 9075”

我正在使用如下代码,我将在 fun1 中获取变量的值,并将使用 fun2 和 fun3 中的值。

void EL_ReadAll(void)
{
    EL_adv  = getValue(); 
}

void get_my1_EL_Adv()
{
  my1EL_Adv = EL_adv; 
}

void get_my2_EL_Adv()
{
  my2EL_Adv = EL_adv; 
}
4

1 回答 1

1

通常,您会收到此类错误,因为 MISRA-C 更喜欢在该函数内声明仅由一个函数使用的文件范围变量。但是,这在嵌入式系统中并不总是实用的,并且该规则只是建议性的。要么使用它在单个函数中移动变量声明,要么忽略建议规则。

简单地删除static对您没有好处,因为这会将变量变成“全局”,这是更严重的 MISRA 违规。

于 2021-01-07T11:06:32.797 回答