在freertos中的其他任务中创建任务

时间:2014-08-07 20:54:27

标签: operating-system embedded rtos freertos ucos

我是一名RTOS新手,我正在为汽车创建一个简单的实时系统

我想知道是否可以在另一个任务中创建任务。 我尝试通过以下方法执行此操作,但它不起作用。

 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 );
}

当我调试该代码时,它挂起在xTaskCreate而不执行新任务 我在手册和互联网上搜索了一些关于此的内容,但我没有找到任何内容。

有人会告诉我在RTOS中可能做的事情还是以错误的方式做到了?

2 个答案:

答案 0 :(得分: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文件下载中的大多数或预先配置的示例都有这方面的评论。

答案 1 :(得分:-1)

检查xTaskCreate api的返回值。

您正在创建的第二个任务是vtask2,其优先级低于创建者vtask1。并且vtask1正在运行,而(1)调度程序不会调度vtask2。 你可以在创建vtask2之后延迟或暂停vtask1。

然后vtask2可以执行。