2017-03-03 10 views
-1

mMIPS命令セット内のハードウェアでのクリッピングを処理する.cファイルをコンパイルしようとしていますが、行内に「 'マクロ引数の数に不一致があります」というエラーが表示されるようです'results = sfu1' 'lcc -o mips_mem.bin image.cでファイルをコンパイルしようとしたとき。なぜ私にこのエラーを与えているのか分かりません。
これはimage.cです:エラー、マクロアグリーメントの不一致

#define WIDTH 8 
#define HEIGHT 8 

#define sfu0(a, b) ((a) +((b) + *(int *) 0x12344321)) //clipping 
#define sfu1(a, b) ((a) -((b) + *(int *) 0x12344321)) //dividing by 13 
#define sfu2(a, b) ((a) +((b) - *(int *) 0x12344321)) /less multiplications 

    void main(void) 
{ 
int a, b, result; 
int max = 255; 
char *buf_i = (char*)0x401000, *buf_o = (char*)0x402000; 


for (a = 1; a < HEIGHT - 1; a++) 
{ 
    for (b = 1; b < WIDTH - 1; b++) 
    { 
     result = sfu1((
        -7*(int)buf_i[(a - 1) * WIDTH + b - 1] + 
         5*(int)buf_i[(a - 1) * WIDTH + b ] + 
         2*(int)buf_i[(a - 1) * WIDTH + b + 1] + 
        -1*(int)buf_i[ a  * WIDTH + b - 1] + 
        15*(int)buf_i[ a  * WIDTH + b ] + 
        -1*(int)buf_i[ a  * WIDTH + b + 1] + 
         2*(int)buf_i[(a + 1) * WIDTH + b - 1] + 
         5*(int)buf_i[(a + 1) * WIDTH + b ] + 
        -7*(int)buf_i[(a + 1) * WIDTH + b + 1] + 
        128)); 

     /* Clipping */ 
     buf_o[a * WIDTH + b] = ((result) + ((max) + *(int *) 0x12344321)); 
    } 
} 

}

誰かがこのエラーが何を意味するのか、それが固定されることができる方法を説明してもらえますか?

+1

コードは、未定義の動作を呼び出します。 – Olaf

答えて

1

sfu1マクロには2つの引数が必要ですが、1つのみを指定します。

コードのこの作品は、同じエラーになります:

result = sfu1(1); 

訂正:

result = sfu1(

       -7 * (int)buf_i[(a - 1) * WIDTH + b - 1] + 
       5 * (int)buf_i[(a - 1) * WIDTH + b] + 
       2 * (int)buf_i[(a - 1) * WIDTH + b + 1] + 
       -1 * (int)buf_i[a  * WIDTH + b - 1] + 
       15 * (int)buf_i[a  * WIDTH + b] + 
       -1 * (int)buf_i[a  * WIDTH + b + 1] + 
       2 * (int)buf_i[(a + 1) * WIDTH + b - 1] + 
       5 * (int)buf_i[(a + 1) * WIDTH + b] + 
       -7 * (int)buf_i[(a + 1) * WIDTH + b + 1] + 
       128 

      , 2 // <<<<<<<<< missing argument in your snippet 
      ); 

あなたのプログラムがエラーなしでコンパイルが、それので、私は単なる一例として、2番目の引数として2を追加しましたおそらく動作しません。私はそれらのマクロの第二引数がどんなものであるべきか考えていません。

コードが正しくないか、未定義の動作が発生する可能性がありますが、これは別の質問です。

関連する問題