freertos暂停任务

时间:2016-02-13 11:44:36

标签: rtos freertos

我试图学习freertos。如何在运行2秒后让任务进入睡眠状态。我尝试使用ft.cpp: In function ‘void f(std::complex<double>)’: ft.cpp:28:11: error: call of overloaded ‘sqrt(std::complex<double>&)’ is ambiguous sqrt(z); ^ ft.cpp:28:11: note: candidates are: ft.cpp:9:21: note: T sqrt(T) [with T = std::complex<double>] template<class T> T sqrt(T); ^ ft.cpp:10:30: note: std::complex<_Tp> sqrt(std::complex<_Tp>) [with T = double] template<class T> complex<T> sqrt(complex<T>); ^ 但是立即停止任务 而且我也尝试将vTaskSuspend()放在它之前并没有太大的不同。 我想在调用2秒后快速闪烁任务,然后运行正常的闪烁任务。

v taskDelay(2000)

1 个答案:

答案 0 :(得分:0)

目前尚不清楚您想要做什么,或者什么不能正常工作。您建议同时使用vTaskSuspend()vTaskDelay(),但它们会用于不同的事情。

如果你调用vTaskDelay(),那么任务将进入阻塞状态(停止作为可以实际执行的任务),无论你指定的任何时间段,然后在该时间段后自动离开阻塞状态。

如果你调用vTaskSuspend(),那么任务将进入Suspended状态,除非另一个任务或中断调用vTaskResume(),否则永远不会再运行。

你只是希望任务运行两秒钟,然后再也不会吗?在这种情况下,你可以做一些简单的事情:

void mytask( void *pv )
{
TickType_t xTimeOnEntering = xTaskGetTickCount();

    while( xTaskGetTickCount() - xTimeOnEntering < pdMS_TO_TICKS( 2000 ) )
    {
        /* Run your code here. */
    }

    /* Two seconds of execution is up, delete the task. */
    <a href="http://www.freertos.org/a00126.html">vTaskDelete</a>( NULL );
}