You are here

Счётные семафоры во FreeRTOS

Source: https://www.freertos.org/Real-time-embedded-RTOS-Counting-Semaphores.html

Перевод может содержать ошибки. Читайте первоисточник.


[Межзадачное взаимодействие и синхронизация]

[См. также Blocking on Multiple RTOS Objects]

Описание

Так же, как и бинарные семафоры, счётные семафоры могут рассматриваться как очереди, но с длиной больше единицы. И точно так же, как и в случае бинарных семафоров, данные, хранящиеся в элементе очереди не важны. Важно только пуста очередь или нет.

Счётные семафоры имеют два основных применения:

  1. Подсчёт событий.

    В этом сценарии использования обработчик события будет выдавать семафор каждый раз, когда событие происходит, тем самым увеличивая значение счётчика семафора, а задача-обработчик каждый раз при обработке события будет брать семафор, тем самым уменьшая значение счётчика семафора. Поэтому значение счётчика будет разницей между количеством произошедших событий и количеством обработанных.  В этом случает желательно, чтобы при создании счётного семафора значение счётчика было равно нулю.

  2. Управление ресурсами.

    В этом сценарии использования значение счётчика указывает количество доступных ресурсов. Чтобы получить контроль над ресурсом, задача должна сначала получить семафор, уменьшив значение счётчика семафора. Если значение счётчика достигает нуля, свободных ресурсов больше нет. Когда задача заканчивает работу с ресурсом, то выдаёт семафор обратно, т.е. увеличивает значение счётчика семафора. В этом сценарии желательно, чтобы при создании счётного семафора значение счётчика было равно максимальному значению.

Документация и примеры использования

Список функций API для управления семафорами/мьютексами приведён в документации. Примеры их использования вы найдёте в файлах в каталоге FreeRTOS/Demo/Common/Minimal. Обратите внимание, что прерывания могут использовать только те функции, которые имеют суффикс "FromISR".

В учебнике по FreeRTOS вы найдёте дополнительную информацию по очередям, бинарным семафорам, мьютексам, счётным семафорам и рекурсивным семафорам. Также там в демонстрационных проектах приведены простые примеры их использования.

Hobby's category: