J'essaie de comprendre le flux de travail d'un modèle simple de 2 tâches sur freeRTOS. Ajout de code psuedo pour plus de clarté,Commutateur de contexte initial FreeRTOS
Task_A
void Task_A(void *pvParameters)
{
const char *pcTaskName = "Task_A is running\r\n";
for(;;)
{
vPrintString(pcTaskName);
/* Delay for a period. */
vTaskDelay(250/portTICK_RATE_MS);
}
}
Task_B
void Task_B(void *pvParameters)
{
const char *pcTaskName = "Task_B is running\r\n";
volatile unsigned long ul;
for(;;)
{
vPrintString(pcTaskName);
/* Delay for a period. */
vTaskDelay(250/portTICK_RATE_MS);
}
}
principale
int main(void)
{
xTaskCreate(Task_A, "Task 1", 1000, NULL, 1, NULL);
xTaskCreate(Task_B, "Task 2", 1000, NULL, 1, NULL);
/* Start the scheduler so the tasks start executing. */
vTaskStartScheduler();
for(;;);
}
supposer que les deux tâches, disent Task_A et Task_B sont créés dans la fonction principale, une l'appel au planificateur est donné (Réussir toute la création de la tâche). Comment l'appel au planificateur serait-il exécuté si le planificateur n'est pas appelé avant la création des tâches? Ou en mettant simplement, alors que l'exécution commence à partir de main, qu'est-ce qui provoque le contrôle à sortir de Task_A et Task_B de sorte que plus tard sur le planificateur est invoqué? Veuillez me corriger si ma compréhension est erronée.
Ce n'est pas clair pour moi ce que vous demandez. Veuillez modifier la question pour fournir plus d'informations, en ajoutant peut-être un pseudocode pour clarifier les cas de confusion. – Ross