【发布时间】:2019-01-09 02:34:49
【问题描述】:
我有 C 源代码,我正在使它符合 MISRA 标准。我收到以下与 MISRA 2012 规则 13.3 和 13.2 相关的错误:
递增/递减操作与其他具有副作用的操作相结合 [MISRA 2012 规则 13.3,咨询]buf[count++] = U1RXREG;
双方都有副作用[MISRA 2012 Rule 1.3, required], [MISRA 2012 Rule 13.2, required] buf[count] = U1RXREG;
问题一的源码:
void UART_call(void)
{
if(count < BUF_SIZE)
{
buf[count++] = U1RXREG;
Flag = 1;
}
else
{
count = 0;
Flag = 0;
}
}
从问题 1 代码中解决 13.3 错误后,我收到 MISRA 1.3 和 13.2 错误。问题2的源码:
void UART_call(void)
{
if(count < BUF_SIZE)
{
buf[count] = U1RXREG;
count = count + 1U;
Flag = 1;
}
else
{
count = 0;
Flag = 0;
}
}
【问题讨论】:
-
函数UART_call中显示的变量count是一个全局变量。对 count 的任何修改都会产生副作用。 MISRA 坚持认为这种副作用在安全关键软件中是不好的。
-
buf和count是如何定义的? -
你为什么使用全局变量而不是参数?
-
我认为将
count++替换为count = count + 1U没有任何意义。