初级会员
- 积分
- 53
- 金钱
- 53
- 注册时间
- 2018-6-21
- 在线时间
- 6 小时
|
1金钱
两个任务myTask1,myTask2
myTask2 优先级高于myTask1
void myTask1(void *pvParameters)
{
u8 Num = 0;
for(;;)
{
Num++;
printf("myTask1运行了%d次\r\n",Num);
if(Num == 5)
{
printf("\r\n任务2被挂起!!!\r\n");
vTaskSuspend(myTask2TaskHandle);
}
if(Num == 20)
{
printf("\r\n任务2被恢复!!!\r\n");
vTaskResume(myTask2TaskHandle);
}
vTaskDelay(500);
}
}
void myTask2(void *pvParameters)
{
u8 Num = 0;
for(;;)
{
Num++;
printf("myTask2运行了%d次\r\n",Num);
vTaskDelay(500);
}
}
打印会出现
...
myTask2运行了4次
myTask1运行了4次
myTask2运行了5次
myTask1运行了5次
任务2被挂起!!!
myTask1运行了6次
...
myTask1运行了20次
任务2被恢复!!!
myTask2运行了6次
myTask2运行了7次
myTask1运行了21次
myTask2运行了8次
myTask1运行了22次
myTask2运行了9次
myTask1运行了23次
myTask2运行了10次
myTask1运行了24次
myTask2运行了11次
myTask1运行了25次
疑惑:任务2再被恢复的时候是不是立马被执行了一次?然后继续执行,任务1和2都到时间了,因为任务2比任务1优先级高,所以任务2又运行了一次,才轮到任务1
而我将myTask1优先级调到比myTask2高的时候,打印是这样的:
myTask1运行了1次
myTask2运行了1次
myTask1运行了2次
myTask2运行了2次
myTask1运行了3次
myTask2运行了3次
myTask1运行了4次
myTask2运行了4次
myTask1运行了5次
任务2被挂起!!!
myTask1运行了6次
...
myTask1运行了20次
任务2被恢复!!!
myTask2运行了5次
myTask1运行了21次
myTask2运行了6次
myTask1运行了22次
myTask2运行了7次
myTask1运行了23次
myTask2运行了8次
myTask1运行了24次
myTask2运行了9次
是否如我猜测,想确定一下 = =
|
最佳答案
查看完整内容[请看2#楼]
void vTaskResume( TaskHandle_t xTaskToResume )
。。。。。。
if( pxTCB->uxPriority >= pxCurrentTCB->uxPriority )
{
/* This yield may not cause the task just resumed to run,
but will leave the lists in the correct ...
|