Prioridades na Criação da Tarefa

Intro

No FreeRTOS, a prioridade de uma tarefa determina a ordem em que as tarefas são escalonadas. Tarefas com prioridades mais altas são escalonadas antes das tarefas com prioridades mais baixas.

a prioridade de uma tarefa é estabelecida no momento de sua criação através da função xTaskCreate ou xTaskCreatePinnedToCore.

A prioridade de uma tarefa é um valor inteiro, onde números maiores indicam prioridades mais altas.

Além disso, você pode ajustar a prioridade de uma tarefa existente usando a função vTaskPrioritySet.

Criando Tarefas com Prioridades

Ao criar uma tarefa com xTaskCreate ou xTaskCreatePinnedToCore, você especifica a prioridade com o 5 dos parâmetros. Por exemplo:

Para criar uma tarefa com uma prioridade mais alta, basta usar um valor maior para o parâmetro de prioridade:

Alterando a Prioridade de uma Tarefa Existente

Para alterar a prioridade de uma tarefa existente, use a função vTaskPrioritySet.

Sintaxe de vTaskPrioritySet:

Aqui está um exemplo:

Obtendo a Prioridade Atual de uma Tarefa

Você pode obter a prioridade atual de uma tarefa usando a função uxTaskPriorityGet:

Obtendo o Handler de uma Tarefa

Para ajustar a prioridade de uma tarefa específica, você precisa do handler dessa tarefa. Você pode obter o handler no momento da criação da tarefa ou posteriormente usando xTaskGetHandle.

Exemplo de obtenção do handle na criação da tarefa:

 

Exemplo Completo

Aqui está um exemplo completo que demonstra a criação de três tarefas com diferentes prioridades e como alterar a prioridade de uma tarefa durante a execução.

Explicação do Exemplo

  1. Criação de Tarefas com Diferentes Prioridades:

    • TaskLowPriority é criada com prioridade 1.
    • TaskMediumPriority é criada com prioridade 2.
    • TaskHighPriority é criada com prioridade 3.
  2. Execução das Tarefas:

    • Cada tarefa imprime uma mensagem na porta serial a cada segundo.
  3. Alteração da Prioridade:

    • A tarefa TaskHighPriority altera a prioridade da tarefa TaskLowPriority para 4, tornando-a a tarefa de mais alta prioridade no sistema.

Considerações

Prática Recomendada

É recomendado definir prioridades de maneira cuidadosa para evitar problemas de inversão de prioridade, onde tarefas de alta prioridade são indiretamente bloqueadas por tarefas de baixa prioridade. Além disso, evite definir todas as tarefas com a mesma prioridade, a menos que você tenha um motivo específico para isso.

Esse conjunto de exemplos e explicações permite entender como configurar e manipular prioridades de tarefas no FreeRTOS para ESP32.

Outras Opções