Linuxマシンでシミュレートする必要がある組み込みOS関数がいくつかあります。私が取るように指示されたアプローチは、組み込みOS関数をオーバーロードしてPOSIXスレッドの周りにラップすることで、単体テストなどの組み込みOS機能をLinuxマシンが処理できるようにすることです。新しいスレッドを作成するための関数ポインタtypedefを
組み込みOSの機能は次のとおりです。(void * (*)(void *)
はコンパイラが、それは期待しています私に語ったものです)
OSCreateTask(OStypeTFP functionPointer, OSTypeTcbP taskId, OStypePrio priority)
私はpthread_create
を期待void関数ポインタにそのOStypeTFP
タイプを変換する必要があります
は、私はそれが好きで使用することができtypedefを作成するために期待していた。
typedef void (*OStypeTFP)(void);
// Function to run task/thread in
void taskFunction(void) { while(1); }
// Overloaded Embedded OS function
void OSCreateTask(OStypeTFP tFP, OStypeTcbP tcbP, OStypePrio prio)
{
pthread_attr_t threadAttrs;
pthread_t thread;
pthread_attr_init(&threadAttributes);
pthread_create(&thread, &threadAttributes, &tFP, NULL);
}
// Creates a task that runs in taskFunction
OSCreateTask (taskFunction, id, prio);
をコンパイラはそのに文句を言いますは、タイプvoid (**)(void)
で、pthread_createが期待する場合void * (*)(void *)
何らかの形でtypecefを変更する必要がありますか?どちらも?
関数は '無効*'パラメータを取り、返さなければ '無効*'あなたはより多くを読む必要が – imreal
['pthread_create'](http://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_create.html)とおそらく一般的なスレッドに関するものです。関数と関数へのポインタだけでなく、ポインタへの減衰と、ポインタ変数でのアドレス演算子の動作についても説明します。 –
関数(名前)を「オーバーロードする」とは、同じ名前で異なる引数型を持つ異なる関数を提供することです。 Cはそれをサポートしていません。 –