2017-03-03 35 views
-1

我試圖編譯一個.c文件,處理在mMIPS指令集內的硬件剪裁,但我似乎得到一個錯誤''在宏觀參數的數目不一致''在線''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個參數,但您只提供一個參數。

這段代碼將導致相同的錯誤:

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作爲第二個參數作爲一個例子,以便你的程序編譯沒有錯誤,但它可能無法工作。我不知道這些宏的第二個參數應該是什麼。

您的代碼可能不正確或調用未定義的行爲,但這是另一個問題。