1

I am an RTOS newbie and I am creating a simple real time system for automotive

I am wondering if it possible to create a task inside another task. I tried to do this by the following method but it doesn't work.

 void vTask1 { *pvParameters){
unsigned portBASE_TYPE taskPriority;
taskPriority=uxTaskPriorityGet( NULL );
char x;
while (1){
 x= 5 ;
if (x==5)
xTaskCreate( vTask2 , "task2", 1000, "task2 is running", taskPriority+5 , NULL );
}

when I debug that code it hangs at xTaskCreate without executing the new task and I searched the manual and the internet for something about this but I didn't find any.

would anyone tell me is that possible to do in RTOS or I am doing it in a wrong way?

4

2 回答 2

2

可以在调度程序启动之前(从 main)创建任务,也可以在调度程序启动之后(从另一个任务)创建任务。xTaskCreate() API 文档在这里: http ://www.freertos.org/a00125.html 。您还将在主要的 FreeRTOS .zip 文件下载中找到一组演示任务,这些任务演示如何从另一个任务中创建和删除任务。查看 FreeRTOS/Demo/Common/Minimal/death.c 文件(自杀任务的死亡,因为它们在创建后会自行删除)。

如果 xTaskCreate() 返回 NULL,那么您可能已经用完了堆空间。请参阅http://www.freertos.org/a00111.html。我认为 zip 文件下载中的数百个或预先配置的示例中的大多数都有对此效果的评论。

于 2014-08-08T05:36:50.060 回答
-1

检查 xTaskCreate api 的返回值。

您正在创建的第二个任务的另一件事是 vtask2 ,它的优先级低于正在创建的 vtask1 。并且 vtask1 正在运行 while(1) 调度程序不会调度 vtask2。您可以在创建 vtask2 后延迟或暂停 vtask1。

然后 vtask2 可以执行。

于 2014-08-08T12:19:30.853 回答