Semáforo do FreeRTOS

Quantidade de sinal:

Papel: usado no sistema operacional para gerenciamento de recursos e sincronização de tarefas

Classificação: semáforo binário, semáforo de exclusão mútua, semáforo de contagem, semáforo de exclusão mútua recursiva

Semáforo binário:

Ocasiões de uso: Semelhante a um semáforo mutex, mas sem herança de prioridade, é adequado para sincronização (incluindo sincronização de tarefa para tarefa, tarefa para interromper)

Essência : Uma fila com apenas um item de fila tem apenas dois estados.

Mecanismo operacional : 1 tarefa solicita um semáforo, o semáforo é inválido e a tarefa 1 entra no estado de bloqueio

                  2 interrupção ou tarefa 2 libera o semáforo, o semáforo é válido

                  3 A tarefa 1 obtém o semáforo com sucesso, a tarefa 1 é liberada do estado de bloqueio e executa o processamento relacionado

                  4 Como a função da tarefa geralmente é um loop grande, execute a etapa 1 novamente, a tarefa 1 está em um estado bloqueado, aguardando uma interrupção ou a tarefa 2

  Semáforo binário causará inversão de prioridade, a solução é usar semáforo mutex

Semáforo de contagem:

Comparado com o semáforo binário, o comprimento do semáforo binário é 1, e o comprimento do semáforo de contagem é maior que 1

Use ocasião: contagem de eventos, nesta ocasião, seu valor de inicialização é 0

                 Gerenciamento de recursos, neste caso, seu valor de inicialização é o número de recursos

Semáforo mutex:

Essência: um semáforo binário com herança de prioridade

Ocasiões de uso: só pode ser usado para exclusão mútua entre tarefas, não para funções de serviço de interrupção

Semáforo mutex recursivo:

Um semáforo mutex especial. Geralmente, a tarefa que adquiriu o semáforo mutex não pode adquirir o semáforo mutex novamente, mas o semáforo mutex recursivo é diferente. A tarefa que adquiriu o semáforo mutex recursivo pode adquirir o semáforo mutex novamente. Semáforo mutex recursivo, e o número de vezes não é limitado. Se uma tarefa adquire com sucesso o semáforo recursivo 5 vezes, então esta tarefa também deve liberar o semáforo recursivo 5 vezes. Existe um mecanismo de herança de prioridade, portanto o semáforo recursivo deve ser liberado após o uso. (Devido à existência de herança de prioridade) só pode ser usado em tarefas, não em rotinas de serviço de interrupção.

おすすめ

転載: blog.csdn.net/L1153413073/article/details/82823672