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


pdTRUE • , если таймер находится в актив- ном состоянии. pdFALSE



Pdf көрінісі
бет126/129
Дата28.09.2023
өлшемі4.1 Mb.
#478975
1   ...   121   122   123   124   125   126   127   128   129
Kurniz

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, то необходимо 
выполнить принудительное переключение 
контекста задачи. Вследствие чего управле-
ние сразу же получит более высокоприори-
тетная задача обслуживания таймеров.


Достарыңызбен бөлісу:
1   ...   121   122   123   124   125   126   127   128   129




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

    Басты бет