OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5249|回复: 3

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

[复制链接]

91

主题

170

帖子

0

精华

初级会员

Rank: 2

积分
172
金钱
172
注册时间
2015-9-22
在线时间
101 小时
发表于 2018-8-3 16:18:03 | 显示全部楼层 |阅读模式
1金钱
[mw_shl_code=applescript,true]       
    //创建开始任务
        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();            //退出临界区
}
[/mw_shl_code]

这个代码运行任务优先级是等start任务运行完了,才运行优先级最高的task2任务?
还是说创建了task2发现优先级更高,先运行task2任务后最后再回来执行start任务的最后事情删除start任务?

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

23

主题

94

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1113
金钱
1113
注册时间
2016-8-26
在线时间
256 小时
发表于 2018-8-14 17:24:00 | 显示全部楼层
开起任务调度后,才会首先运行task2。
回复

使用道具 举报

3

主题

347

帖子

3

精华

金牌会员

Rank: 6Rank: 6

积分
2076
金钱
2076
注册时间
2014-12-19
在线时间
709 小时
发表于 2018-8-16 16:51:09 | 显示全部楼层
前面不是有一句taskENTER_CRITICAL(); 进入临界区吗,进去之后就不会自动调度了,哪怕start_task的优先级特别低,也不会切换到其他任务。
其实像这样的start_task写法完全没有必要,目的就是创建任务,直接在一个函数或者在main里面创建其他任务是一样的,创建完后又删除start_task,简直浪费堆栈空间,还影响执行效率。
回复

使用道具 举报

10

主题

48

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
298
金钱
298
注册时间
2016-4-9
在线时间
97 小时
发表于 2019-9-3 11:10:45 | 显示全部楼层
优先级高的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 22:18

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表