FreeRTOS :在configUSE_PREEMPTION, configUSE_TIME_SLICING ,configIDLE_SHOULD_YIELD 设置为100时的理解性问题

                                          标题

FreeRTOS :在configUSE_PREEMPTION, configUSE_TIME_SLICING ,configIDLE_SHOULD_YIELD 设置为100时,为什么会task1/2都不执行只有空闲任务执行

基本配置:可抢占+非时间片轮转+空闲任务不让步

Task1

void Task1Function(void * param)
{
    volatile int i = 0;
    while (1)
    {
        Task1flagnum=1;
        Task2flagnum=0;
        Task4flagnum=0;
        for (i = 0; i < 100000; i++)
        {    
        sum++;
        }
        flagCalcEnd = 1;
        //printf("1");
        vTaskDelete(NULL);
    }
}

task2


void Task2Function(void * param)
{
    while (1)
    {
        if (flagCalcEnd)
            printf("sum = %d\r\n", sum);
        Task1flagnum=0;
    Task2flagnum=1;
    //Task3flagnum=0;
    Task4flagnum=0;
    }
}

空闲任务钩子函数

void vApplicationIdleHook(){
    Task1flagnum=0;
    Task2flagnum=0;
    Task3flagnum=0;
    Task4flagnum=1;
    //printf("0");
}

**主函数
**

int main( void )
{
#ifdef DEBUG
  debug();
#endif
    prvSetupHardware();

    printf("Hello, world!\r\n");
    //下面NULL这个参数的值就是传给Task1Function的param
    xTaskCreate(Task1Function,"xTask1",100,NULL,0,&xHandleTask1);
    //xTaskCreate(Task2Function,"xTask2",100,NULL,2,NULL);
    xTaskCreate(Task2Function,"xTask2",100,NULL,0,NULL);
    //xIdleTask3Handle = xTaskCreateStatic(Task3Function,"xTask3",100,NULL,1,puxTask3StackBuffer,&pxTask3Buffer);
                                 //我自己定义栈的深度是100   //用函数进行实际分配栈大小也就照这个进行分配    
    //xTaskCreate(TaskGenericFunction,"GenericTask1",100,(void *)4,1,NULL);
    //xTaskCreate(TaskGenericFunction,"GenericTask2",100,(void *)5,1,NULL);
    /* Start the scheduler. */
    vTaskStartScheduler();
    /* Will only get here if there was not enough heap space to create the
    idle task. */
    return 0;
}

预期结果
按照我的配置, 按照我的想法在主函数里注册task1的时候,因为他们都是同优先级 task1应该被放到readylist的第一项所以应该第一个执行,直到删除自己的时候才会调用空闲任务,然后空闲任务一直执行。

实际结果

img

但是实际情况如上图,空闲任务跳过任务1,一直执行。

请各位帮帮忙呗

应该是我理解方面的问题