我是一名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中可能做的事情还是以错误的方式做到了?
答案 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可以执行。