[Help] pthreads function call problem (too few argument)
안녕하세요. 여러 고수님들의 도움을 받고자 이렇게 글을 올립니다.
제가 지금 시스템 시뮬레이터에서 돌릴 어플을 멀리스레딩을 하고 있는데,
아래와 같은 에러가 발생해서 글을 올립니다. 어느 부분을 손 봐야 할지 잘 모르겠는데
아시는 고수분들께서 좀 도와주시면 정말 감사하겠습니다.
에러 메시지는 아래와 같습니다.
compiling object file "obj/image.o" ...
src/image.c: In function `get_block':
src/image.c:633: error: too few arguments to function `submatmul'
src/image.c:693: error: too few arguments to function `sub2matmul'
make: *** [obj/image.o] Error 1
소스코드는 아래와 같습니다.
...
...
void *submatmul(void *args, int ref_frame, StorablePicture **list, int x_pos, int y_pos, struct img_par *img, int block[BLOCK_SIZE][BLOCK_SIZE])
{
int x, y;
int i, j;
int maxold_x,maxold_y;
int result;
int tmp_res[4][9];
static const int COEF[6] = { 1, -5, 20, 20, -5, 1 };
if((int)args == 0)
{
for (j = -2; j < BLOCK_SIZE+3; j++)
{
for (i = 0; i < BLOCK_SIZE; i++)
for (tmp_res[i][j+2] = 0, x = -2; x < 4; x++)
tmp_res[i][j+2] += list[ref_frame]->imgY[max(0,min(maxold_y,y_pos+j))][max(0,min(maxold_x,x_pos+i+x))]*COEF[x+2];
}
}
else
{
for (j = 0; j < BLOCK_SIZE; j++)
{
for (i = 0; i < BLOCK_SIZE; i++)
{
for (result = 0, y = -2; y < 4; y++)
result += tmp_res[i][j+y+2]*COEF[y+2];
block[i][j] = max(0, min(img->max_imgpel_value, (result+512)/1024));
}
}
}
if ((int)args == 1)
sesc_exit(0);
}
void *sub2matmul(void *args, int ref_frame, StorablePicture **list, int x_pos, int y_pos, struct img_par *img, int block[BLOCK_SIZE][BLOCK_SIZE])
{
int dx, dy;
int x, y;
int i, j;
int maxold_x,maxold_y;
int result;
int pres_x, pres_y;
int tmp_res[4][9];
static const int COEF[6] = { 1, -5, 20, 20, -5, 1 };
if((int)args == 0)
{
for (j = 0; j < BLOCK_SIZE; j++)
{
for (i = 0; i < BLOCK_SIZE; i++)
{
pres_y = dy == 1 ? y_pos+j : y_pos+j+1;
pres_y = max(0,min(maxold_y,pres_y));
for (result = 0, x = -2; x < 4; x++)
result += list[ref_frame]->imgY[pres_y][max(0,min(maxold_x,x_pos+i+x))]*COEF[x+2];
block[i][j] = max(0, min(img->max_imgpel_value, (result+16)/32));
}
}
}
else
{
for (j = 0; j < BLOCK_SIZE; j++)
{
for (i = 0; i < BLOCK_SIZE; i++)
{
pres_x = dx == 1 ? x_pos+i : x_pos+i+1;
pres_x = max(0,min(maxold_x,pres_x));
for (result = 0, y = -2; y < 4; y++)
result += list[ref_frame]->imgY[max(0,min(maxold_y,y_pos+j+y))][pres_x]*COEF[y+2];
block[i][j] = (block[i][j] + max(0, min(img->max_imgpel_value, (result+16)/32)) +1 ) / 2;
}
}
}
if ((int)args == 1)
sesc_exit(0);
}
...
...
...
void get_block(int ref_frame, StorablePicture **list, int x_pos, int y_pos, struct img_par *img, int block[BLOCK_SIZE][BLOCK_SIZE])
{
int dx, dy;
int x, y;
int i, j;
int maxold_x,maxold_y;
int result;
int pres_x;
int pres_y;
int tmp_res[4][9];
static const int COEF[6] = { 1, -5, 20, 20, -5, 1 };
pthread_t thread; // added by Jihong Kim
dx = x_pos&3;
dy = y_pos&3;
x_pos = (x_pos-dx)/4;
y_pos = (y_pos-dy)/4;
...
...
sesc_init();
sesc_spawn((void *) *submatmul, (void *)1, 0);
(*submatmul)((void *)0);
sesc_wait();
...
...
sesc_init();
sesc_spawn((void *) *sub2matmul, (void *)1, 0);
(*sub2matmul)((void *)0);
sesc_wait();
...
...
}
두 함수 둘다
두 함수 둘다 파라메터가 7개 입니다.
하지만 코드상에서는 한개의 파라메터로 호출 하셨네요.
파라메터를 다 채우고 호출하시거나, 함수 정의시 필요없는 파라메터라면
삭제하세요.
오류 내용은 말 그대로 파'라메터 갯수가 적게 호출되었다' 입니다.
---------
간디가 말한 우리를 파괴시키는 7가지 요소
첫째, 노동 없는 부(富)/둘째, 양심 없는 쾌락
셋째, 인격 없는 지! 식/넷째, 윤리 없는 비지니스
이익추구를 위해서라면..
다섯째, 인성(人性)없는 과학
여섯째, 희생 없는 종교/일곱째, 신념 없는 정치
---------
간디가 말한 우리를 파괴시키는 7가지 요소
첫째, 노동 없는 부(富)/둘째, 양심 없는 쾌락
셋째, 인격 없는 지! 식/넷째, 윤리 없는 비지니스
이익추구를 위해서라면..
다섯째, 인성(人性)없는 과학
여섯째, 희생 없는 종교/일곱째, 신념 없는 정치
댓글 달기