我试图学习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)
答案 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 );
}