新手入门
- 积分
- 11
- 金钱
- 11
- 注册时间
- 2020-4-29
- 在线时间
- 3 小时
|
楼主 |
发表于 2022-8-5 18:39:54
|
显示全部楼层
优先级部分代码是指??
就只有这两个任务,我在TASK1中提高TASK2的优先级,之后不是应该直接被TASK2抢占CPU使用权,直接执行TASK2?但是看打印是执行了两次TASK1之后,TASK2才开始执行,不太理解为什么,难道在vTaskPrioritySet里面不会发生任务调度吗?
如果在提高TASK2优先级之后加上vTaskDelay(1);里面会执行一次任务调度,然后直接转到TASK1运行,这个感觉就跟预想的逻辑一样了
static void TASK1_task(void *pvParameters)
{
unsigned portBASE_TYPE uxPriority;
uxPriority = uxTaskPriorityGet(NULL);
for(;;)
{
printf("TASK1 is running\r\n");
printf("raise the TASK2 priority,%d\r\n",(uxPriority+1));
vTaskPrioritySet(TASK2_Handler,(uxPriority+1) );
//vTaskDelay(1);
}
}
static void TASK2_task(void *pvParameters)
{
unsigned portBASE_TYPE uxPriority;
uxPriority = uxTaskPriorityGet(NULL);
for(;;)
{
printf("TASK2 is running\r\n");
printf("lower the TASK2 priority,%d\r\n",(uxPriority-2));
vTaskPrioritySet(NULL,(uxPriority-2) );
//vTaskDelay(1);
}
}
void TaskInit(void)
{
xTaskCreate((TaskFunction_t )TASK1_task,
(const char* )"TASK1",
(uint16_t )configMINIMAL_STACK_SIZE,
(void* )NULL,
(UBaseType_t )1,
(TaskHandle_t* )NULL);
xTaskCreate((TaskFunction_t )TASK2_task,
(const char* )"TASK2",
(uint16_t )configMINIMAL_STACK_SIZE,
(void* )NULL,
(UBaseType_t )2,
(TaskHandle_t* )&TASK2_Handler);
} |
|