所以我有一个半双工总线驱动程序,在那里我发送一些东西,然后总是需要等待很长时间才能得到响应。在这段等待时间内,我希望处理器做一些有价值的事情,所以我正在考虑使用 FreeRTOS 和 vTaskDelay() 什么的。
一种方法是将驱动程序拆分为一些发送/接收部分。发送后,返回给调用者。然后调用者挂起,并在一段时间后进行接收部分。
但是,如果从用户的角度来看,抽象级别仍然是一项任务,就像今天一样。因此我在想,任务中的函数是否可以暂停任务本身?喜欢
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*/
}
}