pdTRUE
•
, если таймер находится в актив-
ном состоянии.
pdFALSE
•
, если таймер находится в пассив-
ном состоянии.
API-функция xTimerIsTimerActive() пред-
назначена для вызова только из тела задачи
или функции таймера.
Получение идентификатора таймера
При создании таймеру присваивается
идентификатор в виде указателя void*, что
позволяет связать таймер с произвольной
структурой данных.
API-функцию pvTimerGetTimerID() мож-
но вызывать из тела функции таймера для
получения идентификатора, в результате
срабатывания которого была вызвана эта
функция таймера. Прототип API-функции
pvTimerGetTimerID():
void *pvTimerGetTimerID( xTimerHandle xTimer );
Аргументом является дескриптор таймера,
идентификатор которого необходимо полу-
чить. pvTimerGetTimerID() возвращает ука-
затель на сам идентификатор.
работа с таймерами
из обработчиков прерываний
Есть возможность выполнять управление
таймерами из обработчиков прерываний ми-
кроконтроллера. Для рассмотренных выше
API-функций xTimerStart(), xTimerStop(),
xTimerChangePeriod() и xTimerReset() су-
ществуют версии, предназначенные для
вызова из обработчиков прерываний:
xTimerStartFromISR(), xTimerStopFromISR(),
x T i m e r C h a n g e P e r i o d F r o m I S R ( )
и xTimerResetFromISR(). Их прототипы:
portBASE_TYPE xTimerStartFromISR( xTimerHandle xTimer,
portBASE_TYPE *pxHigherPriorityTaskWoken );
portBASE_TYPE xTimerStopFromISR( xTimerHandle xTimer,
portBASE_TYPE *pxHigherPriorityTaskWoken );
portBASE_TYPE xTimerChangePeriodFromISR( xTimerHandle
x T i m e r , p o r t T i c k T y p e x N e w P e r i o d , p o r t B A S E _ T Y P E
*pxHigherPriorityTaskWoken );
portBASE_TYPE xTimerResetFromISR( xTimerHandle xTimer,
portBASE_TYPE *pxHigherPriorityTaskWoken );
По сравнению с API-функциями, предна-
значенными для вызова из задач, в версиях
API-функций, предназначенных для вызова
из обработчиков прерываний, произошли
следующие изменения в их аргументах:
1. Аргумент, который задавал время тайм-
аута, теперь отсутствует, что объясняет-
ся тем, что обработчик прерывания —
не задача и не может быть заблокирован
на какое-то время.
2. П о я в и л с я до п о л н и т е л ь н ы й а р г у -
мент pxHigherPriorityTaskWoken. API-
функции устанавливают значение
*pxHigherPriorityTaskWoken в pdTRUE,
если в данный момент выполняется за-
дача с приоритетом меньше, чем у задачи
обслуживания программных таймеров,
и в результате вызова API-функции в оче-
редь команд программных таймеров была
помещена команда, вследствие чего зада-
ча обслуживания таймеров разблокиро-
валась. В обработчике прерывания после
вызова одной из вышеперечисленных API-
функций необходимо отслеживать значе-
ние *pxHigherPriorityTaskWoken, и если
оно изменилось на pdTRUE, то необходимо
выполнить принудительное переключение
контекста задачи. Вследствие чего управле-
ние сразу же получит более высокоприори-
тетная задача обслуживания таймеров.
Достарыңызбен бөлісу: |