2012-04-06 4 views
1

私はCode Composer StudioでMISRA C 2004標準を使用しています。私は、周辺機器の初期化中にビット単位の操作に関して常にエラーが発生しています。ファームウェアのビット単位の操作でMISRA Cエラー/警告を削除するには?

コンパイラの.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. 整数型の式の値は、同じsignednessの整数型への変換でない場合、暗黙のうちに異なる基本型に変換されてはならない。

私は、コンパイラ.hファイルを変更したくない、と私はこれらの警告を根絶したいと思います。 unsigned charのすべての値が(符号付き)int Sとして表すことができることを意味推測で

答えて

1

、あなたcharは8ビットとintある(少なくとも)である16。つまり、式REG2 |= 0x01;の場合、unsigned charintにプロモートされ、次にOR操作が実行され、その結果がunsigned charにキャストされます。

私は間違っていない場合は、unsigned charにあなたの定数を変更すると、それを防ぐ必要があります。

REG2 |= (unsigned char)0x01; 

かを:

unsigned char one = (unsigned char)0x01; 

REG2 |= one; 
+0

それは男になりました..ありがとう! – Chaithra

+0

MISRA C 2004の6.3ルールに違反しない場合は、uint8_tを使用してください。REG2 | =(uint8_t)0x01; –

1

は、あなたが試してみました:

REG2 |= 0x01U; 

+0

私にとって正しい答えが見えます... – Andrew

関連する問題