別のタスクによって変更されますはこのように、二つの異なるFreeRTOSタスクで実行されている、私は2台の状態マシン、<code>A</code>と<code>B</code>を持つC++の設計を持って
A::task()
{
while (1)
{
switch (m_state)
{
case A1:
// Do A1 stuff
break;
case A2:
// [1] Do A2 stuff before yielding to B::task()
// [2] Do more A2 stuff after resuming from B::task()
break; // [3]
default:
break;
} // switch: state
} // while: task loop
}
B::task()
{
while (1)
{
switch (m_state)
{
case B1:
// Do B1 stuff
break;
case B2:
// Do B2 stuff
break;
default:
break;
} // switch: state
} // while: task loop
}
今、B
A
の状態を(非同期的に、コールバックを介して)変更する能力があります。これはすべて正常に動作しますが、私がしたいのは、その状態が変更されたときにA
のマシンが "再起動"することです(つまり、最後に実行していた作業からbreak
が[1])以前の状態のコード[2]は、break
[3]と状態変化が起こる前に継続しません。
この動作は達成できますか?
条件変数が必要なようです。つまり、BがAの状態をA2に設定すると、Aはbが通知する条件変数を待機します。より簡単な例は、Aの状態をA2に設定する前にBが取るmutexを持つことです。 AはA2の処理を完了した後、Bがそれを解放するまでの間に生じるmutexを取得しようとします。 – AndyG