任务在循环计划中表现不正确

时间:2013-04-12 15:33:25

标签: operating-system scheduling round-robin freertos stm32f4discovery

我在STM32F4DISCOVERY板上运行FreeRTOS,我有这段代码:

xTaskCreate( vTask1, "Task 1", 200, NULL, 1, NULL );
xTaskCreate( vTask2, "Task 2", 200, NULL, 1, NULL );
vTaskStartScheduler();

其中vTask1是这个函数:

void vTask1( void *pvParameters )
{
volatile unsigned long ul;

    for( ;; )
    {
        LED_On(0);

        for( ul = 0; ul < mainDELAY_LOOP_COUNT; ul++ )
        {
        }
        LED_On(2);
        LED_Off(0);
    }
}

vTask2的代码几乎相同:

void vTask2( void *pvParameters )
{
const char *pcTaskName = "Task 2 is running\n";
volatile unsigned long ul;

    for( ;; )
    {
        LED_On(3);
        LED_Off(2);
        for( ul = 0; ul < mainDELAY_LOOP_COUNT; ul++ )
        {
        }

        LED_Off(3);
    }
}

当我运行程序时,我看到LED0和LED3一直亮着(它们的切换对我来说太快了,这很好),而LED2,即“共享资源”,正在快速闪烁。 问题在于:当我颠倒xTaskCreate次调用的顺序时,我得到的情况与LED2的闪烁行为不同,这种情况要慢得多。 为什么会发生这种情况,因为任务应该具有相同的优先级,因此遵循循环计划?他们不应该得到相同的时间吗?为什么他们的行为只是在以不同的顺序创建后才会改变?

提前致谢。

0 个答案:

没有答案