Компоненты и технологии • №2 '2011 компоненты



Pdf көрінісі
бет65/129
Дата28.09.2023
өлшемі4.1 Mb.
#478975
1   ...   61   62   63   64   65   66   67   68   ...   129
Kurniz

Счетные семафоры
Организация обработки прерываний с по-
мощью двоичных семафоров — отличное 
решение, если частота возникновения одно-
го и того же прерывания не превышает неко-
торый порог. Если это же самое прерывание 
возникнет до того, как задача-обработчик за-
вершит его обработку, то задача-обработчик 
не перейдет в блокированное состояние по за-
вершении обработки предыдущего прерыва-
ния, а сразу же займется обслуживанием сле-
дующего. Предыдущее прерывание окажется 
потерянным. Этот сценарий показан на рис. 7.
Таким образом, с использованием двоич-
ных семафоров из цепочки быстро следую-
щих друг за другом событий может быть об-
служено максимум одно событие.
Решить проблему обслуживания серии 
быстро следующих друг за другом событий 
можно используя счетные семафоры.
В отличие от двоичных семафоров со-
стояние счетного семафора определяется 
не значениями отдан/захвачен, а представ-
ляет собой целое неотрицательное число — 
значение счетного семафора. И если двоич-
рис. 7. «Потеря» прерывания при обработке с помощью двоичного семафора
а
б
в
г
д
е


28
КОМПОНЕНТЫ И ТЕХНОЛОГИИ • № 7 '2011
микроконтроллеры
ный семафор — это, по сути, очередь дли-
ной в 1 элемент, то счетный семафор можно 
представить очередью в несколько элемен-
тов. Причем текущее значение семафора 
представляет собой длину очереди, то есть 
количество элементов, которые в данный 
момент находятся в очереди. Значение эле-
ментов, хранящихся в очереди, когда она ис-
пользуется как счетный (или двоичный) се-
мафор, не важно, а важно само наличие или 
отсутствие элемента.
Существует два основных применения 
счетных семафоров:
1. Подсчет событий. В этом случае обработчик 
прерывания будет отдавать семафор, то есть 
увеличивать его значение на единицу, ког-
да происходит событие. Задача-обработчик 
будет захватывать семафор (уменьшать его 
значение на единицу) каждый раз при обра-
ботке события. Текущее значение семафора 
будет представлять собой разность между 
количеством событий, которые произошли, 
и количеством событий, которые обрабо-
таны. Такой способ организации взаимо-
действия показан на рис. 8. При создании 
счетного семафора для подсчета количества 
событий следует задавать начальное его зна-
чение, равное нулю.
2. Управление доступом к ресурсам. В этом 
случае значение счетного семафора пред-
ставляет собой количество доступных ре-
сурсов. Для получения доступа к ресурсу 
задача должна сначала получить (захва-
тить) семафор — это уменьшит значение 
семафора на единицу. Когда значение се-
мафора станет равным нулю, это означает, 
что доступных ресурсов нет. Когда задача 
завершает работу с данным ресурсом, она 
отдает семафор — увеличивает его значе-
ние на единицу. При создании счетного се-
мафора для управления ресурсами следует 
задавать начальное его значение равным 
количеству свободных ресурсов. В даль-
нейших публикациях будет более подроб-
но освещена тема управления ресурсами 
во FreeRTOS.


Достарыңызбен бөлісу:
1   ...   61   62   63   64   65   66   67   68   ...   129




©dereksiz.org 2024
әкімшілігінің қараңыз

    Басты бет