0

私たちのクラスでは、bochsシミュレーター上に構築されたカーネルを実装します。

サブタスクの1つは、固定優先度スケジューリングを実装することです。以前はスケジューラーは1つのスレッドキューしかありませんでしたが、今はスレッドキューの配列を作成したいと思いました。

しかし、私の配列は「配列型の要素型が不完全です」というコミラーエラーが発生し続けます。以下のコードの一部を投稿しました。誰でも問題を確認できます。

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. */
};
...
4

2 に答える 2

2

配列を作成する前に、作成する構造体whos配列を定義する必要があります(コンパイラは、作成するタイプwhos配列の定義を確認する必要があります)。そうでない場合、型はコンパイラの不完全な型であり、メモリを認識しません。そのタイプのレイアウトであるため、その配列を作成することはできません。

構造体の定義をヘッダーファイルにインクルードし、構造体要素を参照するファイルをインクルードするか、コンパイラーが構造体レイアウトを認識する必要のあるアクションを実行する必要があります。

于 2012-04-30T15:49:50.987 に答える
0

kernel.hあなたはこれを持っています:

extern struct thread_queue
ready_queue_table[MAX_SYS_PRIORITY];

まだ含まれていないkernel.hところも含めて、実例があるのではないかと思います。に追加するか、削除するthreadqueue.h必要があると思います。#include "threadqueue.h"kernel.hextern

しかし、コードスニペットはかなりまばらなので、これはすべて推測にすぎません。

于 2012-04-30T16:05:43.450 に答える