1

Code Composer Studioで MISRA C 2004 標準を使用しています。ペリフェラルの初期化中に、ビット演算に関して常にエラーが発生します。

コンパイラの .h ファイルでは、次のように定義されています。

#define SFR_8BIT(addr)  extern volatile unsigned char addr

SFR_8BIT(REG1);

#define REG2  REG1

今私のコードで、私が使用する場合

REG2 |= 0x01;

MISRA C は次のエラーを表示します。

  1. ビット単位の演算子は、基になる型が符号付きのオペランドには適用されません - #1393-D (MISRA-C:2004 10.1/R)

  2. 整数型の式の値は、同じ符号の整数型への変換でない場合、別の基になる型に暗黙的に変換されません。

コンパイラの .h ファイルを変更したくありません。また、これらの警告を根絶したいと考えています。

4

2 に答える 2

1

推測では、 yourcharは 8 ビットで、int(少なくとも) 16 です。つまり、 のすべての値はunsigned char(符号付き) として表すことができますint。つまり、あなたの式REG2 |= 0x01;では、あなたのunsigned char意志が に昇格しint、次にOR操作が実行され、そのキャストの結果が に戻されることを意味しますunsigned char

私が間違っていなければ、定数を an に変更すると、それunsigned charを防ぐことができます:

REG2 |= (unsigned char)0x01;

また:

unsigned char one = (unsigned char)0x01;

REG2 |= one;
于 2012-04-06T04:47:09.763 に答える
1

やってみました:

REG2 |= 0x01U;

?

于 2012-04-06T06:46:04.117 に答える