そのため、半二重バス ドライバーがあり、何かを送信した後、応答を得るまでに常に多くの時間を待たなければなりません。この待ち時間の間にプロセッサに何か価値のあることをしてもらいたいので、FreeRTOS と vTaskDelay() などを使用することを考えています。
それを行う1つの方法は、ドライバーをいくつかの送受信部分に分割することです。送信後、呼び出し元に戻ります。発信者は一時停止し、一定時間後に受信部分を行います。
しかし、今のようにユーザーから見ると1つのタスクであり続ければ、抽象化のレベルはより細かくなるでしょう。したがって、タスク内の関数がタスク自体を一時停止することは可能ですか? お気に入り
void someTask()
{
while(true){
someFunction(&someTask(), arg 1, arg 2,...);
otherStuff();
}
}
void someFunction(*someSortOfReferenceToWhateverTaskWhoCalled, arg1, arg2 ...)
{
if(something)
{
/*Use the pointer or whatever to suspend the task that called this function*/
}
}