0

私はこの問題を解決することはできません。理由がわかりません。これが私の簡単なコードです

mjpeg.h:

    #define START_REG                 (*(volatile unsigned int*) BASE+0x000)  
    #define MJPEG_PIC_START_RD                                  (0x00000001)   

mjpeg.c:

    void encStreamInit(void){
    START_REG |= MJPEG_PIC_START_RD;
    }

test.c:

    int main(void){
     encStreamInit();
     return 0;
    }

コンパイル時に「エラー: 左辺値が代入の左オペランドとして必要です」と表示されます。私を助けてください。お手伝いありがとうございます。

4

4 に答える 4

3

あなたのコードは意味がありません。Prefix*は、 binary よりも演算子の優先順位が高くなり+ます。したがって(*(volatile unsigned int*) BASE+0x000) 、次のように解釈されます。

  • BASE はintorだと思いunsigned intます。
  • BASE を type にキャストし(volatile unsigned int*)ます。
  • そのポインターの内容を取得します。結果はunsigned int.
  • 0x0000その結果に値を追加します。結果の型はunsigned intです。
  • この結果は左辺値ではないため、|= を使用することはできません。

修正は簡単です:

(*(volatile unsigned int*) (BASE+0x000))

于 2013-11-12T09:20:22.417 に答える
0

どうですか:

mjpeg.h:

    volatile unsigned int * START_REG = BASE+0x000; /* BASE needs to be #define here- */
    #define MJPEG_PIC_START_RD                                  (0x00000001)   

mjpeg.c:

    void encStreamInit(void){
    (*START_REG) |= MJPEG_PIC_START_RD;
    }
于 2013-11-12T09:12:09.627 に答える
-1

を使用するdefineと、テキストの置換が行われます。それがしないのは、変数の定義です。あなたの場合、これらの定数を変数として使用し、それらの間で演算子を使用します。

a |= b

と同等です

a = a | b

したがって、これは、定数に OR 演算子を使用し、結果を START_REG 定数に割り当てようとすることを意味しますが、これは適用できません。

于 2013-11-12T08:40:24.563 に答える