我在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的闪烁行为不同,这种情况要慢得多。
为什么会发生这种情况,因为任务应该具有相同的优先级,因此遵循循环计划?他们不应该得到相同的时间吗?为什么他们的行为只是在以不同的顺序创建后才会改变?
提前致谢。