Operating system 在freertos中的其他任务内创建任务

Operating system 在freertos中的其他任务内创建任务,operating-system,embedded,rtos,freertos,ucos,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

我是一个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中执行的,还是我以错误的方式执行的?

任务可以在启动计划程序之前(从主任务)创建,也可以在启动计划程序之后(从另一个任务)创建。xTaskCreate()API文档如下: . 您还将在主FreeRTOS.zip文件下载中找到一组演示任务,演示如何从另一个任务中创建和删除任务。查看FreeRTOS/Demo/Common/Minimal/death.c文件(自杀任务的死亡,因为他们在创建后删除了自己)


如果xTaskCreate()返回NULL,则可能已耗尽堆空间。看见我认为zip文件下载中的数百个或预配置的示例中,大多数都有这样的注释。

检查xTaskCreate api的返回值

还有一件事,您正在创建的第二个任务是vtask2,它的优先级低于正在创建的vtask1。vtask1正在运行,而(1)调度程序将不会调度vtask2。 创建vtask2后,可以延迟或挂起vtask1


然后可以执行vtask2

尝试在while循环之外创建任务。xTaskCreate(…);而(1),;如果到达while(1),那么您的计划程序没有切换任务,或者您没有正确创建任务。您从xTaskCreate()调用中得到的响应代码是什么?如果不是pdPASS,则不会创建任务。@Ross XTaskCreate()没有给我pdPASS不幸的是,您认为可能的原因是什么?我想指出,我在更复杂的代码中使用XTaskCreate。我上面写的代码只是我正在做的一个简单示例taskPriority+5意味着vTask2的优先级将高于当前任务,因为“taskPriority”被指定为当前线程的优先级。@Ross-正如我在Vxworks和ucos上所做的一样,这些RTO表示如果小于否,则优先级将更高。。。问题被贴上了ucos标签。