Timer - программные таймеры в CMSIS-RTOS2

Программные таймеры в среде CMSIS-RTOS2 являются дополнением к универсальным функциям ожидания (osDelay, osDelayUntil). Но в отличии от них, таймер инициирует не выполнение задачи (потока) а выполнение функции, которая называется функцией обратного вызова (callback function). По окончании счета таймера выполняется функция обратного вызова, связанная с этим таймером.

Каждый программный таймер может быть настроен как однократный, так и периодический. Периодический таймер повторяет свою работу до тех пор, пока он не будет удален или остановлен.

Все таймеры можно запустить (started), перезапустить (restarted) или остановить (stopped).

Иллюстрация работы таймера с сайта CMSIS-RTOS2 (ARM).



Структуры

osTimerAttr_t
Задает атрибуты нового таймера для функции osTimerNew()




Типы данных

osTimerId_t
Указатель на идентификатор программного таймера
/// \details Timer ID identifies the timer.
typedef  void  *osTimerId_t;
osTimerFunc_t
Указатель на функцию обратного вызова (callback function)
/// Timer callback function.
typedef  void (*osTimerFunc_t) (void *argument);




Перечислимые типы данных

osTimerType_t
Тип таймера. Указывается при его создании в функции osTimerNew().

Определяет таймер как однократный (one-shot) или периодический (repeating / periodic)

/// Timer type.
typedef enum {
   osTimerOnce       = 0,     /// One-shot timer.
   osTimerPeriodic   = 1      /// Repeating timer.
} osTimerType_t;




Функции

osTimerNew()
Создает и инициализирует новый программный таймер (Timer)
osTimerGetName()
Получает имя программного таймера
osTimerStart()
Запускает или перезапускает программный таймер
osTimerStop()
Останавливает таймер
osTimerIsRunning()
Проверяет, запущен ли программный таймер
osTimerDelete()
Удаляет таймер