2012-04-30 2 views
0

우리는 boch 시뮬레이터에 빌드 된 커널을 구현하려고한다.컴파일 할 때 배열 타입이 불완전한 원소 타입 에러를 가지고있다.

하위 작업 중 하나는 고정 된 우선 순위 일정을 구현하는 것입니다. 이전에 우리의 스케줄러는 단지 하나의 쓰레드 큐 였지만, 이제는 쓰레드 큐의 배열을 만들고 싶었습니다.

하지만 배열에 comiler 오류가 계속 발생합니다. 배열 유형에 불완전한 요소 유형이 있습니다. 아래 코드 중 일부를 게시했는데, 누구든지이 문제를 볼 수 있습니다.

kernel.h는

... 
extern struct thread_queue 
ready_queue_table[MAX_SYS_PRIORITY]; 
... 

kernel.c

... 
#include <sysdefines.h> 
#include "threadqueue.h" 
... 
struct thread_queue 
ready_queue_table[MAX_SYS_PRIORITY]; 
... 

sysdefines.h

... 
#define MAX_SYS_PRIORITY   (5) 
... 

threadqueue.h

... 
struct thread_queue 
{ 
int head; /*!< The index to the head of the thread queue. 
       Is -1 if queue is empty. */ 
int tail; /*!< The index to the tail of the thread queue. 
       Is -1 if queue is empty. */ 
}; 
... 
+0

어떤 줄이 오류 메시지의 원인입니까? –

답변

2

배열을 만들기 전에 작성한 배열의 구조체 정의가 있어야합니다 (컴파일러는 작성한 배열 형식의 정의를 확인해야합니다). 유형은 입니다. 컴파일러 용으로 불완전 유형이고 그렇지 않습니다. 그 타입의 메모리 레이아웃을 알고 있기 때문에 배열을 생성 할 수 없다.

구조체 정의를 헤더 파일에 넣고 구조체 요소를 참조 할 파일을 포함 시키거나 구조체 레이아웃을 알기 위해 컴파일러에 필요한 작업을 수행해야합니다. kernel.h에서

+0

+1 ~ addendum @ [Tommy Sadiq Hinrichsen] (http://stackoverflow.com/users/1366083/tommy-sadiq-hinrichsen) : 코드 스 니펫에서,'#include kernel.h'를' #include "threadqueue.h"'그러면 컴파일해야합니다. – violet313

+0

지금 문제를 볼 수 있습니다. 도움을 요청하십시오. 불행히도 많은 의존성이 있으므로 #include 문을 쉽게 옮기지 않습니다. –

0

이 있습니다

extern struct thread_queue 
ready_queue_table[MAX_SYS_PRIORITY]; 

내가 threadqueue.h가 이미 포함되어 있지 않습니다 kernel.h을 포함하여 일의 인스턴스가 있다고 생각한다. 제 생각에는 #include "threadqueue.h"kernel.h에 추가하거나 extern을 제거해야합니다.

그러나 코드 스 니펫이 매우 희소하기 때문에이 모든 내용은 추측에 불과합니다.

+0

어느 쪽도 도움이되지는 않았지만 전체 코드를 붙여 넣을 수는 있지만 상당히 길었습니다. –

+0

다음은 몇 가지 코드입니다. http://pastebin.com/u/sadiq1981 –

관련 문제