、 外部イベントに同期しようと タスクがセマフォ空 を作成することが必要もはや ない場合.... は、同期イベント を制御する第2のタスクは、セマフォを与えます。この例では、どのようなタスクを作成する予定ですか?通常のバイナリセマフォの
#include "vxWorks.h"
#include "semLib.h"
#define T_PRIORITY 50
SEM_ID syncExampleSem; // named semaphore object
void initialize (void)
{
// set up FIFO queue with emtpy binary semaphore
syncSem = semBCreate (SEM_Q_FIFO, SEM_EMPTY);
// create task1
taskSpawn ("task1", T_PRIORITY, 0, 10000, task1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
// create task2
taskSpawn ("task2", T_PRIORITY, 0, 10000, task2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
}
void task1 (void)
{
// stay here until semaphore becomes available
semTake (syncExampleSem, WAIT_FOREVER);
// do something
}
void task2 (void)
{
// do something
// now let task1 execute
semGive (synExampleSem);
}
説明したように、私は、空のセマフォを作成する最初のタスクが表示されないのはなぜ私の質問はありますか? (それはちょうどメイン関数で "一般的に"行われたように見えますか?)"外部イベントとの同期を試みるタスクが空のセマフォを作成します"。
また、2番目のタスクがどのように同期を制御しているのかよく分かりません。
ありがとうございます。
参照:バイナリセマフォによる同期の例
http://www.cross-comp.com/instr/pages/embedded/VxWorksTutorial.aspx#VxWorks%20Programming
私はその最初の行について心から感謝しています。タスク1または2で作成されたセマフォについて、私があなたが記述した問題を参照します。これは、この例で言葉遣いが間違っていることを意味するのですか、それとも間違って見ていますか? –
この例は、コードに比べて表現が貧弱です。私の経験では、セマフォは、あるタスクが別のタスクの中から生成されるような特殊な状況がない限り、それらを使用するタスクの外でほとんど常に初期化されます。 –