2

根据 Autosar_SWS,布尔值必须是unsigned char. 但是我的作品中有很多 MISRA 违规,例如 MISRA 规则 10.1(转换违规)、规则 12.6(有效布尔值)。

我想知道我是否为我的应用程序重新定义了 BOOLEAN,如下所示:

#ifdefine BOOLEAN_T
#undefine BOOLEAN_T

typedef struct {
                 unsigned char TRUE  : 1;
                 unsigned char FALSE : 1;
               } BOOLEAN_T;    

#define TRUE 1;
#define False 0;

#endif

安全问题和后果是什么?

4

3 回答 3

1

如果您使用 2 位结构来表示单个位数量,则随机位翻转有 50% 的机会将真/假值更改为既不是真也不是假的值。

在尝试编写安全关键软件之前,请花更多时间学习 C 语言。

于 2014-02-07T19:41:00.700 回答
1

通过上述方法,在无符号字符上使用双域可能会出现 MISRA 警告。

我建议您将 boolean 的定义留给 AUTOSAR(平台类型)的平台人员,并专注于将 boolean 用作unsigned char.

于 2014-03-05T09:11:07.017 回答
-1

为了安全起见,您可以使用例如位模式:

unsigned char data = 0x55 << (input_bit & 1);

switch (data):/* instead of if() */
 case 0xaa:
  /*true*/
  break;
 case 0x55:
  /*false*/
  break;
 case default:
  /*exception*/
  break;
}
于 2014-02-07T19:39:57.110 回答