嵌入式学习小组
直播中

张磊

7年用户 520经验值
私信 关注

请问创建任务时候哪个任务先运行?

[AppleScript] 纯文本查看 复制代码
    //创建开始任务StartTask_Handler=xTaskCreateStatic((TaskFunction_t)start_task,//任务函数(const char* )"start_task",//任务名称(uint32_t )START_STK_SIZE,//任务堆栈大小(void*   )NULL,//传递给任务函数的参数(UBaseType_t )START_TASK_PRIO, //任务优先级(StackType_t*   )StartTaskStack,//任务堆栈(StaticTask_t*  )&StartTaskTCB);//任务控制块                  vTaskStartScheduler();          //开启任务调度}//开始任务任务函数void start_task(void *pvParameters){    taskENTER_CRITICAL();           //进入临界区    //创建TASK1任务Task1Task_Handler=xTaskCreateStatic((TaskFunction_t)task1_task,(const char* )"task1_task",(uint32_t )TASK1_STK_SIZE,(void*   )NULL,(UBaseType_t )TASK1_TASK_PRIO, (StackType_t*   )Task1TaskStack,(StaticTask_t*  )&Task1TaskTCB);    //创建TASK2任务Task2Task_Handler=xTaskCreateStatic((TaskFunction_t)task2_task,(const char* )"task2_task",(uint32_t )TASK2_STK_SIZE,(void*   )NULL,(UBaseType_t )TASK2_TASK_PRIO, (StackType_t*   )Task2TaskStack,(StaticTask_t*  )&Task2TaskTCB);    vTaskDelete(StartTask_Handler); //删除开始任务    taskEXIT_CRITICAL();            //退出临界区}
这个代码运行任务优先级是等start任务运行完了,才运行优先级最高的task2任务?
还是说创建了task2发现优先级更高,先运行task2任务后最后再回来执行start任务的最后事情删除start任务?

回帖(2)

魏茂娜

2020-6-11 10:17:30
开起任务调度后,才会首先运行task2。
举报

李子邯

2020-6-11 10:23:59
前面不是有一句taskENTER_CRITICAL(); 进入临界区吗,进去之后就不会自动调度了,哪怕start_task的优先级特别低,也不会切换到其他任务。
其实像这样的start_task写法完全没有必要,目的就是创建任务,直接在一个函数或者在main里面创建其他任务是一样的,创建完后又删除start_task,简直浪费堆栈空间,还影响执行效率。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分