osTimerNew() - создание программного таймера в CMSIS-RTOS2

Создает однократный или периодический программный таймер (Timer) и связывает его с функцией обратного вызова (callback function) с аргументом.

osTimerId_t  osTimerNew  (osTimerFunc_t        func,
                          osTimerType_t        type,
                          void                 *argument,
                          const osTimerAttr_t  *attr)

Параметры

func
function pointer to callback function
Указатель на функцию обратного вызова (callback function).
/// Timer callback function.
typedef  void (*osTimerFunc_t) (void *argument);
type
osTimerOnce for one-shot or osTimerPeriodic for periodic behavior
Одно из значений:

 -  osTimerOnce - для однократного вызова таймера;

 -  osTimerPeriodic - для периодической работы таймера;

/// Timer type.
typedef enum {
   osTimerOnce      = 0,     /// One-shot timer.
   osTimerPeriodic  = 1      /// Repeating timer.
} osTimerType_t;
*argument
argument to the timer callback function
Указатель на аргумент функции обратного вызова (callback function).
*attr
message queue attributes; NULL: default values
Указатель на структуру, содержащую атрибуты (свойства) создаваемого программного таймера. Если NULL - устанавливаются значения по умолчанию.
/// Attributes structure for timer.
typedef struct {
  const char           *name;      /// name of the timer
  uint32_t             attr_bits;  /// attribute bits
  void                 *cb_mem;    /// memory for control block
  uint32_t             cb_size;    /// size of provided memory for control block
} osTimerAttr_t;



Возвращаемое значение

osTimerId_t
timer ID for reference by other functions or NULL in case of error
Указатель на идентификатор программного таймера (тип значения - osTimerId_t / указатель на void) или NULL в случае ошибки.
/// \details Timer ID identifies the timer.
typedef  void  *osTimerId_t;



Описание

Созданный таймер находится в остановленном состоянии, пока не будет запущен с помощью функции osTimerStart().

Функцию osTimerNew() можно безопасно вызвать до запуска ядра RTOS osKernelStart(), но не до ее инициализации osKernelInitialize().

Функция osTimerNew() не может быть вызвана из процедуры обработки прерывания (ISR - Interrupt Service Routines).